Source File
uuid.go
Belonging Package
github.com/jackc/pgtype
package pgtype
import (
)
type UUID struct {
Bytes [16]byte
Status Status
}
func ( *UUID) ( interface{}) error {
if == nil {
* = UUID{Status: Null}
return nil
}
if , := .(interface{ () interface{} }); {
:= .()
if != {
return .()
}
}
switch value := .(type) {
case [16]byte:
* = UUID{Bytes: , Status: Present}
case []byte:
if != nil {
if len() != 16 {
return fmt.Errorf("[]byte must be 16 bytes to convert to UUID: %d", len())
}
* = UUID{Status: Present}
copy(.Bytes[:], )
} else {
* = UUID{Status: Null}
}
case string:
, := parseUUID()
if != nil {
return
}
* = UUID{Bytes: , Status: Present}
case *string:
if == nil {
* = UUID{Status: Null}
} else {
return .(*)
}
default:
if , := underlyingUUIDType(); {
return .()
}
return fmt.Errorf("cannot convert %v to UUID", )
}
return nil
}
func ( UUID) () interface{} {
switch .Status {
case Present:
return .Bytes
case Null:
return nil
default:
return .Status
}
}
func ( *UUID) ( interface{}) error {
switch .Status {
case Present:
switch v := .(type) {
case *[16]byte:
* = .Bytes
return nil
case *[]byte:
* = make([]byte, 16)
copy(*, .Bytes[:])
return nil
case *string:
* = encodeUUID(.Bytes)
return nil
default:
if , := GetAssignToDstType(); {
return .()
}
}
case Null:
return NullAssignTo()
}
return fmt.Errorf("cannot assign %v into %T", , )
}
func ( [16]byte) string {
return fmt.Sprintf("%x-%x-%x-%x-%x", [0:4], [4:6], [6:8], [8:10], [10:16])
}
func ( *UUID) ( *ConnInfo, []byte) error {
if == nil {
* = UUID{Status: Null}
return nil
}
if len() != 36 {
return fmt.Errorf("invalid length for UUID: %v", len())
}
, := parseUUID(string())
if != nil {
return
}
* = UUID{Bytes: , Status: Present}
return nil
}
func ( *UUID) ( *ConnInfo, []byte) error {
if == nil {
* = UUID{Status: Null}
return nil
}
if len() != 16 {
return fmt.Errorf("invalid length for UUID: %v", len())
}
* = UUID{Status: Present}
copy(.Bytes[:], )
return nil
}
func ( UUID) ( *ConnInfo, []byte) ([]byte, error) {
switch .Status {
case Null:
return nil, nil
case Undefined:
return nil, errUndefined
}
return append(, encodeUUID(.Bytes)...), nil
}
func ( UUID) ( *ConnInfo, []byte) ([]byte, error) {
switch .Status {
case Null:
return nil, nil
case Undefined:
return nil, errUndefined
}
return append(, .Bytes[:]...), nil
}
func ( UUID) () (driver.Value, error) {
return EncodeValueText()
}
func ( UUID) () ([]byte, error) {
switch .Status {
case Present:
var bytes.Buffer
.WriteByte('"')
.WriteString(encodeUUID(.Bytes))
.WriteByte('"')
return .Bytes(), nil
case Null:
return []byte("null"), nil
case Undefined:
return nil, errUndefined
}
return nil, errBadStatus
}
func ( *UUID) ( []byte) error {
if bytes.Compare(, []byte("null")) == 0 {
return .Set(nil)
}
if len() != 38 {
return fmt.Errorf("invalid length for UUID: %v", len())
}
return .Set(string([1 : len()-1]))
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |