neko/server/pkg/utils/deocde.go

36 lines
766 B
Go
Raw Normal View History

package utils
2021-03-18 03:47:49 +13:00
import (
"encoding/json"
"reflect"
2024-06-17 02:26:42 +12:00
"github.com/mitchellh/mapstructure"
2021-03-18 03:47:49 +13:00
)
2024-06-17 02:26:42 +12:00
func Decode(input interface{}, output interface{}) error {
return mapstructure.Decode(input, output)
}
func Unmarshal(in any, raw []byte, callback func() error) error {
if err := json.Unmarshal(raw, &in); err != nil {
return err
}
return callback()
}
2021-03-18 03:47:49 +13:00
func JsonStringAutoDecode(m any) func(rf reflect.Kind, rt reflect.Kind, data any) (any, error) {
return func(rf reflect.Kind, rt reflect.Kind, data any) (any, error) {
2021-03-18 03:47:49 +13:00
if rf != reflect.String || rt == reflect.String {
return data, nil
}
raw := data.(string)
if raw != "" && (raw[0:1] == "{" || raw[0:1] == "[") {
err := json.Unmarshal([]byte(raw), &m)
return m, err
}
return data, nil
}
}