...
1 package zeronull
2
3 import (
4 "database/sql/driver"
5
6 "github.com/jackc/pgx/v5/pgtype"
7 )
8
9 type UUID [16]byte
10
11 func (UUID) SkipUnderlyingTypePlan() {}
12
13
14 func (u *UUID) ScanUUID(v pgtype.UUID) error {
15 if !v.Valid {
16 *u = UUID{}
17 return nil
18 }
19
20 *u = UUID(v.Bytes)
21
22 return nil
23 }
24
25 func (u UUID) UUIDValue() (pgtype.UUID, error) {
26 if u == (UUID{}) {
27 return pgtype.UUID{}, nil
28 }
29 return pgtype.UUID{Bytes: u, Valid: true}, nil
30 }
31
32
33 func (u *UUID) Scan(src any) error {
34 if src == nil {
35 *u = UUID{}
36 return nil
37 }
38
39 var nullable pgtype.UUID
40 err := nullable.Scan(src)
41 if err != nil {
42 return err
43 }
44
45 *u = UUID(nullable.Bytes)
46
47 return nil
48 }
49
50
51 func (u UUID) Value() (driver.Value, error) {
52 if u == (UUID{}) {
53 return nil, nil
54 }
55
56 buf, err := pgtype.UUIDCodec{}.PlanEncode(nil, pgtype.UUIDOID, pgtype.TextFormatCode, u).Encode(u, nil)
57 if err != nil {
58 return nil, err
59 }
60
61 return string(buf), nil
62 }
63
View as plain text