package model import ( "fmt" "io/ioutil" "gopkg.in/yaml.v2" ) const ( DefaultPort = 8080 ) type Config struct { DatabasePath *string `yaml:"database_path"` Port *int `yaml:"port"` Secret *string `yaml:"secret"` } func (c *Config) SetDefaults() { if c.Port == nil { c.Port = NewInt(DefaultPort) } if c.Secret == nil { c.Secret = NewString(NewUUID()) } } func (c *Config) IsValid() error { if c.DatabasePath == nil || *c.DatabasePath == "" { return fmt.Errorf("database_path cannot be empty") } if c.Port == nil || *c.Port == 0 { return fmt.Errorf("port cannot be empty") } if c.Secret == nil || *c.Secret == "" { return fmt.Errorf("secret cannot be empty") } return nil } func ReadConfig(path string) (*Config, error) { b, err := ioutil.ReadFile(path) if err != nil { return nil, err } var config Config if err := yaml.Unmarshal(b, &config); err != nil { return nil, err } config.SetDefaults() return &config, nil }