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 }, } }