Files
atom/providers/swagger/docs.go
2023-06-09 14:32:21 +08:00

56 lines
1.4 KiB
Go

package swagger
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/rogeecn/atom/container"
"github.com/rogeecn/atom/providers/http"
"github.com/rogeecn/atom/utils/opt"
swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
"github.com/swaggo/swag"
)
type Swagger struct {
}
func Provide(opts ...opt.Option) error {
o := opt.New(opts...)
var config Config
if err := o.UnmarshalConfig(&config); err != nil {
return err
}
return container.Container.Provide(func(http http.Service) *Swagger {
if config.BaseRoute == "" {
config.BaseRoute = "swagger"
}
swaggerInfo := &swag.Spec{
Version: config.Version,
Host: config.Host,
BasePath: config.BasePath,
Schemes: []string{},
Title: config.Title,
Description: config.Description,
InfoInstanceName: "swagger",
SwaggerTemplate: docTemplate,
LeftDelim: "{{",
RightDelim: "}}",
}
swag.Register(swaggerInfo.InstanceName(), swaggerInfo)
engine := http.GetEngine().(*gin.Engine)
var handler gin.HandlerFunc
if config.HandlerConfig != nil {
handler = ginSwagger.CustomWrapHandler(config.HandlerConfig, swaggerFiles.Handler)
} else {
handler = ginSwagger.WrapHandler(swaggerFiles.Handler)
}
engine.GET(fmt.Sprintf("/%s/*any", config.BaseRoute), handler)
return &Swagger{}
}, o.DiOptions()...)
}