uuid
2014-09-27
Child:a8d80021a45f
uuid/uuid.go
Create uuid package. The uuid package is just a small wrapper around code.google.com/p/go-uuid, to enable some helpers around marshalling/unmarshalling and encoding/decoding the UUID type.
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/uuid.go Sat Sep 27 20:53:17 2014 -0400 1.3 @@ -0,0 +1,76 @@ 1.4 +package uuid 1.5 + 1.6 +import ( 1.7 + "database/sql/driver" 1.8 + "encoding/hex" 1.9 + "encoding/json" 1.10 + "errors" 1.11 + 1.12 + "code.google.com/p/go-uuid/uuid" 1.13 +) 1.14 + 1.15 +var InvalidIDError = errors.New("Invalid ID format.") 1.16 + 1.17 +type ID uuid.UUID 1.18 + 1.19 +func NewID() ID { 1.20 + return ID(uuid.NewRandom()) 1.21 +} 1.22 + 1.23 +func (id ID) MarshalJSON() ([]byte, error) { 1.24 + return json.Marshal(id.String()) 1.25 +} 1.26 + 1.27 +func (id ID) String() string { 1.28 + return hex.EncodeToString([]byte(id)) 1.29 +} 1.30 + 1.31 +func (id ID) Value() (driver.Value, error) { 1.32 + return id.String(), nil 1.33 +} 1.34 + 1.35 +func (id *ID) Scan(src interface{}) error { 1.36 + if src == nil { 1.37 + id = nil 1.38 + return nil 1.39 + } 1.40 + switch src.(type) { 1.41 + case []byte: 1.42 + newID, err := Parse(string(src.([]byte))) 1.43 + *id = append((*id)[:0], newID...) 1.44 + return err 1.45 + case string: 1.46 + newID, err := Parse(src.(string)) 1.47 + *id = append((*id)[:0], newID...) 1.48 + return err 1.49 + default: 1.50 + return InvalidIDError 1.51 + } 1.52 + return nil 1.53 +} 1.54 + 1.55 +func (id *ID) UnmarshalJSON(in []byte) error { 1.56 + var tmp string 1.57 + err := json.Unmarshal(in, &tmp) 1.58 + if err != nil { 1.59 + return err 1.60 + } 1.61 + newID, err := Parse(tmp) 1.62 + if err != nil { 1.63 + return err 1.64 + } 1.65 + *id = append((*id)[:0], newID...) 1.66 + return nil 1.67 +} 1.68 + 1.69 +func Parse(in string) (ID, error) { 1.70 + b, err := hex.DecodeString(in) 1.71 + if err != nil { 1.72 + return nil, err 1.73 + } 1.74 + return ID(b), nil 1.75 +} 1.76 + 1.77 +func (id ID) Equal(other ID) bool { 1.78 + return uuid.Equal(uuid.UUID(id), uuid.UUID(other)) 1.79 +}