mirror of
https://github.com/eolinker/apinto
synced 2026-04-23 00:17:04 +08:00
58 lines
1020 B
Go
58 lines
1020 B
Go
package plugin
|
|
|
|
import (
|
|
"github.com/eolinker/eosc/eocontext"
|
|
"reflect"
|
|
)
|
|
|
|
// Config 普通插件配置,在router、service、upstream的插件格式
|
|
type Config struct {
|
|
Disable bool `json:"disable"`
|
|
Config interface{} `json:"config"`
|
|
}
|
|
|
|
type IPluginManager interface {
|
|
CreateRequest(id string, conf map[string]*Config) eocontext.IChainPro
|
|
Global() eocontext.IChainPro
|
|
GetConfigType(name string) (reflect.Type, bool)
|
|
}
|
|
|
|
func MergeConfig(high, low map[string]*Config) map[string]*Config {
|
|
if high == nil && low == nil {
|
|
return make(map[string]*Config)
|
|
}
|
|
if high == nil {
|
|
return clone(low)
|
|
}
|
|
if low == nil {
|
|
return clone(high)
|
|
}
|
|
|
|
mv := clone(low)
|
|
|
|
for k, hv := range high {
|
|
lv, has := mv[k]
|
|
if has {
|
|
*lv = *hv
|
|
} else {
|
|
c := new(Config)
|
|
*c = *hv
|
|
mv[k] = c
|
|
}
|
|
}
|
|
return mv
|
|
|
|
}
|
|
func clone(v map[string]*Config) map[string]*Config {
|
|
cv := make(map[string]*Config)
|
|
if v == nil {
|
|
return cv
|
|
}
|
|
for k, v := range v {
|
|
c := new(Config)
|
|
*c = *v
|
|
cv[k] = c
|
|
}
|
|
return cv
|
|
}
|