Просмотр исходного кода

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 3 лет назад
Родитель
Сommit
2b63ddc6b8
5 измененных файлов с 52 добавлено и 16 удалено
  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()
+}