63 lines
869 B
Go
63 lines
869 B
Go
package config
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
//go:generate stringer -type Env
|
|
|
|
type Env uint8
|
|
|
|
const (
|
|
Dev Env = iota + 1
|
|
Prod
|
|
Qa
|
|
Test
|
|
)
|
|
|
|
var Envs = [...]Env{
|
|
Dev,
|
|
Prod,
|
|
Qa,
|
|
Test,
|
|
}
|
|
|
|
func (e Env) MarshalText() ([]byte, error) {
|
|
return []byte(e.String()), nil
|
|
}
|
|
|
|
var ErrEnvUnmarshal = errors.New("unable to unmarshal value")
|
|
|
|
func (e *Env) UnmarshalText(text []byte) error {
|
|
if e == nil {
|
|
return fmt.Errorf("%w: nil pointer", ErrEnvUnmarshal)
|
|
}
|
|
|
|
val := strings.ToUpper(string(text))
|
|
|
|
for _, ee := range Envs {
|
|
if val == strings.ToUpper(ee.String()) {
|
|
*e = ee
|
|
return nil
|
|
}
|
|
}
|
|
return fmt.Errorf("%w: invalid value: %s", ErrEnvUnmarshal, text)
|
|
}
|
|
|
|
func ValidEnvOrDev(e Env) Env {
|
|
if ValidEnv(e) {
|
|
return e
|
|
}
|
|
return Dev
|
|
}
|
|
|
|
func ValidEnv(env Env) bool {
|
|
for _, e := range Envs {
|
|
if env == e {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|