diff options
Diffstat (limited to 'vendor/github.com/satori/go.uuid/uuid.go')
-rw-r--r-- | vendor/github.com/satori/go.uuid/uuid.go | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/vendor/github.com/satori/go.uuid/uuid.go b/vendor/github.com/satori/go.uuid/uuid.go new file mode 100644 index 0000000..a2b8e2c --- /dev/null +++ b/vendor/github.com/satori/go.uuid/uuid.go | |||
@@ -0,0 +1,161 @@ | |||
1 | // Copyright (C) 2013-2018 by Maxim Bublis <b@codemonkey.ru> | ||
2 | // | ||
3 | // Permission is hereby granted, free of charge, to any person obtaining | ||
4 | // a copy of this software and associated documentation files (the | ||
5 | // "Software"), to deal in the Software without restriction, including | ||
6 | // without limitation the rights to use, copy, modify, merge, publish, | ||
7 | // distribute, sublicense, and/or sell copies of the Software, and to | ||
8 | // permit persons to whom the Software is furnished to do so, subject to | ||
9 | // the following conditions: | ||
10 | // | ||
11 | // The above copyright notice and this permission notice shall be | ||
12 | // included in all copies or substantial portions of the Software. | ||
13 | // | ||
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||
15 | // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
16 | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||
17 | // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE | ||
18 | // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION | ||
19 | // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
20 | // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
21 | |||
22 | // Package uuid provides implementation of Universally Unique Identifier (UUID). | ||
23 | // Supported versions are 1, 3, 4 and 5 (as specified in RFC 4122) and | ||
24 | // version 2 (as specified in DCE 1.1). | ||
25 | package uuid | ||
26 | |||
27 | import ( | ||
28 | "bytes" | ||
29 | "encoding/hex" | ||
30 | ) | ||
31 | |||
32 | // Size of a UUID in bytes. | ||
33 | const Size = 16 | ||
34 | |||
35 | // UUID representation compliant with specification | ||
36 | // described in RFC 4122. | ||
37 | type UUID [Size]byte | ||
38 | |||
39 | // UUID versions | ||
40 | const ( | ||
41 | _ byte = iota | ||
42 | V1 | ||
43 | V2 | ||
44 | V3 | ||
45 | V4 | ||
46 | V5 | ||
47 | ) | ||
48 | |||
49 | // UUID layout variants. | ||
50 | const ( | ||
51 | VariantNCS byte = iota | ||
52 | VariantRFC4122 | ||
53 | VariantMicrosoft | ||
54 | VariantFuture | ||
55 | ) | ||
56 | |||
57 | // UUID DCE domains. | ||
58 | const ( | ||
59 | DomainPerson = iota | ||
60 | DomainGroup | ||
61 | DomainOrg | ||
62 | ) | ||
63 | |||
64 | // String parse helpers. | ||
65 | var ( | ||
66 | urnPrefix = []byte("urn:uuid:") | ||
67 | byteGroups = []int{8, 4, 4, 4, 12} | ||
68 | ) | ||
69 | |||
70 | // Nil is special form of UUID that is specified to have all | ||
71 | // 128 bits set to zero. | ||
72 | var Nil = UUID{} | ||
73 | |||
74 | // Predefined namespace UUIDs. | ||
75 | var ( | ||
76 | NamespaceDNS = Must(FromString("6ba7b810-9dad-11d1-80b4-00c04fd430c8")) | ||
77 | NamespaceURL = Must(FromString("6ba7b811-9dad-11d1-80b4-00c04fd430c8")) | ||
78 | NamespaceOID = Must(FromString("6ba7b812-9dad-11d1-80b4-00c04fd430c8")) | ||
79 | NamespaceX500 = Must(FromString("6ba7b814-9dad-11d1-80b4-00c04fd430c8")) | ||
80 | ) | ||
81 | |||
82 | // Equal returns true if u1 and u2 equals, otherwise returns false. | ||
83 | func Equal(u1 UUID, u2 UUID) bool { | ||
84 | return bytes.Equal(u1[:], u2[:]) | ||
85 | } | ||
86 | |||
87 | // Version returns algorithm version used to generate UUID. | ||
88 | func (u UUID) Version() byte { | ||
89 | return u[6] >> 4 | ||
90 | } | ||
91 | |||
92 | // Variant returns UUID layout variant. | ||
93 | func (u UUID) Variant() byte { | ||
94 | switch { | ||
95 | case (u[8] >> 7) == 0x00: | ||
96 | return VariantNCS | ||
97 | case (u[8] >> 6) == 0x02: | ||
98 | return VariantRFC4122 | ||
99 | case (u[8] >> 5) == 0x06: | ||
100 | return VariantMicrosoft | ||
101 | case (u[8] >> 5) == 0x07: | ||
102 | fallthrough | ||
103 | default: | ||
104 | return VariantFuture | ||
105 | } | ||
106 | } | ||
107 | |||
108 | // Bytes returns bytes slice representation of UUID. | ||
109 | func (u UUID) Bytes() []byte { | ||
110 | return u[:] | ||
111 | } | ||
112 | |||
113 | // Returns canonical string representation of UUID: | ||
114 | // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. | ||
115 | func (u UUID) String() string { | ||
116 | buf := make([]byte, 36) | ||
117 | |||
118 | hex.Encode(buf[0:8], u[0:4]) | ||
119 | buf[8] = '-' | ||
120 | hex.Encode(buf[9:13], u[4:6]) | ||
121 | buf[13] = '-' | ||
122 | hex.Encode(buf[14:18], u[6:8]) | ||
123 | buf[18] = '-' | ||
124 | hex.Encode(buf[19:23], u[8:10]) | ||
125 | buf[23] = '-' | ||
126 | hex.Encode(buf[24:], u[10:]) | ||
127 | |||
128 | return string(buf) | ||
129 | } | ||
130 | |||
131 | // SetVersion sets version bits. | ||
132 | func (u *UUID) SetVersion(v byte) { | ||
133 | u[6] = (u[6] & 0x0f) | (v << 4) | ||
134 | } | ||
135 | |||
136 | // SetVariant sets variant bits. | ||
137 | func (u *UUID) SetVariant(v byte) { | ||
138 | switch v { | ||
139 | case VariantNCS: | ||
140 | u[8] = (u[8]&(0xff>>1) | (0x00 << 7)) | ||
141 | case VariantRFC4122: | ||
142 | u[8] = (u[8]&(0xff>>2) | (0x02 << 6)) | ||
143 | case VariantMicrosoft: | ||
144 | u[8] = (u[8]&(0xff>>3) | (0x06 << 5)) | ||
145 | case VariantFuture: | ||
146 | fallthrough | ||
147 | default: | ||
148 | u[8] = (u[8]&(0xff>>3) | (0x07 << 5)) | ||
149 | } | ||
150 | } | ||
151 | |||
152 | // Must is a helper that wraps a call to a function returning (UUID, error) | ||
153 | // and panics if the error is non-nil. It is intended for use in variable | ||
154 | // initializations such as | ||
155 | // var packageUUID = uuid.Must(uuid.FromString("123e4567-e89b-12d3-a456-426655440000")); | ||
156 | func Must(u UUID, err error) UUID { | ||
157 | if err != nil { | ||
158 | panic(err) | ||
159 | } | ||
160 | return u | ||
161 | } | ||