config.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package config
  2. import (
  3. "io/ioutil"
  4. "gopkg.in/yaml.v2"
  5. )
  6. type Config struct {
  7. Homeserver homeserver `yaml:"homeserver"`
  8. Appservice appservice `yaml:"appservice"`
  9. Bridge bridge `yaml:"bridge"`
  10. }
  11. func (cfg *Config) setDefaults() error {
  12. if err := cfg.Appservice.setDefaults(); err != nil {
  13. return err
  14. }
  15. if err := cfg.Bridge.setDefaults(); err != nil {
  16. return err
  17. }
  18. return nil
  19. }
  20. func (cfg *Config) UnmarshalYAML(unmarshal func(interface{}) error) error {
  21. type rawConfig Config
  22. raw := rawConfig{}
  23. if err := unmarshal(&raw); err != nil {
  24. return err
  25. }
  26. return cfg.setDefaults()
  27. }
  28. func FromBytes(data []byte) (*Config, error) {
  29. cfg := Config{}
  30. if err := yaml.Unmarshal(data, &cfg); err != nil {
  31. return nil, err
  32. }
  33. cfg.setDefaults()
  34. return &cfg, nil
  35. }
  36. func FromString(str string) (*Config, error) {
  37. return FromBytes([]byte(str))
  38. }
  39. func FromFile(filename string) (*Config, error) {
  40. data, err := ioutil.ReadFile(filename)
  41. if err != nil {
  42. return nil, err
  43. }
  44. return FromBytes(data)
  45. }
  46. func (cfg *Config) Save(filename string) error {
  47. data, err := yaml.Marshal(cfg)
  48. if err != nil {
  49. return err
  50. }
  51. return ioutil.WriteFile(filename, data, 0600)
  52. }