package application import ( "fmt" "time" "github.com/BurntSushi/toml" "github.com/c2h5oh/datasize" ) func (qc QuotaConfig) ParsedSizeBytes() int64 { var v datasize.ByteSize err := v.UnmarshalText([]byte(qc.DefaultSize)) if err != nil { panic(err) } return int64(v) } func (qc QuotaConfig) ParsedDuration() time.Duration { fmt.Sprintf("duration str: %s", qc.DefaultDuration) d, err := time.ParseDuration(qc.DefaultDuration) if err != nil { panic(err) } if d < time.Second { panic("choose a longer default") } return d } type QuotaConfig struct { DefaultSize string `toml:"default_size"` DefaultDuration string `toml:"default_duration"` } type ServerConfig struct { Port int64 Host string } type FileConfig struct { Path string } type DatabaseConfig struct { Backend string Connection string } type Configuration struct { Server ServerConfig File FileConfig Database DatabaseConfig Quota QuotaConfig } func (c *Configuration) bindAddress() string { return fmt.Sprintf("%s:%d", c.Server.Host, c.Server.Port) } func ConfigFromToml(toml_data string) (*Configuration, error) { var config Configuration _, err := toml.Decode(toml_data, &config) if err != nil { return nil, err } return &config, nil }