...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package uuid
19
20 import (
21 "fmt"
22 "math/big"
23 "regexp"
24
25 "github.com/google/uuid"
26 )
27
28 var valid = regexp.MustCompile(
29 "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$")
30
31
32 func Valid(s string) error {
33 if !valid.MatchString(string(s)) {
34 return fmt.Errorf("invalid UUID %q", s)
35 }
36 return nil
37 }
38
39
40
41
42
43
44 func Parse(s string) (string, error) {
45 x, err := uuid.Parse(s)
46 return string(x.String()), err
47 }
48
49
50 func ToString(x string) string {
51 return string(x)
52 }
53
54
55 func URN(x string) (string, error) {
56 u, err := uuid.Parse(string(x))
57 if err != nil {
58 return "", err
59 }
60 return u.URN(), nil
61 }
62
63
64
65
66 func FromInt(i *big.Int) (string, error) {
67
68 var buf [16]byte
69 b := i.Bytes()
70 if len(b) < 16 {
71 copy(buf[16-len(b):], b)
72 b = buf[:]
73 }
74 u, err := uuid.FromBytes(b)
75 return string(u.String()), err
76 }
77
78
79 func ToInt(x string) *big.Int {
80 var i big.Int
81 i.SetBytes([]byte(x[:]))
82 return &i
83 }
84
85
86 func Variant(x string) (int, error) {
87 u, err := uuid.Parse(string(x))
88 if err != nil {
89 return 0, err
90 }
91 return int(u.Variant()), nil
92 }
93
94
95 func Version(x string) (int, error) {
96 u, err := uuid.Parse(string(x))
97 if err != nil {
98 return 0, err
99 }
100 return int(u.Version()), nil
101 }
102
103
104 func SHA1(space string, data []byte) (string, error) {
105 u, err := uuid.Parse(string(space))
106 if err != nil {
107 return "", err
108 }
109 return string(uuid.NewSHA1(u, data).String()), nil
110 }
111
112
113
114 func MD5(space string, data []byte) (string, error) {
115 u, err := uuid.Parse(string(space))
116 if err != nil {
117 return "", err
118 }
119 return string(uuid.NewMD5(u, data).String()), nil
120 }
121
View as plain text