package enums import "encoding/json" type Enum interface { Valid() bool ValuesAny() []any ValuesMeta() []EnumMetaValue VarName() string TypeName() string PackageName() string } type StringEnum interface { Enum String() string } type DescriptionEnum interface { Enum Description() string DescriptionMeta() EnumDescriptionMetaValue } type EnumMetaValue struct { VarName string `json:"varName"` Value Enum `json:"value"` Description *string `json:"description"` } type EnumDescriptionMetaValue struct { VarName string `json:"varName"` Value Enum `json:"value"` Description string `json:"description"` } type EnumMetaDataValue struct { VarName string `json:"varName"` Value Enum `json:"value"` Description *string `json:"description"` Data map[string]any `json:"-"` //handled by MarshalJSON } func (v EnumMetaDataValue) MarshalJSON() ([]byte, error) { m := make(map[string]any, 8) for k, dv := range v.Data { m[k] = dv } m["varName"] = v.VarName m["value"] = v.Value m["description"] = v.Description return json.Marshal(m) }