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