Sfoglia il codice sorgente

Rename the config structs setDefaults to validate

This allows us to check for some required values and give an easy to respond
to error at startup rather than a lot of validation during run time.
Gary Kramlich 4 anni fa
parent
commit
2b63ddc6b8
5 ha cambiato i file con 52 aggiunte e 16 eliminazioni
  1. 3 3
      config/appservice.go
  2. 2 2
      config/bot.go
  3. 2 6
      config/bridge.go
  4. 11 5
      config/config.go
  5. 34 0
      config/homeserver.go

+ 3 - 3
config/appservice.go

@@ -13,12 +13,12 @@ type appservice struct {
 	HSToken string `yaml:"hs_token"`
 	HSToken string `yaml:"hs_token"`
 }
 }
 
 
-func (a *appservice) setDefaults() error {
+func (a *appservice) validate() error {
 	if a.ID == "" {
 	if a.ID == "" {
 		a.ID = "discord"
 		a.ID = "discord"
 	}
 	}
 
 
-	if err := a.Bot.setDefaults(); err != nil {
+	if err := a.Bot.validate(); err != nil {
 		return err
 		return err
 	}
 	}
 
 
@@ -35,5 +35,5 @@ func (a *appservice) UnmarshalYAML(unmarshal func(interface{}) error) error {
 
 
 	*a = appservice(raw)
 	*a = appservice(raw)
 
 
-	return a.setDefaults()
+	return a.validate()
 }
 }

+ 2 - 2
config/bot.go

@@ -6,7 +6,7 @@ type bot struct {
 	Avatar      string `yaml:"avatar"`
 	Avatar      string `yaml:"avatar"`
 }
 }
 
 
-func (b *bot) setDefaults() error {
+func (b *bot) validate() error {
 	if b.Username == "" {
 	if b.Username == "" {
 		b.Username = "discordbot"
 		b.Username = "discordbot"
 	}
 	}
@@ -29,5 +29,5 @@ func (b *bot) UnmarshalYAML(unmarshal func(interface{}) error) error {
 
 
 	*b = bot(raw)
 	*b = bot(raw)
 
 
-	return b.setDefaults()
+	return b.validate()
 }
 }

+ 2 - 6
config/bridge.go

@@ -1,8 +1,6 @@
 package config
 package config
 
 
 import (
 import (
-	"fmt"
-
 	"bytes"
 	"bytes"
 	"text/template"
 	"text/template"
 )
 )
@@ -13,7 +11,7 @@ type bridge struct {
 	usernameTemplate *template.Template `yaml:"-"`
 	usernameTemplate *template.Template `yaml:"-"`
 }
 }
 
 
-func (b *bridge) setDefaults() error {
+func (b *bridge) validate() error {
 	var err error
 	var err error
 
 
 	if b.UsernameTemplate == "" {
 	if b.UsernameTemplate == "" {
@@ -40,14 +38,12 @@ func (b *bridge) UnmarshalYAML(unmarshal func(interface{}) error) error {
 
 
 	*b = bridge(raw)
 	*b = bridge(raw)
 
 
-	return b.setDefaults()
+	return b.validate()
 }
 }
 
 
 func (b bridge) FormatUsername(userid string) string {
 func (b bridge) FormatUsername(userid string) string {
 	var buffer bytes.Buffer
 	var buffer bytes.Buffer
 
 
-	fmt.Printf("bridge: %#v\n", b)
-
 	b.usernameTemplate.Execute(&buffer, userid)
 	b.usernameTemplate.Execute(&buffer, userid)
 
 
 	return buffer.String()
 	return buffer.String()

+ 11 - 5
config/config.go

@@ -12,12 +12,16 @@ type Config struct {
 	Bridge     bridge     `yaml:"bridge"`
 	Bridge     bridge     `yaml:"bridge"`
 }
 }
 
 
-func (cfg *Config) setDefaults() error {
-	if err := cfg.Appservice.setDefaults(); err != nil {
+func (cfg *Config) validate() error {
+	if err := cfg.Homeserver.validate(); err != nil {
 		return err
 		return err
 	}
 	}
 
 
-	if err := cfg.Bridge.setDefaults(); err != nil {
+	if err := cfg.Appservice.validate(); err != nil {
+		return err
+	}
+
+	if err := cfg.Bridge.validate(); err != nil {
 		return err
 		return err
 	}
 	}
 
 
@@ -32,7 +36,7 @@ func (cfg *Config) UnmarshalYAML(unmarshal func(interface{}) error) error {
 		return err
 		return err
 	}
 	}
 
 
-	return cfg.setDefaults()
+	return cfg.validate()
 }
 }
 
 
 func FromBytes(data []byte) (*Config, error) {
 func FromBytes(data []byte) (*Config, error) {
@@ -42,7 +46,9 @@ func FromBytes(data []byte) (*Config, error) {
 		return nil, err
 		return nil, err
 	}
 	}
 
 
-	cfg.setDefaults()
+	if err := cfg.validate(); err != nil {
+		return nil, err
+	}
 
 
 	return &cfg, nil
 	return &cfg, nil
 }
 }

+ 34 - 0
config/homeserver.go

@@ -1,7 +1,41 @@
 package config
 package config
 
 
+import (
+	"errors"
+)
+
+var (
+	ErrHomeserverNoAddress = errors.New("no homeserver address specified")
+	ErrHomeserverNoDomain  = errors.New("no homeserver domain specified")
+)
+
 type homeserver struct {
 type homeserver struct {
 	Address        string `yaml:"address"`
 	Address        string `yaml:"address"`
 	Domain         string `yaml:"domain"`
 	Domain         string `yaml:"domain"`
 	StatusEndpoint string `yaml:"status_endpoint"`
 	StatusEndpoint string `yaml:"status_endpoint"`
 }
 }
+
+func (h *homeserver) validate() error {
+	if h.Address == "" {
+		return ErrHomeserverNoAddress
+	}
+
+	if h.Domain == "" {
+		return ErrHomeserverNoDomain
+	}
+
+	return nil
+}
+
+func (h *homeserver) UnmarshalYAML(unmarshal func(interface{}) error) error {
+	type rawHomeserver homeserver
+
+	raw := rawHomeserver{}
+	if err := unmarshal(&raw); err != nil {
+		return err
+	}
+
+	*h = homeserver(raw)
+
+	return h.validate()
+}