|
|
@@ -2,6 +2,7 @@ package uuid
|
|
|
|
|
|
import (
|
|
|
"crypto/rand"
|
|
|
+ "encoding/hex"
|
|
|
"fmt"
|
|
|
)
|
|
|
|
|
|
@@ -27,3 +28,30 @@ func FormatUUID(buf []byte) (string, error) {
|
|
|
buf[8:10],
|
|
|
buf[10:16]), nil
|
|
|
}
|
|
|
+
|
|
|
+func ParseUUID(uuid string) ([]byte, error) {
|
|
|
+ if len(uuid) != 36 {
|
|
|
+ return nil, fmt.Errorf("uuid string is wrong length")
|
|
|
+ }
|
|
|
+
|
|
|
+ hyph := []byte("-")
|
|
|
+
|
|
|
+ if uuid[8] != hyph[0] ||
|
|
|
+ uuid[13] != hyph[0] ||
|
|
|
+ uuid[18] != hyph[0] ||
|
|
|
+ uuid[23] != hyph[0] {
|
|
|
+ return nil, fmt.Errorf("uuid is improperly formatted")
|
|
|
+ }
|
|
|
+
|
|
|
+ hexStr := uuid[0:8] + uuid[9:13] + uuid[14:18] + uuid[19:23] + uuid[24:36]
|
|
|
+
|
|
|
+ ret, err := hex.DecodeString(hexStr)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ if len(ret) != 16 {
|
|
|
+ return nil, fmt.Errorf("decoded hex is the wrong length")
|
|
|
+ }
|
|
|
+
|
|
|
+ return ret, nil
|
|
|
+}
|