// 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" ) // User defines model for User. type User struct { PhoneNumber string `json:"phone_number"` Uuid string `json:"uuid"` } // UserCreate defines model for UserCreate. type UserCreate struct { PhoneNumber string `json:"phone_number"` } // CreateUserJSONRequestBody defines body for CreateUser for application/json ContentType. type CreateUserJSONRequestBody = UserCreate // ServerInterface represents all server handlers. type ServerInterface interface { // Create a new user with phone number // (POST /users) CreateUser(c *fiber.Ctx) error // Get a user by ID // (GET /users/{userId}) GetUserById(c *fiber.Ctx, userId string) error } // ServerInterfaceWrapper converts contexts to parameters. type ServerInterfaceWrapper struct { Handler ServerInterface } type MiddlewareFunc fiber.Handler // CreateUser operation middleware func (siw *ServerInterfaceWrapper) CreateUser(c *fiber.Ctx) error { return siw.Handler.CreateUser(c) } // GetUserById operation middleware func (siw *ServerInterfaceWrapper) GetUserById(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.GetUserById(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.Post(options.BaseURL+"/users", wrapper.CreateUser) router.Get(options.BaseURL+"/users/:userId", wrapper.GetUserById) } type CreateUserRequestObject struct { Body *CreateUserJSONRequestBody } type CreateUserResponseObject interface { VisitCreateUserResponse(ctx *fiber.Ctx) error } type CreateUser200JSONResponse User func (response CreateUser200JSONResponse) VisitCreateUserResponse(ctx *fiber.Ctx) error { ctx.Response().Header.Set("Content-Type", "application/json") ctx.Status(200) return ctx.JSON(&response) } type GetUserByIdRequestObject struct { UserId string `json:"userId"` } type GetUserByIdResponseObject interface { VisitGetUserByIdResponse(ctx *fiber.Ctx) error } type GetUserById200JSONResponse struct { User User `json:"user"` } func (response GetUserById200JSONResponse) VisitGetUserByIdResponse(ctx *fiber.Ctx) error { ctx.Response().Header.Set("Content-Type", "application/json") ctx.Status(200) return ctx.JSON(&response) } type GetUserById404JSONResponse struct { Message string `json:"message"` } func (response GetUserById404JSONResponse) VisitGetUserByIdResponse(ctx *fiber.Ctx) error { ctx.Response().Header.Set("Content-Type", "application/json") ctx.Status(404) return ctx.JSON(&response) } // StrictServerInterface represents all server handlers. type StrictServerInterface interface { // Create a new user with phone number // (POST /users) CreateUser(ctx context.Context, request CreateUserRequestObject) (CreateUserResponseObject, error) // Get a user by ID // (GET /users/{userId}) GetUserById(ctx context.Context, request GetUserByIdRequestObject) (GetUserByIdResponseObject, 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 } // CreateUser operation middleware func (sh *strictHandler) CreateUser(ctx *fiber.Ctx) error { var request CreateUserRequestObject var body CreateUserJSONRequestBody 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.CreateUser(ctx.UserContext(), request.(CreateUserRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "CreateUser") } response, err := handler(ctx, request) if err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } else if validResponse, ok := response.(CreateUserResponseObject); ok { if err := validResponse.VisitCreateUserResponse(ctx); err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } // GetUserById operation middleware func (sh *strictHandler) GetUserById(ctx *fiber.Ctx, userId string) error { var request GetUserByIdRequestObject request.UserId = userId handler := func(ctx *fiber.Ctx, request interface{}) (interface{}, error) { return sh.ssi.GetUserById(ctx.UserContext(), request.(GetUserByIdRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "GetUserById") } response, err := handler(ctx, request) if err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } else if validResponse, ok := response.(GetUserByIdResponseObject); ok { if err := validResponse.VisitGetUserByIdResponse(ctx); err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil }