1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- package config
- import (
- "io/ioutil"
- "gopkg.in/yaml.v2"
- )
- type Config struct {
- Homeserver homeserver `yaml:"homeserver"`
- Appservice appservice `yaml:"appservice"`
- Bridge bridge `yaml:"bridge"`
- Logging logging `yaml:"logging"`
- }
- func (cfg *Config) validate() error {
- if err := cfg.Homeserver.validate(); err != nil {
- return err
- }
- if err := cfg.Appservice.validate(); err != nil {
- return err
- }
- if err := cfg.Bridge.validate(); err != nil {
- return err
- }
- if err := cfg.Logging.validate(); err != nil {
- return err
- }
- return nil
- }
- func (cfg *Config) UnmarshalYAML(unmarshal func(interface{}) error) error {
- type rawConfig Config
- raw := rawConfig{}
- if err := unmarshal(&raw); err != nil {
- return err
- }
- *cfg = Config(raw)
- return cfg.validate()
- }
- func FromBytes(data []byte) (*Config, error) {
- cfg := Config{}
- if err := yaml.Unmarshal(data, &cfg); err != nil {
- return nil, err
- }
- if err := cfg.validate(); err != nil {
- return nil, err
- }
- return &cfg, nil
- }
- func FromString(str string) (*Config, error) {
- return FromBytes([]byte(str))
- }
- func FromFile(filename string) (*Config, error) {
- data, err := ioutil.ReadFile(filename)
- if err != nil {
- return nil, err
- }
- return FromBytes(data)
- }
- func (cfg *Config) Save(filename string) error {
- data, err := yaml.Marshal(cfg)
- if err != nil {
- return err
- }
- return ioutil.WriteFile(filename, data, 0600)
- }
|