v0.0.235 added .Enum(..) to exerr
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/rs/zerolog/log"
|
||||
"gogs.mikescher.com/BlackForestBytes/goext/enums"
|
||||
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||
"strings"
|
||||
)
|
||||
@@ -131,3 +132,58 @@ func deserializeAnyWrap(v string) AnyWrap {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type EnumWrap struct {
|
||||
Type string
|
||||
ValueString string
|
||||
ValueRaw enums.Enum // `ValueRaw` is lost during serialization roundtrip
|
||||
IsNil bool
|
||||
}
|
||||
|
||||
func newEnumWrap(val enums.Enum) EnumWrap {
|
||||
t := fmt.Sprintf("%T", val)
|
||||
arr := strings.Split(t, ".")
|
||||
if len(arr) > 0 {
|
||||
t = arr[len(arr)-1]
|
||||
}
|
||||
|
||||
if langext.IsNil(val) {
|
||||
return EnumWrap{Type: t, ValueString: "", ValueRaw: val, IsNil: true}
|
||||
}
|
||||
|
||||
if enumstr, ok := val.(enums.StringEnum); ok {
|
||||
return EnumWrap{Type: t, ValueString: enumstr.String(), ValueRaw: val, IsNil: false}
|
||||
}
|
||||
|
||||
return EnumWrap{Type: t, ValueString: fmt.Sprintf("%v", val), ValueRaw: val, IsNil: false}
|
||||
}
|
||||
|
||||
func (w EnumWrap) Serialize() string {
|
||||
if w.IsNil {
|
||||
return "!nil" + ":" + w.Type
|
||||
}
|
||||
return w.Type + ":" + w.ValueString
|
||||
}
|
||||
|
||||
func (w EnumWrap) String() string {
|
||||
if w.IsNil {
|
||||
return w.Type + "<<nil>>"
|
||||
}
|
||||
return "[" + w.Type + "] " + w.ValueString
|
||||
}
|
||||
|
||||
func deserializeEnumWrap(v string) EnumWrap {
|
||||
r := strings.SplitN(v, ":", 2)
|
||||
|
||||
if len(r) == 2 && r[0] == "!nil" {
|
||||
return EnumWrap{Type: r[1], ValueString: v, ValueRaw: nil, IsNil: true}
|
||||
}
|
||||
|
||||
if len(r) == 0 {
|
||||
return EnumWrap{}
|
||||
} else if len(r) == 1 {
|
||||
return EnumWrap{Type: "", ValueString: v, ValueRaw: nil, IsNil: false}
|
||||
} else {
|
||||
return EnumWrap{Type: r[0], ValueString: r[1], ValueRaw: nil, IsNil: false}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user