442 lines
13 KiB
Go
442 lines
13 KiB
Go
// Package handler provides primitives to interact with the openapi HTTP API.
|
|
//
|
|
// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.5.0 DO NOT EDIT.
|
|
package handler
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/oapi-codegen/runtime"
|
|
)
|
|
|
|
// Todo defines model for Todo.
|
|
type Todo struct {
|
|
Completed bool `json:"completed"`
|
|
Description *string `json:"description,omitempty"`
|
|
Id string `json:"id"`
|
|
Title string `json:"title"`
|
|
}
|
|
|
|
// TodoCreate defines model for TodoCreate.
|
|
type TodoCreate struct {
|
|
Description *string `json:"description,omitempty"`
|
|
Title string `json:"title"`
|
|
}
|
|
|
|
// TodoUpdate defines model for TodoUpdate.
|
|
type TodoUpdate struct {
|
|
Completed *bool `json:"completed,omitempty"`
|
|
Description *string `json:"description,omitempty"`
|
|
Title *string `json:"title,omitempty"`
|
|
}
|
|
|
|
// PostTodosJSONRequestBody defines body for PostTodos for application/json ContentType.
|
|
type PostTodosJSONRequestBody = TodoCreate
|
|
|
|
// PutTodosTodoIdJSONRequestBody defines body for PutTodosTodoId for application/json ContentType.
|
|
type PutTodosTodoIdJSONRequestBody = TodoUpdate
|
|
|
|
// ServerInterface represents all server handlers.
|
|
type ServerInterface interface {
|
|
// Get all todos
|
|
// (GET /todos)
|
|
GetTodos(c *fiber.Ctx) error
|
|
// Create a new todo
|
|
// (POST /todos)
|
|
PostTodos(c *fiber.Ctx) error
|
|
// Delete a todo by ID
|
|
// (DELETE /todos/{todoId})
|
|
DeleteTodosTodoId(c *fiber.Ctx, todoId string) error
|
|
// Get a todo by ID
|
|
// (GET /todos/{todoId})
|
|
GetTodosTodoId(c *fiber.Ctx, todoId string) error
|
|
// Update a todo by ID
|
|
// (PUT /todos/{todoId})
|
|
PutTodosTodoId(c *fiber.Ctx, todoId string) error
|
|
}
|
|
|
|
// ServerInterfaceWrapper converts contexts to parameters.
|
|
type ServerInterfaceWrapper struct {
|
|
Handler ServerInterface
|
|
}
|
|
|
|
type MiddlewareFunc fiber.Handler
|
|
|
|
// GetTodos operation middleware
|
|
func (siw *ServerInterfaceWrapper) GetTodos(c *fiber.Ctx) error {
|
|
|
|
return siw.Handler.GetTodos(c)
|
|
}
|
|
|
|
// PostTodos operation middleware
|
|
func (siw *ServerInterfaceWrapper) PostTodos(c *fiber.Ctx) error {
|
|
|
|
return siw.Handler.PostTodos(c)
|
|
}
|
|
|
|
// DeleteTodosTodoId operation middleware
|
|
func (siw *ServerInterfaceWrapper) DeleteTodosTodoId(c *fiber.Ctx) error {
|
|
|
|
var err error
|
|
|
|
// ------------- Path parameter "todoId" -------------
|
|
var todoId string
|
|
|
|
err = runtime.BindStyledParameterWithOptions("simple", "todoId", c.Params("todoId"), &todoId, runtime.BindStyledParameterOptions{Explode: false, Required: true})
|
|
if err != nil {
|
|
return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter todoId: %w", err).Error())
|
|
}
|
|
|
|
return siw.Handler.DeleteTodosTodoId(c, todoId)
|
|
}
|
|
|
|
// GetTodosTodoId operation middleware
|
|
func (siw *ServerInterfaceWrapper) GetTodosTodoId(c *fiber.Ctx) error {
|
|
|
|
var err error
|
|
|
|
// ------------- Path parameter "todoId" -------------
|
|
var todoId string
|
|
|
|
err = runtime.BindStyledParameterWithOptions("simple", "todoId", c.Params("todoId"), &todoId, runtime.BindStyledParameterOptions{Explode: false, Required: true})
|
|
if err != nil {
|
|
return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter todoId: %w", err).Error())
|
|
}
|
|
|
|
return siw.Handler.GetTodosTodoId(c, todoId)
|
|
}
|
|
|
|
// PutTodosTodoId operation middleware
|
|
func (siw *ServerInterfaceWrapper) PutTodosTodoId(c *fiber.Ctx) error {
|
|
|
|
var err error
|
|
|
|
// ------------- Path parameter "todoId" -------------
|
|
var todoId string
|
|
|
|
err = runtime.BindStyledParameterWithOptions("simple", "todoId", c.Params("todoId"), &todoId, runtime.BindStyledParameterOptions{Explode: false, Required: true})
|
|
if err != nil {
|
|
return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter todoId: %w", err).Error())
|
|
}
|
|
|
|
return siw.Handler.PutTodosTodoId(c, todoId)
|
|
}
|
|
|
|
// FiberServerOptions provides options for the Fiber server.
|
|
type FiberServerOptions struct {
|
|
BaseURL string
|
|
Middlewares []MiddlewareFunc
|
|
}
|
|
|
|
// RegisterHandlers creates http.Handler with routing matching OpenAPI spec.
|
|
func RegisterHandlers(router fiber.Router, si ServerInterface) {
|
|
RegisterHandlersWithOptions(router, si, FiberServerOptions{})
|
|
}
|
|
|
|
// RegisterHandlersWithOptions creates http.Handler with additional options
|
|
func RegisterHandlersWithOptions(router fiber.Router, si ServerInterface, options FiberServerOptions) {
|
|
wrapper := ServerInterfaceWrapper{
|
|
Handler: si,
|
|
}
|
|
|
|
for _, m := range options.Middlewares {
|
|
router.Use(fiber.Handler(m))
|
|
}
|
|
|
|
router.Get(options.BaseURL+"/todos", wrapper.GetTodos)
|
|
|
|
router.Post(options.BaseURL+"/todos", wrapper.PostTodos)
|
|
|
|
router.Delete(options.BaseURL+"/todos/:todoId", wrapper.DeleteTodosTodoId)
|
|
|
|
router.Get(options.BaseURL+"/todos/:todoId", wrapper.GetTodosTodoId)
|
|
|
|
router.Put(options.BaseURL+"/todos/:todoId", wrapper.PutTodosTodoId)
|
|
|
|
}
|
|
|
|
type GetTodosRequestObject struct {
|
|
}
|
|
|
|
type GetTodosResponseObject interface {
|
|
VisitGetTodosResponse(ctx *fiber.Ctx) error
|
|
}
|
|
|
|
type GetTodos200JSONResponse []Todo
|
|
|
|
func (response GetTodos200JSONResponse) VisitGetTodosResponse(ctx *fiber.Ctx) error {
|
|
ctx.Response().Header.Set("Content-Type", "application/json")
|
|
ctx.Status(200)
|
|
|
|
return ctx.JSON(&response)
|
|
}
|
|
|
|
type PostTodosRequestObject struct {
|
|
Body *PostTodosJSONRequestBody
|
|
}
|
|
|
|
type PostTodosResponseObject interface {
|
|
VisitPostTodosResponse(ctx *fiber.Ctx) error
|
|
}
|
|
|
|
type PostTodos201JSONResponse Todo
|
|
|
|
func (response PostTodos201JSONResponse) VisitPostTodosResponse(ctx *fiber.Ctx) error {
|
|
ctx.Response().Header.Set("Content-Type", "application/json")
|
|
ctx.Status(201)
|
|
|
|
return ctx.JSON(&response)
|
|
}
|
|
|
|
type DeleteTodosTodoIdRequestObject struct {
|
|
TodoId string `json:"todoId"`
|
|
}
|
|
|
|
type DeleteTodosTodoIdResponseObject interface {
|
|
VisitDeleteTodosTodoIdResponse(ctx *fiber.Ctx) error
|
|
}
|
|
|
|
type DeleteTodosTodoId204Response struct {
|
|
}
|
|
|
|
func (response DeleteTodosTodoId204Response) VisitDeleteTodosTodoIdResponse(ctx *fiber.Ctx) error {
|
|
ctx.Status(204)
|
|
return nil
|
|
}
|
|
|
|
type DeleteTodosTodoId404Response struct {
|
|
}
|
|
|
|
func (response DeleteTodosTodoId404Response) VisitDeleteTodosTodoIdResponse(ctx *fiber.Ctx) error {
|
|
ctx.Status(404)
|
|
return nil
|
|
}
|
|
|
|
type GetTodosTodoIdRequestObject struct {
|
|
TodoId string `json:"todoId"`
|
|
}
|
|
|
|
type GetTodosTodoIdResponseObject interface {
|
|
VisitGetTodosTodoIdResponse(ctx *fiber.Ctx) error
|
|
}
|
|
|
|
type GetTodosTodoId200JSONResponse Todo
|
|
|
|
func (response GetTodosTodoId200JSONResponse) VisitGetTodosTodoIdResponse(ctx *fiber.Ctx) error {
|
|
ctx.Response().Header.Set("Content-Type", "application/json")
|
|
ctx.Status(200)
|
|
|
|
return ctx.JSON(&response)
|
|
}
|
|
|
|
type GetTodosTodoId404Response struct {
|
|
}
|
|
|
|
func (response GetTodosTodoId404Response) VisitGetTodosTodoIdResponse(ctx *fiber.Ctx) error {
|
|
ctx.Status(404)
|
|
return nil
|
|
}
|
|
|
|
type PutTodosTodoIdRequestObject struct {
|
|
TodoId string `json:"todoId"`
|
|
Body *PutTodosTodoIdJSONRequestBody
|
|
}
|
|
|
|
type PutTodosTodoIdResponseObject interface {
|
|
VisitPutTodosTodoIdResponse(ctx *fiber.Ctx) error
|
|
}
|
|
|
|
type PutTodosTodoId200JSONResponse Todo
|
|
|
|
func (response PutTodosTodoId200JSONResponse) VisitPutTodosTodoIdResponse(ctx *fiber.Ctx) error {
|
|
ctx.Response().Header.Set("Content-Type", "application/json")
|
|
ctx.Status(200)
|
|
|
|
return ctx.JSON(&response)
|
|
}
|
|
|
|
type PutTodosTodoId404Response struct {
|
|
}
|
|
|
|
func (response PutTodosTodoId404Response) VisitPutTodosTodoIdResponse(ctx *fiber.Ctx) error {
|
|
ctx.Status(404)
|
|
return nil
|
|
}
|
|
|
|
// StrictServerInterface represents all server handlers.
|
|
type StrictServerInterface interface {
|
|
// Get all todos
|
|
// (GET /todos)
|
|
GetTodos(ctx context.Context, request GetTodosRequestObject) (GetTodosResponseObject, error)
|
|
// Create a new todo
|
|
// (POST /todos)
|
|
PostTodos(ctx context.Context, request PostTodosRequestObject) (PostTodosResponseObject, error)
|
|
// Delete a todo by ID
|
|
// (DELETE /todos/{todoId})
|
|
DeleteTodosTodoId(ctx context.Context, request DeleteTodosTodoIdRequestObject) (DeleteTodosTodoIdResponseObject, error)
|
|
// Get a todo by ID
|
|
// (GET /todos/{todoId})
|
|
GetTodosTodoId(ctx context.Context, request GetTodosTodoIdRequestObject) (GetTodosTodoIdResponseObject, error)
|
|
// Update a todo by ID
|
|
// (PUT /todos/{todoId})
|
|
PutTodosTodoId(ctx context.Context, request PutTodosTodoIdRequestObject) (PutTodosTodoIdResponseObject, error)
|
|
}
|
|
|
|
type StrictHandlerFunc func(ctx *fiber.Ctx, args interface{}) (interface{}, error)
|
|
|
|
type StrictMiddlewareFunc func(f StrictHandlerFunc, operationID string) StrictHandlerFunc
|
|
|
|
func NewStrictHandler(ssi StrictServerInterface, middlewares []StrictMiddlewareFunc) ServerInterface {
|
|
return &strictHandler{ssi: ssi, middlewares: middlewares}
|
|
}
|
|
|
|
type strictHandler struct {
|
|
ssi StrictServerInterface
|
|
middlewares []StrictMiddlewareFunc
|
|
}
|
|
|
|
// GetTodos operation middleware
|
|
func (sh *strictHandler) GetTodos(ctx *fiber.Ctx) error {
|
|
var request GetTodosRequestObject
|
|
|
|
handler := func(ctx *fiber.Ctx, request interface{}) (interface{}, error) {
|
|
return sh.ssi.GetTodos(ctx.UserContext(), request.(GetTodosRequestObject))
|
|
}
|
|
for _, middleware := range sh.middlewares {
|
|
handler = middleware(handler, "GetTodos")
|
|
}
|
|
|
|
response, err := handler(ctx, request)
|
|
|
|
if err != nil {
|
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
|
} else if validResponse, ok := response.(GetTodosResponseObject); ok {
|
|
if err := validResponse.VisitGetTodosResponse(ctx); err != nil {
|
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
|
}
|
|
} else if response != nil {
|
|
return fmt.Errorf("unexpected response type: %T", response)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// PostTodos operation middleware
|
|
func (sh *strictHandler) PostTodos(ctx *fiber.Ctx) error {
|
|
var request PostTodosRequestObject
|
|
|
|
var body PostTodosJSONRequestBody
|
|
if err := ctx.BodyParser(&body); err != nil {
|
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
|
}
|
|
request.Body = &body
|
|
|
|
handler := func(ctx *fiber.Ctx, request interface{}) (interface{}, error) {
|
|
return sh.ssi.PostTodos(ctx.UserContext(), request.(PostTodosRequestObject))
|
|
}
|
|
for _, middleware := range sh.middlewares {
|
|
handler = middleware(handler, "PostTodos")
|
|
}
|
|
|
|
response, err := handler(ctx, request)
|
|
|
|
if err != nil {
|
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
|
} else if validResponse, ok := response.(PostTodosResponseObject); ok {
|
|
if err := validResponse.VisitPostTodosResponse(ctx); err != nil {
|
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
|
}
|
|
} else if response != nil {
|
|
return fmt.Errorf("unexpected response type: %T", response)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// DeleteTodosTodoId operation middleware
|
|
func (sh *strictHandler) DeleteTodosTodoId(ctx *fiber.Ctx, todoId string) error {
|
|
var request DeleteTodosTodoIdRequestObject
|
|
|
|
request.TodoId = todoId
|
|
|
|
handler := func(ctx *fiber.Ctx, request interface{}) (interface{}, error) {
|
|
return sh.ssi.DeleteTodosTodoId(ctx.UserContext(), request.(DeleteTodosTodoIdRequestObject))
|
|
}
|
|
for _, middleware := range sh.middlewares {
|
|
handler = middleware(handler, "DeleteTodosTodoId")
|
|
}
|
|
|
|
response, err := handler(ctx, request)
|
|
|
|
if err != nil {
|
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
|
} else if validResponse, ok := response.(DeleteTodosTodoIdResponseObject); ok {
|
|
if err := validResponse.VisitDeleteTodosTodoIdResponse(ctx); err != nil {
|
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
|
}
|
|
} else if response != nil {
|
|
return fmt.Errorf("unexpected response type: %T", response)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetTodosTodoId operation middleware
|
|
func (sh *strictHandler) GetTodosTodoId(ctx *fiber.Ctx, todoId string) error {
|
|
var request GetTodosTodoIdRequestObject
|
|
|
|
request.TodoId = todoId
|
|
|
|
handler := func(ctx *fiber.Ctx, request interface{}) (interface{}, error) {
|
|
return sh.ssi.GetTodosTodoId(ctx.UserContext(), request.(GetTodosTodoIdRequestObject))
|
|
}
|
|
for _, middleware := range sh.middlewares {
|
|
handler = middleware(handler, "GetTodosTodoId")
|
|
}
|
|
|
|
response, err := handler(ctx, request)
|
|
|
|
if err != nil {
|
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
|
} else if validResponse, ok := response.(GetTodosTodoIdResponseObject); ok {
|
|
if err := validResponse.VisitGetTodosTodoIdResponse(ctx); err != nil {
|
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
|
}
|
|
} else if response != nil {
|
|
return fmt.Errorf("unexpected response type: %T", response)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// PutTodosTodoId operation middleware
|
|
func (sh *strictHandler) PutTodosTodoId(ctx *fiber.Ctx, todoId string) error {
|
|
var request PutTodosTodoIdRequestObject
|
|
|
|
request.TodoId = todoId
|
|
|
|
var body PutTodosTodoIdJSONRequestBody
|
|
if err := ctx.BodyParser(&body); err != nil {
|
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
|
}
|
|
request.Body = &body
|
|
|
|
handler := func(ctx *fiber.Ctx, request interface{}) (interface{}, error) {
|
|
return sh.ssi.PutTodosTodoId(ctx.UserContext(), request.(PutTodosTodoIdRequestObject))
|
|
}
|
|
for _, middleware := range sh.middlewares {
|
|
handler = middleware(handler, "PutTodosTodoId")
|
|
}
|
|
|
|
response, err := handler(ctx, request)
|
|
|
|
if err != nil {
|
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
|
} else if validResponse, ok := response.(PutTodosTodoIdResponseObject); ok {
|
|
if err := validResponse.VisitPutTodosTodoIdResponse(ctx); err != nil {
|
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
|
}
|
|
} else if response != nil {
|
|
return fmt.Errorf("unexpected response type: %T", response)
|
|
}
|
|
return nil
|
|
}
|