craban/server/model/config.go

60 lines
986 B
Go

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
}