// 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" openapi_types "github.com/oapi-codegen/runtime/types" ) // User defines model for User. type User struct { Email openapi_types.Email `json:"email"` Id string `json:"id"` Username string `json:"username"` } // UserCreate defines model for UserCreate. type UserCreate struct { Email openapi_types.Email `json:"email"` Password string `json:"password"` Username string `json:"username"` } // UserUpdate defines model for UserUpdate. type UserUpdate struct { Email openapi_types.Email `json:"email"` Username string `json:"username"` } // PostUsersJSONRequestBody defines body for PostUsers for application/json ContentType. type PostUsersJSONRequestBody = UserCreate // PutUsersUserIdJSONRequestBody defines body for PutUsersUserId for application/json ContentType. type PutUsersUserIdJSONRequestBody = UserUpdate // ServerInterface represents all server handlers. type ServerInterface interface { // Get all users // (GET /users) GetUsers(c *fiber.Ctx) error // Create a new user // (POST /users) PostUsers(c *fiber.Ctx) error // Delete a user by ID // (DELETE /users/{userId}) DeleteUsersUserId(c *fiber.Ctx, userId string) error // Get a user by ID // (GET /users/{userId}) GetUsersUserId(c *fiber.Ctx, userId string) error // Update a user by ID // (PUT /users/{userId}) PutUsersUserId(c *fiber.Ctx, userId string) error } // ServerInterfaceWrapper converts contexts to parameters. type ServerInterfaceWrapper struct { Handler ServerInterface } type MiddlewareFunc fiber.Handler // GetUsers operation middleware func (siw *ServerInterfaceWrapper) GetUsers(c *fiber.Ctx) error { return siw.Handler.GetUsers(c) } // PostUsers operation middleware func (siw *ServerInterfaceWrapper) PostUsers(c *fiber.Ctx) error { return siw.Handler.PostUsers(c) } // DeleteUsersUserId operation middleware func (siw *ServerInterfaceWrapper) DeleteUsersUserId(c *fiber.Ctx) error { var err error // ------------- Path parameter "userId" ------------- var userId string err = runtime.BindStyledParameterWithOptions("simple", "userId", c.Params("userId"), &userId, runtime.BindStyledParameterOptions{Explode: false, Required: true}) if err != nil { return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter userId: %w", err).Error()) } return siw.Handler.DeleteUsersUserId(c, userId) } // GetUsersUserId operation middleware func (siw *ServerInterfaceWrapper) GetUsersUserId(c *fiber.Ctx) error { var err error // ------------- Path parameter "userId" ------------- var userId string err = runtime.BindStyledParameterWithOptions("simple", "userId", c.Params("userId"), &userId, runtime.BindStyledParameterOptions{Explode: false, Required: true}) if err != nil { return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter userId: %w", err).Error()) } return siw.Handler.GetUsersUserId(c, userId) } // PutUsersUserId operation middleware func (siw *ServerInterfaceWrapper) PutUsersUserId(c *fiber.Ctx) error { var err error // ------------- Path parameter "userId" ------------- var userId string err = runtime.BindStyledParameterWithOptions("simple", "userId", c.Params("userId"), &userId, runtime.BindStyledParameterOptions{Explode: false, Required: true}) if err != nil { return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter userId: %w", err).Error()) } return siw.Handler.PutUsersUserId(c, userId) } // 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+"/users", wrapper.GetUsers) router.Post(options.BaseURL+"/users", wrapper.PostUsers) router.Delete(options.BaseURL+"/users/:userId", wrapper.DeleteUsersUserId) router.Get(options.BaseURL+"/users/:userId", wrapper.GetUsersUserId) router.Put(options.BaseURL+"/users/:userId", wrapper.PutUsersUserId) } type GetUsersRequestObject struct { } type GetUsersResponseObject interface { VisitGetUsersResponse(ctx *fiber.Ctx) error } type GetUsers200JSONResponse []User func (response GetUsers200JSONResponse) VisitGetUsersResponse(ctx *fiber.Ctx) error { ctx.Response().Header.Set("Content-Type", "application/json") ctx.Status(200) return ctx.JSON(&response) } type PostUsersRequestObject struct { Body *PostUsersJSONRequestBody } type PostUsersResponseObject interface { VisitPostUsersResponse(ctx *fiber.Ctx) error } type PostUsers201JSONResponse User func (response PostUsers201JSONResponse) VisitPostUsersResponse(ctx *fiber.Ctx) error { ctx.Response().Header.Set("Content-Type", "application/json") ctx.Status(201) return ctx.JSON(&response) } type DeleteUsersUserIdRequestObject struct { UserId string `json:"userId"` } type DeleteUsersUserIdResponseObject interface { VisitDeleteUsersUserIdResponse(ctx *fiber.Ctx) error } type DeleteUsersUserId204Response struct { } func (response DeleteUsersUserId204Response) VisitDeleteUsersUserIdResponse(ctx *fiber.Ctx) error { ctx.Status(204) return nil } type DeleteUsersUserId404Response struct { } func (response DeleteUsersUserId404Response) VisitDeleteUsersUserIdResponse(ctx *fiber.Ctx) error { ctx.Status(404) return nil } type GetUsersUserIdRequestObject struct { UserId string `json:"userId"` } type GetUsersUserIdResponseObject interface { VisitGetUsersUserIdResponse(ctx *fiber.Ctx) error } type GetUsersUserId200JSONResponse User func (response GetUsersUserId200JSONResponse) VisitGetUsersUserIdResponse(ctx *fiber.Ctx) error { ctx.Response().Header.Set("Content-Type", "application/json") ctx.Status(200) return ctx.JSON(&response) } type GetUsersUserId404Response struct { } func (response GetUsersUserId404Response) VisitGetUsersUserIdResponse(ctx *fiber.Ctx) error { ctx.Status(404) return nil } type PutUsersUserIdRequestObject struct { UserId string `json:"userId"` Body *PutUsersUserIdJSONRequestBody } type PutUsersUserIdResponseObject interface { VisitPutUsersUserIdResponse(ctx *fiber.Ctx) error } type PutUsersUserId200JSONResponse User func (response PutUsersUserId200JSONResponse) VisitPutUsersUserIdResponse(ctx *fiber.Ctx) error { ctx.Response().Header.Set("Content-Type", "application/json") ctx.Status(200) return ctx.JSON(&response) } type PutUsersUserId404Response struct { } func (response PutUsersUserId404Response) VisitPutUsersUserIdResponse(ctx *fiber.Ctx) error { ctx.Status(404) return nil } // StrictServerInterface represents all server handlers. type StrictServerInterface interface { // Get all users // (GET /users) GetUsers(ctx context.Context, request GetUsersRequestObject) (GetUsersResponseObject, error) // Create a new user // (POST /users) PostUsers(ctx context.Context, request PostUsersRequestObject) (PostUsersResponseObject, error) // Delete a user by ID // (DELETE /users/{userId}) DeleteUsersUserId(ctx context.Context, request DeleteUsersUserIdRequestObject) (DeleteUsersUserIdResponseObject, error) // Get a user by ID // (GET /users/{userId}) GetUsersUserId(ctx context.Context, request GetUsersUserIdRequestObject) (GetUsersUserIdResponseObject, error) // Update a user by ID // (PUT /users/{userId}) PutUsersUserId(ctx context.Context, request PutUsersUserIdRequestObject) (PutUsersUserIdResponseObject, 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 } // GetUsers operation middleware func (sh *strictHandler) GetUsers(ctx *fiber.Ctx) error { var request GetUsersRequestObject handler := func(ctx *fiber.Ctx, request interface{}) (interface{}, error) { return sh.ssi.GetUsers(ctx.UserContext(), request.(GetUsersRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "GetUsers") } response, err := handler(ctx, request) if err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } else if validResponse, ok := response.(GetUsersResponseObject); ok { if err := validResponse.VisitGetUsersResponse(ctx); err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } // PostUsers operation middleware func (sh *strictHandler) PostUsers(ctx *fiber.Ctx) error { var request PostUsersRequestObject var body PostUsersJSONRequestBody 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.PostUsers(ctx.UserContext(), request.(PostUsersRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "PostUsers") } response, err := handler(ctx, request) if err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } else if validResponse, ok := response.(PostUsersResponseObject); ok { if err := validResponse.VisitPostUsersResponse(ctx); err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } // DeleteUsersUserId operation middleware func (sh *strictHandler) DeleteUsersUserId(ctx *fiber.Ctx, userId string) error { var request DeleteUsersUserIdRequestObject request.UserId = userId handler := func(ctx *fiber.Ctx, request interface{}) (interface{}, error) { return sh.ssi.DeleteUsersUserId(ctx.UserContext(), request.(DeleteUsersUserIdRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "DeleteUsersUserId") } response, err := handler(ctx, request) if err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } else if validResponse, ok := response.(DeleteUsersUserIdResponseObject); ok { if err := validResponse.VisitDeleteUsersUserIdResponse(ctx); err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } // GetUsersUserId operation middleware func (sh *strictHandler) GetUsersUserId(ctx *fiber.Ctx, userId string) error { var request GetUsersUserIdRequestObject request.UserId = userId handler := func(ctx *fiber.Ctx, request interface{}) (interface{}, error) { return sh.ssi.GetUsersUserId(ctx.UserContext(), request.(GetUsersUserIdRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "GetUsersUserId") } response, err := handler(ctx, request) if err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } else if validResponse, ok := response.(GetUsersUserIdResponseObject); ok { if err := validResponse.VisitGetUsersUserIdResponse(ctx); err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } // PutUsersUserId operation middleware func (sh *strictHandler) PutUsersUserId(ctx *fiber.Ctx, userId string) error { var request PutUsersUserIdRequestObject request.UserId = userId var body PutUsersUserIdJSONRequestBody 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.PutUsersUserId(ctx.UserContext(), request.(PutUsersUserIdRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "PutUsersUserId") } response, err := handler(ctx, request) if err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } else if validResponse, ok := response.(PutUsersUserIdResponseObject); ok { if err := validResponse.VisitPutUsersUserIdResponse(ctx); err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil }