提交 9f4ce0e8 authored 作者: mooncake9527's avatar mooncake9527

集成枚举

上级 6847a260
package enums
import (
"fmt"
"reflect"
"github.com/gin-gonic/gin"
"gitlab.wanzhuangkj.com/tush/xpkg/gin/response"
)
type EnumDictionary map[string]any
var dict = &EnumDictionary{}
func GetDict() *EnumDictionary {
return dict
}
func (d EnumDictionary) Add(key string, value any) {
if _, ok := d[key]; ok {
panic(fmt.Sprintf("枚举字典[%s]重复", key))
}
d[key] = value
}
func HandleDict(c *gin.Context) {
response.Success(c, dict)
}
func HandleDictOptions(c *gin.Context) {
ret, _ := convertMap(dict)
response.Success(c, ret)
}
type BaseReply struct {
Code int `json:"code" form:"code" example:"1"`
Msg string `json:"message" form:"message" example:"OK"`
Data interface{} `json:"data"`
TimeStamp int64 `json:"timestamp" form:"data" example:"1718850053"`
TraceID string `json:"traceID" form:"traceID" example:"7f0000016673920576f0659c620086b0"`
}
type LabelValue struct {
Label string `json:"label"`
Value any `json:"value"`
}
func convertMap(input *EnumDictionary) (map[string][]LabelValue, error) {
result := make(map[string][]LabelValue)
for outerKey, innerValue := range *input {
innerValueRef := reflect.ValueOf(innerValue)
if innerValueRef.Kind() != reflect.Map {
return nil, fmt.Errorf("value for key '%s' is not a map", outerKey)
}
var items []LabelValue
for _, key := range innerValueRef.MapKeys() {
value := innerValueRef.MapIndex(key)
if value.Kind() != reflect.String {
continue
}
var keyValue any
switch key.Kind() {
case reflect.String, reflect.Int, reflect.Float64, reflect.Bool:
keyValue = key.Interface()
default:
keyValue = fmt.Sprintf("%v", key.Interface())
}
items = append(items, LabelValue{
Label: value.String(),
Value: keyValue,
})
}
result[outerKey] = items
}
return result, nil
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论