func updateConfiguration()

in internal/cfgfile/cfg.go [112:133]


func updateConfiguration(old Configuration, k, v string) (*Configuration, error) {
	b, err := json.Marshal(old)
	if err != nil {
		return nil, fmt.Errorf("marshalling the old configuration: %v", err)
	}
	var vjson interface{}
	if err := json.Unmarshal([]byte(v), &vjson); err != nil {
		return nil, fmt.Errorf("unmarshalling the value: %v", err)
	}
	if !gjson.Get(string(b), k).Exists() {
		return nil, fmt.Errorf("invalid key %q", k)
	}
	updated, err := sjson.Set(string(b), k, vjson)
	if err != nil {
		return nil, fmt.Errorf("setting the value: %v", err)
	}
	var cfg Configuration
	if err := json.Unmarshal([]byte(updated), &cfg); err != nil {
		return nil, fmt.Errorf("unmarshalling the new configuration: %v", err)
	}
	return &cfg, nil
}