add swagger
This commit is contained in:
55
providers/swagger/docs.go
Normal file
55
providers/swagger/docs.go
Normal file
@@ -0,0 +1,55 @@
|
||||
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()...)
|
||||
}
|
||||
Reference in New Issue
Block a user