package config import ( "fmt" "os" "path/filepath" "github.com/pelletier/go-toml/v2" ) type ( Pins map[Thing]GPIO SerialTargets map[Serial]string ) type Config struct { Pins Pins `toml:"pins"` SerialTargets SerialTargets `toml:"serial_targets"` } func (p Pins) MarshalTOML() ([]byte, error) { var rendered string for thing, pin := range p { rendered += fmt.Sprintf("%s = %d\n", thing.String(), pin) } return []byte(rendered), nil } func ReadConfig(path string) (*Config, error) { var config = &Config{} b, e := os.ReadFile(path) if e != nil { return nil, e } err := toml.Unmarshal(b, config) return config, err } func (c *Config) WriteConfig(path string) error { b, e := toml.Marshal(c) if e != nil { return e } if e = os.MkdirAll(filepath.Dir(path), 0755); e != nil { return e } return os.WriteFile(path, b, 0755) }