From bf152adbefb25a7d9718c1d0210b83dd65a9d63e Mon Sep 17 00:00:00 2001 From: James Hillyerd Date: Wed, 4 Apr 2018 21:40:53 -0700 Subject: [PATCH] Use enum for MailboxNaming for #33 --- pkg/config/config.go | 30 +++++++++++++++++++++++++++--- pkg/policy/address.go | 2 +- pkg/policy/address_test.go | 8 ++++---- 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/pkg/config/config.go b/pkg/config/config.go index e1501d8..ecd5971 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -1,6 +1,7 @@ package config import ( + "fmt" "log" "os" "strings" @@ -29,10 +30,33 @@ var ( BuildDate = "" ) -// Root wraps all other configurations. +// mbNaming represents a mailbox naming strategy. +type mbNaming int + +// Mailbox naming strategies. +const ( + UnknownNaming mbNaming = iota + LocalNaming + FullNaming +) + +// Decode a naming strategy from string. +func (n *mbNaming) Decode(v string) error { + switch strings.ToLower(v) { + case "local": + *n = LocalNaming + case "full": + *n = FullNaming + default: + return fmt.Errorf("Unknown MailboxNaming strategy: %q", v) + } + return nil +} + +// Root contains global configuration, and structs with for specific sub-systems. type Root struct { - LogLevel string `required:"true" default:"info" desc:"debug, info, warn, or error"` - MailboxNaming string `required:"true" default:"local" desc:"local or full"` + LogLevel string `required:"true" default:"info" desc:"debug, info, warn, or error"` + MailboxNaming mbNaming `required:"true" default:"local" desc:"local or full"` SMTP SMTP POP3 POP3 Web Web diff --git a/pkg/policy/address.go b/pkg/policy/address.go index ce06d09..de9e8a7 100644 --- a/pkg/policy/address.go +++ b/pkg/policy/address.go @@ -25,7 +25,7 @@ func (a *Addressing) ExtractMailbox(address string) (string, error) { if err != nil { return "", err } - if a.Config.MailboxNaming == "local" { + if a.Config.MailboxNaming == config.LocalNaming { return local, nil } if domain == "" { diff --git a/pkg/policy/address_test.go b/pkg/policy/address_test.go index 82d417d..2956dd3 100644 --- a/pkg/policy/address_test.go +++ b/pkg/policy/address_test.go @@ -123,8 +123,8 @@ func TestShouldStoreDomain(t *testing.T) { } func TestExtractMailboxValid(t *testing.T) { - localPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: "local"}} - fullPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: "full"}} + localPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: config.LocalNaming}} + fullPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: config.FullNaming}} testTable := []struct { input string // Input to test @@ -251,8 +251,8 @@ func TestExtractMailboxValid(t *testing.T) { } func TestExtractMailboxInvalid(t *testing.T) { - localPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: "local"}} - fullPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: "full"}} + localPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: config.LocalNaming}} + fullPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: config.FullNaming}} // Test local mailbox naming policy. localInvalidTable := []struct { input, msg string