mirror of
https://github.com/eolinker/apinto
synced 2025-09-26 21:01:19 +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
|
||
}
|