56 lines
1.4 KiB
Go
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()...)
|
|
}
|