// vim: shiftwidth=4 tabstop=4 noexpandtab package main import ( "log" "io/ioutil" "os" "flag" "encoding/json" ) type RuntimeConfig struct { Flag FlagConfig Web WebConfig `json:"webserver"` } func GetRuntimeConfig() RuntimeConfig { retval := RuntimeConfig{} // read CLI parameters retval.Flag.read() // open the config file configFile, err := os.Open(retval.Flag.ConfigPath) defer configFile.Close() if err != nil { log.Fatalf("Could not open configuration file %s", retval.Flag.ConfigPath) } // read byte content byteData, err := ioutil.ReadAll(configFile) if err != nil { log.Fatalf("Could not read configuration file %s", retval.Flag.ConfigPath) } // parse content to config structs err = json.Unmarshal(byteData, &retval) if err != nil { log.Fatalf("Could not parse configuration file %s", retval.Flag.ConfigPath) } return retval } type FlagConfig struct { ConfigPath string Debug bool } func (flagConfig *FlagConfig) read() { flag.StringVar(&(flagConfig.ConfigPath), "c", "/etc/birdscan/config.json", "Path to birdscan configuration file") flag.BoolVar(&(flagConfig.Debug), "d", false, "A debug flag to be used by source repository Makefile") flag.Parse() }