Select Git revision
config.go 1.26 KiB
//
// config.go
// Copyright (C) 2017 kevin <kevin@phrye.com>
//
// Distributed under terms of the GPL license.
//
package config
import (
"github.com/spf13/pflag"
"github.com/spf13/viper"
)
// Config for storing configuration.
type Config struct {
ListenAddress string `mapstructure:"listen_address"`
Device string `mapstructure:"device"`
Model string `mapstructure:"model"`
TemplateDir string `mapstructure:"template_dir"`
StaticDir string `mapstructure:"static_dir"`
SleepCycle int64 `mapstructure:"sleep_cycle"`
}
func setDefaults() {
viper.BindPFlag("listen_address", pflag.Lookup("listen-address"))
viper.BindPFlag("device", pflag.Lookup("device"))
viper.BindPFlag("model", pflag.Lookup("model"))
viper.BindPFlag("template_dir", pflag.Lookup("template-dir"))
viper.BindPFlag("static_dir", pflag.Lookup("static-dir"))
viper.BindPFlag("sleep_cycle", pflag.Lookup("sleep-cycle"))
}
// ReadConfig reads the client configuration from a file into a Config struct.
func ReadConfig(cfg string) (*Config, error) {
setDefaults()
viper.SetConfigFile(cfg)
viper.SetConfigType("hcl")
if err := viper.ReadInConfig(); err != nil {
return nil, err
}
c := &Config{}
if err := viper.Unmarshal(c); err != nil {
return nil, err
}
return c, nil
}