Skip to content

Commit

Permalink
marshal: set the zero value when unmarshaling UUIDs
Browse files Browse the repository at this point in the history
  • Loading branch information
tux21b committed Jan 12, 2014
1 parent f240f99 commit 8962604
Showing 1 changed file with 15 additions and 22 deletions.
37 changes: 15 additions & 22 deletions marshal.go
Original file line number Diff line number Diff line change
Expand Up @@ -922,39 +922,32 @@ func marshalUUID(info *TypeInfo, value interface{}) ([]byte, error) {

func unmarshalUUID(info *TypeInfo, data []byte, value interface{}) error {
if data == nil {
return nil
switch v := value.(type) {
case *string:
*v = ""
case *[]byte:
*v = nil
case *UUID:
*v = UUID{}
default:
return unmarshalErrorf("can not unmarshal X %s into %T", info, value)
}
}
u, err := UUIDFromBytes(data)
if err != nil {
return unmarshalErrorf("Unable to parse UUID: %s", err)
}

switch v := value.(type) {
case *string:
u, err := UUIDFromBytes(data)
if err != nil {
return unmarshalErrorf("Unable to parse UUID: %s", err)
}

*v = u.String()
return nil
case *[]byte:
u, err := UUIDFromBytes(data)
if err != nil {
return unmarshalErrorf("Unable to parse UUID: %s", err)
}

b := [16]byte(u)

*v = b[:]
*v = u[:]
return nil
case *UUID:
u, err := UUIDFromBytes(data)
if err != nil {
return unmarshalErrorf("Unable to parse UUID: %s", err)
}

*v = u

return nil
}

return unmarshalErrorf("can not unmarshal X %s into %T", info, value)
}

Expand Down

0 comments on commit 8962604

Please sign in to comment.