2024-05-27 16:46:15 +01:00
|
|
|
package util
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"strconv"
|
|
|
|
"time"
|
|
|
|
"unsafe"
|
|
|
|
)
|
|
|
|
|
|
|
|
type JSON struct{ Value any }
|
|
|
|
|
|
|
|
func (j JSON) Scan(value any) error {
|
|
|
|
var buf []byte
|
|
|
|
|
|
|
|
switch v := value.(type) {
|
|
|
|
case []byte:
|
|
|
|
buf = v
|
|
|
|
case string:
|
|
|
|
buf = unsafe.Slice(unsafe.StringData(v), len(v))
|
|
|
|
case int64:
|
|
|
|
buf = strconv.AppendInt(nil, v, 10)
|
|
|
|
case float64:
|
|
|
|
buf = strconv.AppendFloat(nil, v, 'g', -1, 64)
|
|
|
|
case time.Time:
|
|
|
|
buf = append(buf, '"')
|
|
|
|
buf = v.AppendFormat(buf, time.RFC3339Nano)
|
|
|
|
buf = append(buf, '"')
|
|
|
|
case nil:
|
2024-06-12 13:21:34 +01:00
|
|
|
buf = []byte("null")
|
2024-05-27 16:46:15 +01:00
|
|
|
default:
|
|
|
|
panic(AssertErr())
|
|
|
|
}
|
|
|
|
|
|
|
|
return json.Unmarshal(buf, j.Value)
|
|
|
|
}
|