2020-10-22 16:54:50 +02:00
|
|
|
package utils
|
|
|
|
|
2021-03-17 15:47:49 +01:00
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"reflect"
|
|
|
|
)
|
2020-10-22 16:54:50 +02:00
|
|
|
|
2022-07-28 12:20:20 +02:00
|
|
|
func Unmarshal(in any, raw []byte, callback func() error) error {
|
2020-10-22 16:54:50 +02:00
|
|
|
if err := json.Unmarshal(raw, &in); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
return callback()
|
|
|
|
}
|
2021-03-17 15:47:49 +01:00
|
|
|
|
2022-07-28 12:20:20 +02: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-17 15:47:49 +01: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
|
|
|
|
}
|
|
|
|
}
|