|
5 | 5 | "strings"
|
6 | 6 | "time"
|
7 | 7 |
|
8 |
| - "github.com/mitchellh/mapstructure" |
9 | 8 | "github.com/pkg/errors"
|
10 | 9 | "github.com/rs/zerolog"
|
11 | 10 | "github.com/rs/zerolog/log"
|
@@ -90,38 +89,38 @@ type ServerConfig struct {
|
90 | 89 | Identifier string `mapstructure:"identifier"`
|
91 | 90 | }
|
92 | 91 |
|
| 92 | +func viperParser(in reflect.Type, out reflect.Type, value interface{}) (interface{}, error) { |
| 93 | + if in.String() == "string" && out.String() == "zerolog.Level" { |
| 94 | + input := value.(string) |
| 95 | + return zerolog.ParseLevel(input) |
| 96 | + } |
| 97 | + |
| 98 | + if in.String() == "string" && out.String() == "pkg.CommitState" { |
| 99 | + input := value.(string) |
| 100 | + return pkg.ParseCommitState(input) |
| 101 | + } |
| 102 | + |
| 103 | + if in.String() == "string" && out.String() == "time.Duration" { |
| 104 | + input := value.(string) |
| 105 | + return time.ParseDuration(input) |
| 106 | + } |
| 107 | + |
| 108 | + if in.String() == "string" && out.String() == "[]string" { |
| 109 | + input := value.(string) |
| 110 | + ns := strings.Split(input, ",") |
| 111 | + return ns, nil |
| 112 | + } |
| 113 | + |
| 114 | + return value, nil |
| 115 | +} |
| 116 | + |
93 | 117 | func New() (ServerConfig, error) {
|
94 | 118 | return NewWithViper(viper.GetViper())
|
95 | 119 | }
|
96 | 120 |
|
97 | 121 | func NewWithViper(v *viper.Viper) (ServerConfig, error) {
|
98 | 122 | var cfg ServerConfig
|
99 |
| - if err := v.Unmarshal(&cfg, func(config *mapstructure.DecoderConfig) { |
100 |
| - config.DecodeHook = func(in reflect.Type, out reflect.Type, value interface{}) (interface{}, error) { |
101 |
| - if in.String() == "string" && out.String() == "zerolog.Level" { |
102 |
| - input := value.(string) |
103 |
| - return zerolog.ParseLevel(input) |
104 |
| - } |
105 |
| - |
106 |
| - if in.String() == "string" && out.String() == "pkg.CommitState" { |
107 |
| - input := value.(string) |
108 |
| - return pkg.ParseCommitState(input) |
109 |
| - } |
110 |
| - |
111 |
| - if in.String() == "string" && out.String() == "time.Duration" { |
112 |
| - input := value.(string) |
113 |
| - return time.ParseDuration(input) |
114 |
| - } |
115 |
| - |
116 |
| - if in.String() == "string" && out.String() == "[]string" { |
117 |
| - input := value.(string) |
118 |
| - ns := strings.Split(input, ",") |
119 |
| - return ns, nil |
120 |
| - } |
121 |
| - |
122 |
| - return value, nil |
123 |
| - } |
124 |
| - }); err != nil { |
| 123 | + if err := v.Unmarshal(&cfg, viper.DecodeHook(viperParser)); err != nil { |
125 | 124 | return cfg, errors.Wrap(err, "failed to read configuration")
|
126 | 125 | }
|
127 | 126 |
|
|
0 commit comments