// // rhctl // // Copyright (C) 2009-2016 Christian Pointner // // This file is part of rhctl. // // rhctl is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // any later version. // // rhctl is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with rhctl. If not, see . // package main import ( "os" "strings" "time" "github.com/naoina/toml" ) type Config struct { Audioswitch struct { Device string `toml:"dev"` Baudrate Baudrate `toml:"baud"` Timeout Duration `toml:"timeout"` Unit SwitchUnitID `toml:"unit"` Ports []struct { Name string `toml:"name"` Number uint `toml:"number"` } } Servers map[string]struct { ControlDevice string `toml:"ctrl_dev"` ControlBaudrate Baudrate `toml:"ctrl_baud"` HeartbeatDevice string `toml:"heartbeat_dev"` HeartbeatBaudrate Baudrate `toml:"heartbeat_baud"` HeartbeatTimeout Duration `toml:"heartbeat_timeout"` HeartbeatThreshold uint `toml:"heartbeat_threshold"` } Clients struct { Web struct { Address string `toml:"addr"` } Telnet struct { Address string `toml:"addr"` } } } type Duration struct { time.Duration } func (d *Duration) UnmarshalTOML(data []byte) (err error) { ds := strings.Trim(string(data), "\"") d.Duration, err = time.ParseDuration(ds) return } func ReadConfig(configfile string) (conf *Config, err error) { conf = &Config{} var f *os.File if f, err = os.Open(configfile); err != nil { return } defer f.Close() decoder := toml.NewDecoder(f) if err = decoder.Decode(conf); err != nil { return } return }