23 lines
414 B
Go
23 lines
414 B
Go
package enum
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
func MarshalEnum[T fmt.Stringer](val T) ([]byte, error) {
|
|
return json.Marshal(val.String())
|
|
}
|
|
|
|
func UnmarshalEnum[T fmt.Stringer](b []byte, enumValues []T) (T, error) {
|
|
var zero T
|
|
s := strings.Trim(string(b), `"`)
|
|
for _, val := range enumValues {
|
|
if val.String() == s {
|
|
return val, nil
|
|
}
|
|
}
|
|
return zero, fmt.Errorf("invalid value: %s", s)
|
|
}
|