Files

64 lines
1.0 KiB
Go

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
}