Skip to content
Snippets Groups Projects
Select Git revision
1 result Searching

main.go

Blame
  • 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
    }