-
Notifications
You must be signed in to change notification settings - Fork 0
/
options.go
54 lines (45 loc) · 1.32 KB
/
options.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package handler
import "strings"
type Options struct {
BucketName string
IncomingPrefix string
EmailDomainName string
SenderAddress string
ForwardingAddress string
ConfigurationSet string
}
type UndefinedEnvVarsError struct {
UndefinedVars []string
}
func (e *UndefinedEnvVarsError) Error() string {
return "undefined environment variables: " +
strings.Join(e.UndefinedVars, ", ")
}
func GetOptions(getenv func(string) string) (*Options, error) {
env := environment{getenv: getenv}
return env.options()
}
type environment struct {
getenv func(string) string
undefinedVars []string
}
func (env *environment) options() (*Options, error) {
opts := Options{}
env.assign(&opts.BucketName, "BUCKET_NAME")
env.assign(&opts.IncomingPrefix, "INCOMING_PREFIX")
env.assign(&opts.EmailDomainName, "EMAIL_DOMAIN_NAME")
env.assign(&opts.SenderAddress, "SENDER_ADDRESS")
env.assign(&opts.ForwardingAddress, "FORWARDING_ADDRESS")
env.assign(&opts.ConfigurationSet, "CONFIGURATION_SET")
if len(env.undefinedVars) != 0 {
return nil, &UndefinedEnvVarsError{UndefinedVars: env.undefinedVars}
}
return &opts, nil
}
func (env *environment) assign(opt *string, varname string) {
if value := env.getenv(varname); value == "" {
env.undefinedVars = append(env.undefinedVars, varname)
} else {
*opt = value
}
}