Pārlūkot izejas kodu

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 gadi atpakaļ
vecāks
revīzija
2b63ddc6b8
5 mainītis faili ar 52 papildinājumiem un 16 dzēšanām
  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()
+}