64 lines
1.0 KiB
Go
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
|
|
} |