Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: 解决插件配置项反序列化类型出错问题 (fix #1142) #1150

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 60 additions & 31 deletions dice/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,57 +86,86 @@ func (i *ConfigItem) UnmarshalJSON(data []byte) error {
return fmt.Errorf("ConfigItem: unmarshal 'key' failed as %w", err)
}
if err := json.Unmarshal(raw["type"], &i.Type); err != nil {
return fmt.Errorf("ConfigItem: unmarshal 'type' failed as %w", err)
return fmt.Errorf("ConfigItem (%s): unmarshal 'type' failed as %w", i.Key, err)
}
if err := json.Unmarshal(raw["description"], &i.Description); err != nil {
return fmt.Errorf("ConfigItem: unmarshal 'description' failed as %w", err)
return fmt.Errorf("ConfigItem (%s): unmarshal 'description' failed as %w", i.Key, err)
}
if v, ok := raw["deprecated"]; ok {
if err := json.Unmarshal(v, &i.Deprecated); err != nil {
return fmt.Errorf("ConfigItem: unmarshal 'deprecated' failed as %w", err)
return fmt.Errorf("ConfigItem (%s): unmarshal 'deprecated' failed as %w", i.Key, err)
}
}

switch i.Type {
case "string", "task:cron", "task:daily":
i.DefaultValue = ""
i.Value = ""
var stringVal string
if err := json.Unmarshal(raw["defaultValue"], &stringVal); err != nil {
return fmt.Errorf("ConfigItem (%s-%s): unmarshal 'defaultValue' failed as %w", i.Key, i.Type, err)
}
i.DefaultValue = stringVal
if err := json.Unmarshal(raw["value"], &stringVal); err != nil {
return fmt.Errorf("ConfigItem (%s-%s): unmarshal 'value' failed as %w", i.Key, i.Type, err)
}
i.Value = stringVal
case "bool":
i.DefaultValue = false
i.Value = false
var boolVal bool
if err := json.Unmarshal(raw["defaultValue"], &boolVal); err != nil {
return fmt.Errorf("ConfigItem (%s-%s): unmarshal 'defaultValue' failed as %w", i.Key, i.Type, err)
}
i.DefaultValue = boolVal
if err := json.Unmarshal(raw["value"], &boolVal); err != nil {
return fmt.Errorf("ConfigItem (%s-%s): unmarshal 'value' failed as %w", i.Key, i.Type, err)
}
i.Value = boolVal
case "float":
i.DefaultValue = float64(0.0)
i.Value = float64(0.0)
var floatVal float64
if err := json.Unmarshal(raw["defaultValue"], &floatVal); err != nil {
return fmt.Errorf("ConfigItem (%s-%s): unmarshal 'defaultValue' failed as %w", i.Key, i.Type, err)
}
i.DefaultValue = floatVal
if err := json.Unmarshal(raw["value"], &floatVal); err != nil {
return fmt.Errorf("ConfigItem (%s-%s): unmarshal 'value' failed as %w", i.Key, i.Type, err)
}
i.Value = floatVal
case "int":
i.DefaultValue = int64(0)
if _, ok := raw["value"]; ok {
i.Value = int64(0)
var intVal int64
if err := json.Unmarshal(raw["defaultValue"], &intVal); err != nil {
return fmt.Errorf("ConfigItem (%s-%s): unmarshal 'defaultValue' failed as %w", i.Key, i.Type, err)
}
i.DefaultValue = intVal
if err := json.Unmarshal(raw["value"], &intVal); err != nil {
return fmt.Errorf("ConfigItem (%s-%s): unmarshal 'value' failed as %w", i.Key, i.Type, err)
}
i.Value = intVal
case "template":
i.DefaultValue = []string(nil)
if _, ok := raw["value"]; ok {
i.Value = []string(nil)
var templateVal []string
if err := json.Unmarshal(raw["defaultValue"], &templateVal); err != nil {
return fmt.Errorf("ConfigItem (%s-%s): unmarshal 'defaultValue' failed as %w", i.Key, i.Type, err)
}
i.DefaultValue = templateVal
if err := json.Unmarshal(raw["value"], &templateVal); err != nil {
return fmt.Errorf("ConfigItem (%s-%s): unmarshal 'value' failed as %w", i.Key, i.Type, err)
}
i.Value = templateVal
case "option":
i.DefaultValue = ""
i.Value = ""
i.Option = []string(nil)
if err := json.Unmarshal(raw["option"], &i.Option); err != nil {
return fmt.Errorf("ConfigItem: unmarshal 'option' failed as %w", err)
var stringVal string
var optionVal []string
if err := json.Unmarshal(raw["defaultValue"], &stringVal); err != nil {
return fmt.Errorf("ConfigItem (%s-%s): unmarshal 'defaultValue' failed as %w", i.Key, i.Type, err)
}
default:
return errors.New("unsupported type " + i.Type)
}

if err := json.Unmarshal(raw["defaultValue"], &i.DefaultValue); err != nil {
return fmt.Errorf("ConfigItem: unmarshal 'defaultValue' failed as %w", err)
}
if v, ok := raw["value"]; ok {
if err := json.Unmarshal(v, &i.Value); err != nil {
return fmt.Errorf("ConfigItem: unmarshal 'value' failed as %w", err)
i.DefaultValue = stringVal
if err := json.Unmarshal(raw["value"], &stringVal); err != nil {
return fmt.Errorf("ConfigItem (%s-%s): unmarshal 'value' failed as %w", i.Key, i.Type, err)
}
i.Value = stringVal
if err := json.Unmarshal(raw["option"], &optionVal); err != nil {
return fmt.Errorf("ConfigItem (%s-%s): unmarshal 'option' failed as %w", i.Key, i.Type, err)
}
i.Option = optionVal
default:
return errors.New("ConfigItem.UnmarshalJSON: unsupported type " + i.Type)
}

return nil
}

Expand Down