OSDN Git Service

Hulk did something
[bytom/vapor.git] / vendor / github.com / pborman / uuid / marshal.go
1 // Copyright 2016 Google Inc.  All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 package uuid
6
7 import (
8         "errors"
9         "fmt"
10 )
11
12 // MarshalText implements encoding.TextMarshaler.
13 func (u UUID) MarshalText() ([]byte, error) {
14         if len(u) != 16 {
15                 return nil, nil
16         }
17         var js [36]byte
18         encodeHex(js[:], u)
19         return js[:], nil
20 }
21
22 // UnmarshalText implements encoding.TextUnmarshaler.
23 func (u *UUID) UnmarshalText(data []byte) error {
24         if len(data) == 0 {
25                 return nil
26         }
27         id := Parse(string(data))
28         if id == nil {
29                 return errors.New("invalid UUID")
30         }
31         *u = id
32         return nil
33 }
34
35 // MarshalBinary implements encoding.BinaryMarshaler.
36 func (u UUID) MarshalBinary() ([]byte, error) {
37         return u[:], nil
38 }
39
40 // UnmarshalBinary implements encoding.BinaryUnmarshaler.
41 func (u *UUID) UnmarshalBinary(data []byte) error {
42         if len(data) == 0 {
43                 return nil
44         }
45         if len(data) != 16 {
46                 return fmt.Errorf("invalid UUID (got %d bytes)", len(data))
47         }
48         var id [16]byte
49         copy(id[:], data)
50         *u = id[:]
51         return nil
52 }
53
54 // MarshalText implements encoding.TextMarshaler.
55 func (u Array) MarshalText() ([]byte, error) {
56         var js [36]byte
57         encodeHex(js[:], u[:])
58         return js[:], nil
59 }
60
61 // UnmarshalText implements encoding.TextUnmarshaler.
62 func (u *Array) UnmarshalText(data []byte) error {
63         id := Parse(string(data))
64         if id == nil {
65                 return errors.New("invalid UUID")
66         }
67         *u = id.Array()
68         return nil
69 }
70
71 // MarshalBinary implements encoding.BinaryMarshaler.
72 func (u Array) MarshalBinary() ([]byte, error) {
73         return u[:], nil
74 }
75
76 // UnmarshalBinary implements encoding.BinaryUnmarshaler.
77 func (u *Array) UnmarshalBinary(data []byte) error {
78         if len(data) != 16 {
79                 return fmt.Errorf("invalid UUID (got %d bytes)", len(data))
80         }
81         copy(u[:], data)
82         return nil
83 }