mirror of
https://codeberg.org/superseriousbusiness/gotosocial.git
synced 2024-12-21 08:31:53 +03:00
36 lines
619 B
Go
36 lines
619 B
Go
|
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:
|
||
|
buf = append(buf, "null"...)
|
||
|
default:
|
||
|
panic(AssertErr())
|
||
|
}
|
||
|
|
||
|
return json.Unmarshal(buf, j.Value)
|
||
|
}
|