// Package server provides primitives to interact with the openapi HTTP API. // // Code generated by github.com/deepmap/oapi-codegen/v2 version v2.1.0 DO NOT EDIT. package server import ( "bytes" "compress/gzip" "context" "encoding/base64" "fmt" "net/url" "path" "strings" "github.com/getkin/kin-openapi/openapi3" "github.com/gofiber/fiber/v2" "github.com/oapi-codegen/runtime" "gitlab.mareshq.com/hq/yggdrasil/pkg/training" ) // CreateTrainingRequest defines model for CreateTrainingRequest. type CreateTrainingRequest = NewTraining // CreateTrainingResponse defines model for CreateTrainingResponse. type CreateTrainingResponse = Training // GetTrainingResponse defines model for GetTrainingResponse. type GetTrainingResponse = Training // ListTrainingsResponse defines model for ListTrainingsResponse. type ListTrainingsResponse = []Training // NewTraining defines model for NewTraining. type NewTraining struct { Days int8 `json:"days"` Description string `json:"description"` Name string `json:"name"` } // ProblemDetails Schema that carries the details of an error in an HTTP response. See https://datatracker.ietf.org/doc/html/rfc7807 for more information. type ProblemDetails struct { // Detail A human-readable explanation specific to this occurrence of the problem. Detail string `json:"detail"` // Instance A URI reference that identifies the specific occurrence of the problem. Instance string `json:"instance"` // Status The HTTP status code generated by the origin server for this occurrence of the problem. Status int `json:"status"` // Title A human-readable summary of the problem type. Title string `json:"title"` // Type A URI reference that identifies the problem type. Type string `json:"type"` } // Training defines model for Training. type Training struct { Days int8 `json:"days"` Description string `json:"description"` Id TrainingID `json:"id"` Name string `json:"name"` } // TrainingID defines model for TrainingID. type TrainingID = training.TrainingID // UpdateTrainingRequest defines model for UpdateTrainingRequest. type UpdateTrainingRequest = NewTraining // UpdateTrainingResponse defines model for UpdateTrainingResponse. type UpdateTrainingResponse = Training // InternalError Schema that carries the details of an error in an HTTP response. See https://datatracker.ietf.org/doc/html/rfc7807 for more information. type InternalError = ProblemDetails // InvalidInputError Schema that carries the details of an error in an HTTP response. See https://datatracker.ietf.org/doc/html/rfc7807 for more information. type InvalidInputError = ProblemDetails // NotFoundError Schema that carries the details of an error in an HTTP response. See https://datatracker.ietf.org/doc/html/rfc7807 for more information. type NotFoundError = ProblemDetails // CreateTrainingJSONRequestBody defines body for CreateTraining for application/json ContentType. type CreateTrainingJSONRequestBody = CreateTrainingRequest // UpdateTrainingJSONRequestBody defines body for UpdateTraining for application/json ContentType. type UpdateTrainingJSONRequestBody = UpdateTrainingRequest // ServerInterface represents all server handlers. type ServerInterface interface { // List all trainings // (GET /v1/trainings) ListTrainings(c *fiber.Ctx) error // Create a new training // (POST /v1/trainings) CreateTraining(c *fiber.Ctx) error // Delete a training by ID // (DELETE /v1/trainings/{trainingID}) DeleteTraining(c *fiber.Ctx, trainingID TrainingID) error // Get a training by ID // (GET /v1/trainings/{trainingID}) GetTraining(c *fiber.Ctx, trainingID TrainingID) error // Update a training by ID // (PUT /v1/trainings/{trainingID}) UpdateTraining(c *fiber.Ctx, trainingID TrainingID) error } // ServerInterfaceWrapper converts contexts to parameters. type ServerInterfaceWrapper struct { Handler ServerInterface } type MiddlewareFunc fiber.Handler // ListTrainings operation middleware func (siw *ServerInterfaceWrapper) ListTrainings(c *fiber.Ctx) error { return siw.Handler.ListTrainings(c) } // CreateTraining operation middleware func (siw *ServerInterfaceWrapper) CreateTraining(c *fiber.Ctx) error { return siw.Handler.CreateTraining(c) } // DeleteTraining operation middleware func (siw *ServerInterfaceWrapper) DeleteTraining(c *fiber.Ctx) error { var err error // ------------- Path parameter "trainingID" ------------- var trainingID TrainingID err = runtime.BindStyledParameterWithOptions("simple", "trainingID", c.Params("trainingID"), &trainingID, runtime.BindStyledParameterOptions{Explode: false, Required: true}) if err != nil { return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter trainingID: %w", err).Error()) } return siw.Handler.DeleteTraining(c, trainingID) } // GetTraining operation middleware func (siw *ServerInterfaceWrapper) GetTraining(c *fiber.Ctx) error { var err error // ------------- Path parameter "trainingID" ------------- var trainingID TrainingID err = runtime.BindStyledParameterWithOptions("simple", "trainingID", c.Params("trainingID"), &trainingID, runtime.BindStyledParameterOptions{Explode: false, Required: true}) if err != nil { return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter trainingID: %w", err).Error()) } return siw.Handler.GetTraining(c, trainingID) } // UpdateTraining operation middleware func (siw *ServerInterfaceWrapper) UpdateTraining(c *fiber.Ctx) error { var err error // ------------- Path parameter "trainingID" ------------- var trainingID TrainingID err = runtime.BindStyledParameterWithOptions("simple", "trainingID", c.Params("trainingID"), &trainingID, runtime.BindStyledParameterOptions{Explode: false, Required: true}) if err != nil { return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter trainingID: %w", err).Error()) } return siw.Handler.UpdateTraining(c, trainingID) } // 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(m) } router.Get(options.BaseURL+"/v1/trainings", wrapper.ListTrainings) router.Post(options.BaseURL+"/v1/trainings", wrapper.CreateTraining) router.Delete(options.BaseURL+"/v1/trainings/:trainingID", wrapper.DeleteTraining) router.Get(options.BaseURL+"/v1/trainings/:trainingID", wrapper.GetTraining) router.Put(options.BaseURL+"/v1/trainings/:trainingID", wrapper.UpdateTraining) } type InternalErrorApplicationProblemPlusJSONResponse ProblemDetails type InvalidInputErrorApplicationProblemPlusJSONResponse ProblemDetails type NotFoundErrorApplicationProblemPlusJSONResponse ProblemDetails type ListTrainingsRequestObject struct { } type ListTrainingsResponseObject interface { VisitListTrainingsResponse(ctx *fiber.Ctx) error } type ListTrainings200JSONResponse ListTrainingsResponse func (response ListTrainings200JSONResponse) VisitListTrainingsResponse(ctx *fiber.Ctx) error { ctx.Response().Header.Set("Content-Type", "application/json") ctx.Status(200) return ctx.JSON(&response) } type ListTrainings500ApplicationProblemPlusJSONResponse struct { InternalErrorApplicationProblemPlusJSONResponse } func (response ListTrainings500ApplicationProblemPlusJSONResponse) VisitListTrainingsResponse(ctx *fiber.Ctx) error { ctx.Response().Header.Set("Content-Type", "application/problem+json") ctx.Status(500) return ctx.JSON(&response) } type CreateTrainingRequestObject struct { Body *CreateTrainingJSONRequestBody } type CreateTrainingResponseObject interface { VisitCreateTrainingResponse(ctx *fiber.Ctx) error } type CreateTraining201JSONResponse CreateTrainingResponse func (response CreateTraining201JSONResponse) VisitCreateTrainingResponse(ctx *fiber.Ctx) error { ctx.Response().Header.Set("Content-Type", "application/json") ctx.Status(201) return ctx.JSON(&response) } type CreateTraining400ApplicationProblemPlusJSONResponse struct { InvalidInputErrorApplicationProblemPlusJSONResponse } func (response CreateTraining400ApplicationProblemPlusJSONResponse) VisitCreateTrainingResponse(ctx *fiber.Ctx) error { ctx.Response().Header.Set("Content-Type", "application/problem+json") ctx.Status(400) return ctx.JSON(&response) } type CreateTraining500ApplicationProblemPlusJSONResponse struct { InternalErrorApplicationProblemPlusJSONResponse } func (response CreateTraining500ApplicationProblemPlusJSONResponse) VisitCreateTrainingResponse(ctx *fiber.Ctx) error { ctx.Response().Header.Set("Content-Type", "application/problem+json") ctx.Status(500) return ctx.JSON(&response) } type DeleteTrainingRequestObject struct { TrainingID TrainingID `json:"trainingID"` } type DeleteTrainingResponseObject interface { VisitDeleteTrainingResponse(ctx *fiber.Ctx) error } type DeleteTraining204Response struct { } func (response DeleteTraining204Response) VisitDeleteTrainingResponse(ctx *fiber.Ctx) error { ctx.Status(204) return nil } type DeleteTraining404ApplicationProblemPlusJSONResponse struct { NotFoundErrorApplicationProblemPlusJSONResponse } func (response DeleteTraining404ApplicationProblemPlusJSONResponse) VisitDeleteTrainingResponse(ctx *fiber.Ctx) error { ctx.Response().Header.Set("Content-Type", "application/problem+json") ctx.Status(404) return ctx.JSON(&response) } type DeleteTraining500ApplicationProblemPlusJSONResponse struct { InternalErrorApplicationProblemPlusJSONResponse } func (response DeleteTraining500ApplicationProblemPlusJSONResponse) VisitDeleteTrainingResponse(ctx *fiber.Ctx) error { ctx.Response().Header.Set("Content-Type", "application/problem+json") ctx.Status(500) return ctx.JSON(&response) } type GetTrainingRequestObject struct { TrainingID TrainingID `json:"trainingID"` } type GetTrainingResponseObject interface { VisitGetTrainingResponse(ctx *fiber.Ctx) error } type GetTraining200JSONResponse GetTrainingResponse func (response GetTraining200JSONResponse) VisitGetTrainingResponse(ctx *fiber.Ctx) error { ctx.Response().Header.Set("Content-Type", "application/json") ctx.Status(200) return ctx.JSON(&response) } type GetTraining404ApplicationProblemPlusJSONResponse struct { NotFoundErrorApplicationProblemPlusJSONResponse } func (response GetTraining404ApplicationProblemPlusJSONResponse) VisitGetTrainingResponse(ctx *fiber.Ctx) error { ctx.Response().Header.Set("Content-Type", "application/problem+json") ctx.Status(404) return ctx.JSON(&response) } type GetTraining500ApplicationProblemPlusJSONResponse struct { InternalErrorApplicationProblemPlusJSONResponse } func (response GetTraining500ApplicationProblemPlusJSONResponse) VisitGetTrainingResponse(ctx *fiber.Ctx) error { ctx.Response().Header.Set("Content-Type", "application/problem+json") ctx.Status(500) return ctx.JSON(&response) } type UpdateTrainingRequestObject struct { TrainingID TrainingID `json:"trainingID"` Body *UpdateTrainingJSONRequestBody } type UpdateTrainingResponseObject interface { VisitUpdateTrainingResponse(ctx *fiber.Ctx) error } type UpdateTraining200JSONResponse UpdateTrainingResponse func (response UpdateTraining200JSONResponse) VisitUpdateTrainingResponse(ctx *fiber.Ctx) error { ctx.Response().Header.Set("Content-Type", "application/json") ctx.Status(200) return ctx.JSON(&response) } type UpdateTraining400ApplicationProblemPlusJSONResponse struct { InvalidInputErrorApplicationProblemPlusJSONResponse } func (response UpdateTraining400ApplicationProblemPlusJSONResponse) VisitUpdateTrainingResponse(ctx *fiber.Ctx) error { ctx.Response().Header.Set("Content-Type", "application/problem+json") ctx.Status(400) return ctx.JSON(&response) } type UpdateTraining404ApplicationProblemPlusJSONResponse struct { NotFoundErrorApplicationProblemPlusJSONResponse } func (response UpdateTraining404ApplicationProblemPlusJSONResponse) VisitUpdateTrainingResponse(ctx *fiber.Ctx) error { ctx.Response().Header.Set("Content-Type", "application/problem+json") ctx.Status(404) return ctx.JSON(&response) } type UpdateTraining500ApplicationProblemPlusJSONResponse struct { InternalErrorApplicationProblemPlusJSONResponse } func (response UpdateTraining500ApplicationProblemPlusJSONResponse) VisitUpdateTrainingResponse(ctx *fiber.Ctx) error { ctx.Response().Header.Set("Content-Type", "application/problem+json") ctx.Status(500) return ctx.JSON(&response) } // StrictServerInterface represents all server handlers. type StrictServerInterface interface { // List all trainings // (GET /v1/trainings) ListTrainings(ctx context.Context, request ListTrainingsRequestObject) (ListTrainingsResponseObject, error) // Create a new training // (POST /v1/trainings) CreateTraining(ctx context.Context, request CreateTrainingRequestObject) (CreateTrainingResponseObject, error) // Delete a training by ID // (DELETE /v1/trainings/{trainingID}) DeleteTraining(ctx context.Context, request DeleteTrainingRequestObject) (DeleteTrainingResponseObject, error) // Get a training by ID // (GET /v1/trainings/{trainingID}) GetTraining(ctx context.Context, request GetTrainingRequestObject) (GetTrainingResponseObject, error) // Update a training by ID // (PUT /v1/trainings/{trainingID}) UpdateTraining(ctx context.Context, request UpdateTrainingRequestObject) (UpdateTrainingResponseObject, 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 } // ListTrainings operation middleware func (sh *strictHandler) ListTrainings(ctx *fiber.Ctx) error { var request ListTrainingsRequestObject handler := func(ctx *fiber.Ctx, request interface{}) (interface{}, error) { return sh.ssi.ListTrainings(ctx.UserContext(), request.(ListTrainingsRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "ListTrainings") } response, err := handler(ctx, request) if err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } else if validResponse, ok := response.(ListTrainingsResponseObject); ok { if err := validResponse.VisitListTrainingsResponse(ctx); err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } // CreateTraining operation middleware func (sh *strictHandler) CreateTraining(ctx *fiber.Ctx) error { var request CreateTrainingRequestObject var body CreateTrainingJSONRequestBody 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.CreateTraining(ctx.UserContext(), request.(CreateTrainingRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "CreateTraining") } response, err := handler(ctx, request) if err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } else if validResponse, ok := response.(CreateTrainingResponseObject); ok { if err := validResponse.VisitCreateTrainingResponse(ctx); err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } // DeleteTraining operation middleware func (sh *strictHandler) DeleteTraining(ctx *fiber.Ctx, trainingID TrainingID) error { var request DeleteTrainingRequestObject request.TrainingID = trainingID handler := func(ctx *fiber.Ctx, request interface{}) (interface{}, error) { return sh.ssi.DeleteTraining(ctx.UserContext(), request.(DeleteTrainingRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "DeleteTraining") } response, err := handler(ctx, request) if err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } else if validResponse, ok := response.(DeleteTrainingResponseObject); ok { if err := validResponse.VisitDeleteTrainingResponse(ctx); err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } // GetTraining operation middleware func (sh *strictHandler) GetTraining(ctx *fiber.Ctx, trainingID TrainingID) error { var request GetTrainingRequestObject request.TrainingID = trainingID handler := func(ctx *fiber.Ctx, request interface{}) (interface{}, error) { return sh.ssi.GetTraining(ctx.UserContext(), request.(GetTrainingRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "GetTraining") } response, err := handler(ctx, request) if err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } else if validResponse, ok := response.(GetTrainingResponseObject); ok { if err := validResponse.VisitGetTrainingResponse(ctx); err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } // UpdateTraining operation middleware func (sh *strictHandler) UpdateTraining(ctx *fiber.Ctx, trainingID TrainingID) error { var request UpdateTrainingRequestObject request.TrainingID = trainingID var body UpdateTrainingJSONRequestBody 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.UpdateTraining(ctx.UserContext(), request.(UpdateTrainingRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "UpdateTraining") } response, err := handler(ctx, request) if err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } else if validResponse, ok := response.(UpdateTrainingResponseObject); ok { if err := validResponse.VisitUpdateTrainingResponse(ctx); err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ "H4sIAAAAAAAC/9xYwXLbNhD9FQzaW2lRbpJJhqemdZtoJk3cxOnF9QEClyQcEoCBpWyNhl/SU/+l/a8O", "AJEiJdqRG2Xc5GSaBHbfvl087GpFuaq0kiDR0mRFNTOsAgTj/zszTEgh89mJ+y8Fy43QKJSkSfeNzE5o", "RIV7pRkWNKKSVUATipvNETVwVQsDKU3Q1BBRywuomLP6rYGMJvSbeAMkDl9t3PPfNI2zYrWSFjy4mUQw", "kpU/G6OMe8GVRJDoHpnWpeDMQY21UfMSqu8urcO92tP1adh1AshEaYP7IQGtfwIeQBPRmVywUqQzqWt8", "OFQeAxEOxAbaa4W/qFqmDwXrtUKSOQAtpKatAZ/LnwwwhDbdb+GqBuuxaaM0GBQh5Slb+r+ZMhVDmlAh", "8RmNaMVuRFVXNHkS0UrI8HwcUVxqCKsgB8/DANWqXWDRCJm776F2dz40/Qo+D6uiAGdo86JzquaXwNHZ", "3A4u1LBnvizfZDQ5v5vd13DdbqZNtNpxsM2SSO95rlaD4ERKL5qLJqIvAL880K+E7VDbPmyBUNl9fbi0", "rREzY9jSH6FeRF9JZW6d2x2Nf+dpIVgwJJwZI8ASLICkYQNRGWEynGgipHt+eXZ2SlqZnpB3AKRA1DaJ", "45QhQ8P4BzATAZhNlMnjVPG4wKqMTcafPps+JZkypFIGiJCBS6Hk5A9Jo23CPYRdyM9JUVdMHhlgKZuX", "QOBGl0x6O8Rq4CITnKAiWAhLFOe1MSA5uFhcaGsBnNBoNwVCWmSSw5jX929nxEAGwZhnTKQgUWQtaZ3z", "+zm1yLAeyc1ZAYHtsIBwlQLJQYJhCCmZL71lZUQuJLFgFmA8uXvH3atNFFjCHlzbuqqYWW7ZJM7gaGzh", "xX8h8yOmt06F/9qG0VEatUXUy+zYKemf+v+3+A37tU6L6lqkOxxF9OYoV0frl22zNjnrd23diiNRaWXC", "jeyavITmAks2n1TMgC2uJlxVcXEVL/M8NcyKMtYf8hg7DpqIvtfp13vFbwf3ZdyWjde0TLX9IOM+IVB5", "ZaWCVT8s1CUCL3yaXZI37f3v6hL//pMX5Fdm4J+/aERr43a1cn99fT3Z2d1EtBQc1tysLZ0apY0AZGbZ", "Exvq7NqXv5HnpzMa0QUYG+RhOjmeTN1CpUEyLWhCH/lXka9Nz0+8OO6qz7/IwYfmOPRXwSylybBXoFvj", "xffT6R198v364/GmZKRNfk5KYdHrZ4erieiTgGXMRYc5Hs5DvsEOcryOlLCy7JmNKDLHzTndUOA0RCs7", "QtWwh10PdGDxR5UuD0bT+BTQDI+mmx+bnVwdfzYQtyerm4C535K6TD3eL1Pbc+IhchyAE0YkXHd5viXN", "TTQ8IvFqM6034UYuAWG3Dk78+14d9H8wuEXkNksGqnSxk8THd/zKEACtOX78caaGA+8h+A2hE9Zx63os", "f02OH6RRyenNVAcm73BqNTb3jWoV9qalB0rKC8D9M6LrkYwMr+5PT8rhZXG8c9pLFqefDcQeslj7LZ8o", "iw9UVyHcfUvL7/UjVqiZISGvFGclSWEBpdIVSFyPY4OWKYnj0q0rlMXk0XQ69eW0drZt8U1bwZawuapx", "cK2vu6oNvuai+TcAAP//9nxvI+cVAAA=", } // GetSwagger returns the content of the embedded swagger specification file // or error if failed to decode func decodeSpec() ([]byte, error) { zipped, err := base64.StdEncoding.DecodeString(strings.Join(swaggerSpec, "")) if err != nil { return nil, fmt.Errorf("error base64 decoding spec: %w", err) } zr, err := gzip.NewReader(bytes.NewReader(zipped)) if err != nil { return nil, fmt.Errorf("error decompressing spec: %w", err) } var buf bytes.Buffer _, err = buf.ReadFrom(zr) if err != nil { return nil, fmt.Errorf("error decompressing spec: %w", err) } return buf.Bytes(), nil } var rawSpec = decodeSpecCached() // a naive cached of a decoded swagger spec func decodeSpecCached() func() ([]byte, error) { data, err := decodeSpec() return func() ([]byte, error) { return data, err } } // Constructs a synthetic filesystem for resolving external references when loading openapi specifications. func PathToRawSpec(pathToFile string) map[string]func() ([]byte, error) { res := make(map[string]func() ([]byte, error)) if len(pathToFile) > 0 { res[pathToFile] = rawSpec } return res } // GetSwagger returns the Swagger specification corresponding to the generated code // in this file. The external references of Swagger specification are resolved. // The logic of resolving external references is tightly connected to "import-mapping" feature. // Externally referenced files must be embedded in the corresponding golang packages. // Urls can be supported but this task was out of the scope. func GetSwagger() (swagger *openapi3.T, err error) { resolvePath := PathToRawSpec("") loader := openapi3.NewLoader() loader.IsExternalRefsAllowed = true loader.ReadFromURIFunc = func(loader *openapi3.Loader, url *url.URL) ([]byte, error) { pathToFile := url.String() pathToFile = path.Clean(pathToFile) getSpec, ok := resolvePath[pathToFile] if !ok { err1 := fmt.Errorf("path not found: %s", pathToFile) return nil, err1 } return getSpec() } var specData []byte specData, err = rawSpec() if err != nil { return } swagger, err = loader.LoadFromData(specData) if err != nil { return } return }