in internal/pkg/plugin/registry.go [100:126]
func Initializing(plugin Plugin, cfg Config) {
v := viper.New()
v.SetConfigType("yaml")
if plugin.DefaultConfig() != "" {
if err := v.ReadConfig(strings.NewReader(plugin.DefaultConfig())); err != nil {
panic(fmt.Errorf("cannot read default config in the plugin: %s, the error is %v", plugin.Name(), err))
}
}
if err := v.MergeConfigMap(cfg); err != nil {
panic(fmt.Errorf("%s plugin cannot merge the custom configuration, the error is %v", plugin.Name(), err))
}
if err := v.Unmarshal(plugin); err != nil {
panic(fmt.Errorf("cannot inject the config to the %s plugin, the error is %v", plugin.Name(), err))
}
cf := reflect.ValueOf(plugin).Elem().FieldByName(config.CommonFieldsName)
if !cf.IsValid() {
panic(fmt.Errorf("%s plugin must have a field named CommonField", plugin.Name()))
}
for i := 0; i < cf.NumField(); i++ {
tagVal := cf.Type().Field(i).Tag.Get(config.TagName)
if tagVal != "" {
if val := cfg[strings.ToLower(config.CommonFieldsName)+"_"+tagVal]; val != nil {
cf.Field(i).Set(reflect.ValueOf(val))
}
}
}
}