uuid

Paddy 2014-09-27 Child:a8d80021a45f

0:55c9e35995ab Go to Latest

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.

History
1 package uuid
3 import (
4 "database/sql/driver"
5 "encoding/hex"
6 "encoding/json"
7 "errors"
9 "code.google.com/p/go-uuid/uuid"
10 )
12 var InvalidIDError = errors.New("Invalid ID format.")
14 type ID uuid.UUID
16 func NewID() ID {
17 return ID(uuid.NewRandom())
18 }
20 func (id ID) MarshalJSON() ([]byte, error) {
21 return json.Marshal(id.String())
22 }
24 func (id ID) String() string {
25 return hex.EncodeToString([]byte(id))
26 }
28 func (id ID) Value() (driver.Value, error) {
29 return id.String(), nil
30 }
32 func (id *ID) Scan(src interface{}) error {
33 if src == nil {
34 id = nil
35 return nil
36 }
37 switch src.(type) {
38 case []byte:
39 newID, err := Parse(string(src.([]byte)))
40 *id = append((*id)[:0], newID...)
41 return err
42 case string:
43 newID, err := Parse(src.(string))
44 *id = append((*id)[:0], newID...)
45 return err
46 default:
47 return InvalidIDError
48 }
49 return nil
50 }
52 func (id *ID) UnmarshalJSON(in []byte) error {
53 var tmp string
54 err := json.Unmarshal(in, &tmp)
55 if err != nil {
56 return err
57 }
58 newID, err := Parse(tmp)
59 if err != nil {
60 return err
61 }
62 *id = append((*id)[:0], newID...)
63 return nil
64 }
66 func Parse(in string) (ID, error) {
67 b, err := hex.DecodeString(in)
68 if err != nil {
69 return nil, err
70 }
71 return ID(b), nil
72 }
74 func (id ID) Equal(other ID) bool {
75 return uuid.Equal(uuid.UUID(id), uuid.UUID(other))
76 }