1
0
mirror of https://github.com/jhillyerd/inbucket.git synced 2025-12-17 09:37:02 +00:00

Use enum for MailboxNaming for #33

This commit is contained in:
James Hillyerd
2018-04-04 21:40:53 -07:00
parent ff2121fbb9
commit bf152adbef
3 changed files with 32 additions and 8 deletions

View File

@@ -1,6 +1,7 @@
package config package config
import ( import (
"fmt"
"log" "log"
"os" "os"
"strings" "strings"
@@ -29,10 +30,33 @@ var (
BuildDate = "" 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 { type Root struct {
LogLevel string `required:"true" default:"info" desc:"debug, info, warn, or error"` LogLevel string `required:"true" default:"info" desc:"debug, info, warn, or error"`
MailboxNaming string `required:"true" default:"local" desc:"local or full"` MailboxNaming mbNaming `required:"true" default:"local" desc:"local or full"`
SMTP SMTP SMTP SMTP
POP3 POP3 POP3 POP3
Web Web Web Web

View File

@@ -25,7 +25,7 @@ func (a *Addressing) ExtractMailbox(address string) (string, error) {
if err != nil { if err != nil {
return "", err return "", err
} }
if a.Config.MailboxNaming == "local" { if a.Config.MailboxNaming == config.LocalNaming {
return local, nil return local, nil
} }
if domain == "" { if domain == "" {

View File

@@ -123,8 +123,8 @@ func TestShouldStoreDomain(t *testing.T) {
} }
func TestExtractMailboxValid(t *testing.T) { func TestExtractMailboxValid(t *testing.T) {
localPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: "local"}} localPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: config.LocalNaming}}
fullPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: "full"}} fullPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: config.FullNaming}}
testTable := []struct { testTable := []struct {
input string // Input to test input string // Input to test
@@ -251,8 +251,8 @@ func TestExtractMailboxValid(t *testing.T) {
} }
func TestExtractMailboxInvalid(t *testing.T) { func TestExtractMailboxInvalid(t *testing.T) {
localPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: "local"}} localPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: config.LocalNaming}}
fullPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: "full"}} fullPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: config.FullNaming}}
// Test local mailbox naming policy. // Test local mailbox naming policy.
localInvalidTable := []struct { localInvalidTable := []struct {
input, msg string input, msg string