94 lines
2.5 KiB
Go
94 lines
2.5 KiB
Go
// Package router ...
|
|
//
|
|
// Description : router ...
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 2025-02-18 17:26
|
|
package router
|
|
|
|
import (
|
|
"git.zhangdeman.cn/zhangdeman/gin/middleware"
|
|
"git.zhangdeman.cn/zhangdeman/rate_limit/abstract"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type SetServerOptionFunc func(so *serverOption)
|
|
|
|
// serverOption 获取server实例的选项
|
|
type serverOption struct {
|
|
docConfig DocConfig // 文档配置
|
|
globalMiddlewareList []gin.HandlerFunc // 全局中间件列表
|
|
enablePprof bool // 启用 pprof
|
|
enableCors bool // 启动跨域支持
|
|
disableInitRequest bool // 禁用初始化请求
|
|
loggerCfg *middleware.AccessConfig // 日志配置
|
|
initContextData gin.HandlerFunc // 初始化一些请求数据
|
|
rateLimitInstance abstract.IRateLimit // 服务流控实例
|
|
}
|
|
|
|
// WithRateLimitInstance 设置流控实例, 配置为 nil, 代表禁用
|
|
func WithRateLimitInstance(i abstract.IRateLimit) SetServerOptionFunc {
|
|
return func(so *serverOption) {
|
|
so.rateLimitInstance = i
|
|
}
|
|
}
|
|
|
|
// WithDisableInitRequest 禁用自从初始化请求
|
|
func WithDisableInitRequest(disable bool) SetServerOptionFunc {
|
|
return func(so *serverOption) {
|
|
so.disableInitRequest = disable
|
|
}
|
|
}
|
|
|
|
// WithInitContextData 初始化一些请求数据
|
|
func WithInitContextData(formatFunc func(ctx *gin.Context)) SetServerOptionFunc {
|
|
return func(so *serverOption) {
|
|
if nil == formatFunc {
|
|
formatFunc = func(ctx *gin.Context) {}
|
|
}
|
|
|
|
so.initContextData = formatFunc
|
|
}
|
|
}
|
|
|
|
// WithDocConfig 设置文档配置
|
|
func WithDocConfig(docConfig *DocConfig) SetServerOptionFunc {
|
|
return func(so *serverOption) {
|
|
if nil == docConfig {
|
|
return
|
|
}
|
|
so.docConfig = *docConfig
|
|
}
|
|
}
|
|
|
|
// WithGlobalMiddlewareList 设置全局中间件
|
|
func WithGlobalMiddlewareList(middlewareList ...gin.HandlerFunc) SetServerOptionFunc {
|
|
return func(so *serverOption) {
|
|
so.globalMiddlewareList = middlewareList
|
|
}
|
|
}
|
|
|
|
// WithPprofEnable 启用pprof
|
|
func WithPprofEnable() SetServerOptionFunc {
|
|
return func(so *serverOption) {
|
|
so.enablePprof = true
|
|
}
|
|
}
|
|
|
|
// WithEnableCors 启用全局跨域
|
|
func WithEnableCors() SetServerOptionFunc {
|
|
return func(so *serverOption) {
|
|
so.enableCors = true
|
|
}
|
|
}
|
|
|
|
// WithLoggerCfg ...
|
|
func WithLoggerCfg(loggerCfg *middleware.AccessConfig) SetServerOptionFunc {
|
|
return func(so *serverOption) {
|
|
if nil != loggerCfg || nil != loggerCfg.Logger {
|
|
so.loggerCfg = loggerCfg
|
|
}
|
|
}
|
|
}
|