File size: 573 Bytes
fea99b3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | package entutils
import (
"database/sql/driver"
"encoding/json"
"entgo.io/ent/dialect/sql"
"entgo.io/ent/schema/field"
)
func JSONStringValueScanner[T any]() field.ValueScannerFunc[T, *sql.NullString] {
return field.ValueScannerFunc[T, *sql.NullString]{
V: func(t T) (driver.Value, error) {
return json.Marshal(t)
},
S: func(ns *sql.NullString) (T, error) {
v := new(T)
if ns == nil || !ns.Valid {
return *v, nil
}
b := []byte(ns.String)
if err := json.Unmarshal(b, v); err != nil {
return *v, err
}
return *v, nil
},
}
}
|