Procházet zdrojové kódy

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 před 3 roky
rodič
revize
2b63ddc6b8
5 změnil soubory, kde provedl 52 přidání a 16 odebrání
  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"`
 }
 
-func (a *appservice) setDefaults() error {
+func (a *appservice) validate() error {
 	if a.ID == "" {
 		a.ID = "discord"
 	}
 
-	if err := a.Bot.setDefaults(); err != nil {
+	if err := a.Bot.validate(); err != nil {
 		return err
 	}
 
@@ -35,5 +35,5 @@ func (a *appservice) UnmarshalYAML(unmarshal func(interface{}) error) error {
 
 	*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"`
 }
 
-func (b *bot) setDefaults() error {
+func (b *bot) validate() error {
 	if b.Username == "" {
 		b.Username = "discordbot"
 	}
@@ -29,5 +29,5 @@ func (b *bot) UnmarshalYAML(unmarshal func(interface{}) error) error {
 
 	*b = bot(raw)
 
-	return b.setDefaults()
+	return b.validate()
 }

+ 2 - 6
config/bridge.go

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

+ 11 - 5
config/config.go

@@ -12,12 +12,16 @@ type Config struct {
 	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
 	}
 
-	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
 	}
 
@@ -32,7 +36,7 @@ func (cfg *Config) UnmarshalYAML(unmarshal func(interface{}) error) error {
 		return err
 	}
 
-	return cfg.setDefaults()
+	return cfg.validate()
 }
 
 func FromBytes(data []byte) (*Config, error) {
@@ -42,7 +46,9 @@ func FromBytes(data []byte) (*Config, error) {
 		return nil, err
 	}
 
-	cfg.setDefaults()
+	if err := cfg.validate(); err != nil {
+		return nil, err
+	}
 
 	return &cfg, nil
 }

+ 34 - 0
config/homeserver.go

@@ -1,7 +1,41 @@
 package config
 
+import (
+	"errors"
+)
+
+var (
+	ErrHomeserverNoAddress = errors.New("no homeserver address specified")
+	ErrHomeserverNoDomain  = errors.New("no homeserver domain specified")
+)
+
 type homeserver struct {
 	Address        string `yaml:"address"`
 	Domain         string `yaml:"domain"`
 	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()
+}