github.com/jackc/pgx/v5@v5.5.5/pgtype/zeronull/uuid.go (about) 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 // ScanUUID implements the UUIDScanner interface. 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 // Scan implements the database/sql Scanner interface. 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 // Value implements the database/sql/driver Valuer interface. 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 }