package uuid
import (
)
var jsonNull = []byte("null")
type NullUUID struct {
UUID UUID
Valid bool
}
func ( *NullUUID) ( interface{}) error {
if == nil {
.UUID, .Valid = Nil, false
return nil
}
:= .UUID.Scan()
if != nil {
.Valid = false
return
}
.Valid = true
return nil
}
func ( NullUUID) () (driver.Value, error) {
if !.Valid {
return nil, nil
}
return .UUID.Value()
}
func ( NullUUID) () ([]byte, error) {
if .Valid {
return .UUID[:], nil
}
return []byte(nil), nil
}
func ( *NullUUID) ( []byte) error {
if len() != 16 {
return fmt.Errorf("invalid UUID (got %d bytes)", len())
}
copy(.UUID[:], )
.Valid = true
return nil
}
func ( NullUUID) () ([]byte, error) {
if .Valid {
return .UUID.MarshalText()
}
return jsonNull, nil
}
func ( *NullUUID) ( []byte) error {
, := ParseBytes()
if != nil {
.Valid = false
return
}
.UUID =
.Valid = true
return nil
}
func ( NullUUID) () ([]byte, error) {
if .Valid {
return json.Marshal(.UUID)
}
return jsonNull, nil
}
func ( *NullUUID) ( []byte) error {
if bytes.Equal(, jsonNull) {
* = NullUUID{}
return nil
}
:= json.Unmarshal(, &.UUID)
.Valid = == nil
return
}