// 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 }