uuid

Paddy 2015-07-14 Parent:f095a179ce00 Child:cda03b52c8c9

3:1961288312a6 Go to Latest

uuid/uuid.go

When given empty input, return an empty uuid. If we're given empty input while creating a UUID, we should return an empty UUID.

History
paddy@0 1 package uuid
paddy@0 2
paddy@0 3 import (
paddy@0 4 "database/sql/driver"
paddy@0 5 "encoding/json"
paddy@1 6 "encoding/xml"
paddy@0 7 "errors"
paddy@0 8
paddy@0 9 "code.google.com/p/go-uuid/uuid"
paddy@0 10 )
paddy@0 11
paddy@0 12 var InvalidIDError = errors.New("Invalid ID format.")
paddy@0 13
paddy@0 14 type ID uuid.UUID
paddy@0 15
paddy@0 16 func NewID() ID {
paddy@0 17 return ID(uuid.NewRandom())
paddy@0 18 }
paddy@0 19
paddy@2 20 func (id ID) String() string {
paddy@2 21 return uuid.UUID(id).String()
paddy@2 22 }
paddy@2 23
paddy@0 24 func (id ID) MarshalJSON() ([]byte, error) {
paddy@0 25 return json.Marshal(id.String())
paddy@0 26 }
paddy@0 27
paddy@1 28 func (id ID) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
paddy@1 29 return e.EncodeElement(id.String(), start)
paddy@1 30 }
paddy@1 31
paddy@0 32 func (id ID) Value() (driver.Value, error) {
paddy@0 33 return id.String(), nil
paddy@0 34 }
paddy@0 35
paddy@0 36 func (id *ID) Scan(src interface{}) error {
paddy@0 37 if src == nil {
paddy@0 38 id = nil
paddy@0 39 return nil
paddy@0 40 }
paddy@0 41 switch src.(type) {
paddy@0 42 case []byte:
paddy@3 43 if len(src.([]byte)) == 0 {
paddy@3 44 *id = (*id)[:0]
paddy@3 45 return nil
paddy@3 46 }
paddy@0 47 newID, err := Parse(string(src.([]byte)))
paddy@2 48 if err != nil {
paddy@2 49 return err
paddy@2 50 }
paddy@0 51 *id = append((*id)[:0], newID...)
paddy@2 52 return nil
paddy@0 53 case string:
paddy@3 54 if len(src.(string)) == 0 {
paddy@3 55 *id = (*id)[:0]
paddy@3 56 return nil
paddy@3 57 }
paddy@0 58 newID, err := Parse(src.(string))
paddy@2 59 if err != nil {
paddy@2 60 return err
paddy@2 61 }
paddy@0 62 *id = append((*id)[:0], newID...)
paddy@2 63 return nil
paddy@0 64 default:
paddy@0 65 return InvalidIDError
paddy@0 66 }
paddy@0 67 return nil
paddy@0 68 }
paddy@0 69
paddy@0 70 func (id *ID) UnmarshalJSON(in []byte) error {
paddy@0 71 var tmp string
paddy@0 72 err := json.Unmarshal(in, &tmp)
paddy@0 73 if err != nil {
paddy@0 74 return err
paddy@0 75 }
paddy@0 76 newID, err := Parse(tmp)
paddy@0 77 if err != nil {
paddy@0 78 return err
paddy@0 79 }
paddy@0 80 *id = append((*id)[:0], newID...)
paddy@0 81 return nil
paddy@0 82 }
paddy@0 83
paddy@1 84 func (id *ID) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
paddy@1 85 var tmp string
paddy@1 86 err := d.DecodeElement(&tmp, &start)
paddy@1 87 if err != nil {
paddy@1 88 return err
paddy@1 89 }
paddy@1 90 newID, err := Parse(tmp)
paddy@1 91 if err != nil {
paddy@1 92 return err
paddy@1 93 }
paddy@1 94 *id = append((*id)[:0], newID...)
paddy@1 95 return nil
paddy@1 96 }
paddy@1 97
paddy@0 98 func Parse(in string) (ID, error) {
paddy@2 99 id := ID(uuid.Parse(in))
paddy@2 100 if id == nil {
paddy@2 101 return id, InvalidIDError
paddy@0 102 }
paddy@2 103 return id, nil
paddy@0 104 }
paddy@0 105
paddy@0 106 func (id ID) Equal(other ID) bool {
paddy@0 107 return uuid.Equal(uuid.UUID(id), uuid.UUID(other))
paddy@0 108 }