package config import ( "fmt" "os" "gopkg.in/yaml.v3" ) type StringOrSlice []string func (s *StringOrSlice) UnmarshalYAML(value *yaml.Node) error { switch value.Kind { // "preset: *" case yaml.ScalarNode: *s = []string{value.Value} return nil // "preset: [a, b]" case yaml.SequenceNode: var out []string for _, v := range value.Content { out = append(out, v.Value) } *s = out return nil default: return fmt.Errorf("invalid preset format") } } type Config struct { Config struct { PathMode string `yaml:"path_mode"` } `yaml:"config"` Prompts struct { Preset string `yaml:"preset"` } `yaml:"prompts"` Preset map[string]StringOrSlice `yaml:"preset"` } func Load() (*Config, error) { data, err := os.ReadFile(".cliprepo.yaml") if err != nil { return nil, err } var cfg Config err = yaml.Unmarshal(data, &cfg) if err != nil { return nil, err } // DEFAULT PROMPT TEMPLATE if cfg.Prompts.Preset == "" { cfg.Prompts.Preset = "The following code is from file {{path}}:\n---\n{{content}}" } return &cfg, nil }