summaryrefslogtreecommitdiff
path: root/cmd/ponzu/vendor/github.com/gofrs
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/ponzu/vendor/github.com/gofrs')
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/.gitignore15
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/.travis.yml19
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/LICENSE20
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/README.md101
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/codec.go214
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/codec_test.go303
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/fuzz.go47
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/generator.go299
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/generator_test.go418
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/sql.go105
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/sql_test.go305
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/1416586f4a34d02bcb506f6107b40df512b9f2f91
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/3b46a7e7b02ec193581e6c9fa2c8a72f50a64e08-11
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/50c54bb75fcfdc488f162bf2f0c6dec6103bfa18-51
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/69c581ab749cbd56be8684d3a58ac2cfab9af0f4-51
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/752bf000e0bff06777dd0d6f0be6353844de678a-31
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/a4483762d4ece8466d82cca5cacd35a0829c4e60-21
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/d0952c45e0c823fc5cc12bcf7d9b877d150ab523-11
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/da39a3ee5e6b4b0d3255bfef95601890afd807090
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/e2b84d2065846891f18ae109b12e01d224e1c7c3-41
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/e320d749435115e874f77420e17d0937e07f69f3-21
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/ed132d47d757f6468443a22df8a2a965efb34098-71
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/eeefb01f7bb3c627aedb292c994b20f739ffd613-61
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_01
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_11
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_101
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_111
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_121
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_131
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_141
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_151
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_161
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_171
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_181
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_191
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_21
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_201
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_211
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_221
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_231
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_31
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_41
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_51
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_61
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_71
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_81
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_91
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_BracedCanonical1
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_BracedHashlike1
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_Canonical1
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_Hashlike1
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_URNCanonical1
-rwxr-xr-xcmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_URNHashlike1
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/uuid.go159
-rw-r--r--cmd/ponzu/vendor/github.com/gofrs/uuid/uuid_test.go135
55 files changed, 2181 insertions, 0 deletions
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/.gitignore b/cmd/ponzu/vendor/github.com/gofrs/uuid/.gitignore
new file mode 100644
index 0000000..666dbbb
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/.gitignore
@@ -0,0 +1,15 @@
+# Binaries for programs and plugins
+*.exe
+*.exe~
+*.dll
+*.so
+*.dylib
+
+# Test binary, build with `go test -c`
+*.test
+
+# Output of the go coverage tool, specifically when used with LiteIDE
+*.out
+
+# binary bundle generated by go-fuzz
+uuid-fuzz.zip
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/.travis.yml b/cmd/ponzu/vendor/github.com/gofrs/uuid/.travis.yml
new file mode 100644
index 0000000..bb43fd2
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/.travis.yml
@@ -0,0 +1,19 @@
+language: go
+sudo: false
+go:
+ - 1.7
+ - 1.8
+ - 1.9
+ - "1.10"
+ - tip
+matrix:
+ allow_failures:
+ - go: tip
+ fast_finish: true
+before_install:
+ - go get github.com/mattn/goveralls
+ - go get golang.org/x/tools/cmd/cover
+script:
+ - $HOME/gopath/bin/goveralls -service=travis-ci
+notifications:
+ email: false
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/LICENSE b/cmd/ponzu/vendor/github.com/gofrs/uuid/LICENSE
new file mode 100644
index 0000000..926d549
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/LICENSE
@@ -0,0 +1,20 @@
+Copyright (C) 2013-2018 by Maxim Bublis <b@codemonkey.ru>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/README.md b/cmd/ponzu/vendor/github.com/gofrs/uuid/README.md
new file mode 100644
index 0000000..e1e2b2e
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/README.md
@@ -0,0 +1,101 @@
+# UUID
+
+[![License](https://img.shields.io/github/license/gofrs/uuid.svg)](https://github.com/gofrs/uuid/blob/master/LICENSE)
+[![Build Status](https://travis-ci.org/gofrs/uuid.svg?branch=master)](https://travis-ci.org/gofrs/uuid)
+[![GoDoc](http://godoc.org/github.com/gofrs/uuid?status.svg)](http://godoc.org/github.com/gofrs/uuid)
+[![Coverage Status](https://coveralls.io/repos/github/gofrs/uuid/badge.svg?branch=master)](https://coveralls.io/github/gofrs/uuid)
+[![Go Report Card](https://goreportcard.com/badge/github.com/gofrs/uuid)](https://goreportcard.com/report/github.com/gofrs/uuid)
+
+Package uuid provides a pure Go implementation of Universally Unique Identifiers
+(UUID) variant as defined in RFC-4122. This package supports both the creation
+and parsing of UUIDs in different formats.
+
+This package supports the following UUID versions:
+* Version 1, based on timestamp and MAC address (RFC-4122)
+* Version 2, based on timestamp, MAC address and POSIX UID/GID (DCE 1.1)
+* Version 3, based on MD5 hashing of a named value (RFC-4122)
+* Version 4, based on random numbers (RFC-4122)
+* Version 5, based on SHA-1 hashing of a named value (RFC-4122)
+
+## Project History
+
+This project was originally forked from the
+[github.com/satori/go.uuid](https://github.com/satori/go.uuid) repository after
+it appeared to be no longer maintained, while exhibiting [critical
+flaws](https://github.com/satori/go.uuid/issues/73). We have decided to take
+over this project to ensure it receives regular maintenance for the benefit of
+the larger Go community.
+
+We'd like to thank Maxim Bublis for his hard work on the original iteration of
+the package.
+
+## License
+
+This source code of this package is released under the MIT License. Please see
+the [LICENSE](https://github.com/gofrs/uuid/blob/master/LICENSE) for the full
+content of the license.
+
+## Recommended Package Version
+
+We recommend using v2.0.0+ of this package, as versions prior to 2.0.0 were
+created before our fork of the original package and have some known
+deficiencies.
+
+## Installation
+
+It is recommended to use a package manager like `dep` that understands tagged
+releases of a package, as well as semantic versioning.
+
+If you are unable to make use of a dependency manager with your project, you can
+use the `go get` command to download it directly:
+
+```Shell
+$ go get github.com/gofrs/uuid
+```
+
+## Requirements
+
+Due to subtests not being supported in older versions of Go, this package is
+only regularly tested against Go 1.7+. This package may work perfectly fine with
+Go 1.2+, but support for these older versions is not actively maintained.
+
+## Usage
+
+Here is a quick overview of how to use this package. For more detailed
+documentation, please see the [GoDoc Page](http://godoc.org/github.com/gofrs/uuid).
+
+```go
+package main
+
+import (
+ "log"
+
+ "github.com/gofrs/uuid"
+)
+
+// Create a Version 4 UUID, panicking on error.
+// Use this form to initialize package-level variables.
+var u1 = uuid.Must(uuid.NewV4())
+
+func main() {
+ // Create a Version 4 UUID.
+ u2, err := uuid.NewV4()
+ if err != nil {
+ log.Fatalf("failed to generate UUID: %v", err)
+ }
+ log.Printf("generated Version 4 UUID %v", u2)
+
+ // Parse a UUID from a string.
+ s := "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
+ u3, err := uuid.FromString(s)
+ if err != nil {
+ log.Fatalf("failed to parse UUID %q: %v", s, err)
+ }
+ log.Printf("successfully parsed UUID %v", u3)
+}
+```
+
+## References
+
+* [RFC-4122](https://tools.ietf.org/html/rfc4122)
+* [DCE 1.1: Authentication and Security Services](http://pubs.opengroup.org/onlinepubs/9696989899/chap5.htm#tagcjh_08_02_01_01)
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/codec.go b/cmd/ponzu/vendor/github.com/gofrs/uuid/codec.go
new file mode 100644
index 0000000..2f03b97
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/codec.go
@@ -0,0 +1,214 @@
+// Copyright (C) 2013-2018 by Maxim Bublis <b@codemonkey.ru>
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+package uuid
+
+import (
+ "bytes"
+ "encoding/hex"
+ "fmt"
+)
+
+// FromBytes returns a UUID generated from the raw byte slice input.
+// It will return an error if the slice isn't 16 bytes long.
+func FromBytes(input []byte) (UUID, error) {
+ u := UUID{}
+ err := u.UnmarshalBinary(input)
+ return u, err
+}
+
+// FromBytesOrNil returns a UUID generated from the raw byte slice input.
+// Same behavior as FromBytes(), but returns uuid.Nil instead of an error.
+func FromBytesOrNil(input []byte) UUID {
+ uuid, err := FromBytes(input)
+ if err != nil {
+ return Nil
+ }
+ return uuid
+}
+
+// FromString returns a UUID parsed from the input string.
+// Input is expected in a form accepted by UnmarshalText.
+func FromString(input string) (UUID, error) {
+ u := UUID{}
+ err := u.UnmarshalText([]byte(input))
+ return u, err
+}
+
+// FromStringOrNil returns a UUID parsed from the input string.
+// Same behavior as FromString(), but returns uuid.Nil instead of an error.
+func FromStringOrNil(input string) UUID {
+ uuid, err := FromString(input)
+ if err != nil {
+ return Nil
+ }
+ return uuid
+}
+
+// MarshalText implements the encoding.TextMarshaler interface.
+// The encoding is the same as returned by the String() method.
+func (u UUID) MarshalText() ([]byte, error) {
+ return []byte(u.String()), nil
+}
+
+// UnmarshalText implements the encoding.TextUnmarshaler interface.
+// Following formats are supported:
+//
+// "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
+// "{6ba7b810-9dad-11d1-80b4-00c04fd430c8}",
+// "urn:uuid:6ba7b810-9dad-11d1-80b4-00c04fd430c8"
+// "6ba7b8109dad11d180b400c04fd430c8"
+// "{6ba7b8109dad11d180b400c04fd430c8}",
+// "urn:uuid:6ba7b8109dad11d180b400c04fd430c8"
+//
+// ABNF for supported UUID text representation follows:
+//
+// URN := 'urn'
+// UUID-NID := 'uuid'
+//
+// hexdig := '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' |
+// 'a' | 'b' | 'c' | 'd' | 'e' | 'f' |
+// 'A' | 'B' | 'C' | 'D' | 'E' | 'F'
+//
+// hexoct := hexdig hexdig
+// 2hexoct := hexoct hexoct
+// 4hexoct := 2hexoct 2hexoct
+// 6hexoct := 4hexoct 2hexoct
+// 12hexoct := 6hexoct 6hexoct
+//
+// hashlike := 12hexoct
+// canonical := 4hexoct '-' 2hexoct '-' 2hexoct '-' 6hexoct
+//
+// plain := canonical | hashlike
+// uuid := canonical | hashlike | braced | urn
+//
+// braced := '{' plain '}' | '{' hashlike '}'
+// urn := URN ':' UUID-NID ':' plain
+//
+func (u *UUID) UnmarshalText(text []byte) error {
+ switch len(text) {
+ case 32:
+ return u.decodeHashLike(text)
+ case 34, 38:
+ return u.decodeBraced(text)
+ case 36:
+ return u.decodeCanonical(text)
+ case 41, 45:
+ return u.decodeURN(text)
+ default:
+ return fmt.Errorf("uuid: incorrect UUID length: %s", text)
+ }
+}
+
+// decodeCanonical decodes UUID strings that are formatted as defined in RFC-4122 (section 3):
+// "6ba7b810-9dad-11d1-80b4-00c04fd430c8".
+func (u *UUID) decodeCanonical(t []byte) error {
+ if t[8] != '-' || t[13] != '-' || t[18] != '-' || t[23] != '-' {
+ return fmt.Errorf("uuid: incorrect UUID format %s", t)
+ }
+
+ src := t[:]
+ dst := u[:]
+
+ for i, byteGroup := range byteGroups {
+ if i > 0 {
+ src = src[1:] // skip dash
+ }
+ _, err := hex.Decode(dst[:byteGroup/2], src[:byteGroup])
+ if err != nil {
+ return err
+ }
+ src = src[byteGroup:]
+ dst = dst[byteGroup/2:]
+ }
+
+ return nil
+}
+
+// decodeHashLike decodes UUID strings that are using the following format:
+// "6ba7b8109dad11d180b400c04fd430c8".
+func (u *UUID) decodeHashLike(t []byte) error {
+ src := t[:]
+ dst := u[:]
+
+ if _, err := hex.Decode(dst, src); err != nil {
+ return err
+ }
+ return nil
+}
+
+// decodeBraced decodes UUID strings that are using the following formats:
+// "{6ba7b810-9dad-11d1-80b4-00c04fd430c8}"
+// "{6ba7b8109dad11d180b400c04fd430c8}".
+func (u *UUID) decodeBraced(t []byte) error {
+ l := len(t)
+
+ if t[0] != '{' || t[l-1] != '}' {
+ return fmt.Errorf("uuid: incorrect UUID format %s", t)
+ }
+
+ return u.decodePlain(t[1 : l-1])
+}
+
+// decodeURN decodes UUID strings that are using the following formats:
+// "urn:uuid:6ba7b810-9dad-11d1-80b4-00c04fd430c8"
+// "urn:uuid:6ba7b8109dad11d180b400c04fd430c8".
+func (u *UUID) decodeURN(t []byte) error {
+ total := len(t)
+
+ urnUUIDPrefix := t[:9]
+
+ if !bytes.Equal(urnUUIDPrefix, urnPrefix) {
+ return fmt.Errorf("uuid: incorrect UUID format: %s", t)
+ }
+
+ return u.decodePlain(t[9:total])
+}
+
+// decodePlain decodes UUID strings that are using the following formats:
+// "6ba7b810-9dad-11d1-80b4-00c04fd430c8" or in hash-like format
+// "6ba7b8109dad11d180b400c04fd430c8".
+func (u *UUID) decodePlain(t []byte) error {
+ switch len(t) {
+ case 32:
+ return u.decodeHashLike(t)
+ case 36:
+ return u.decodeCanonical(t)
+ default:
+ return fmt.Errorf("uuid: incorrrect UUID length: %s", t)
+ }
+}
+
+// MarshalBinary implements the encoding.BinaryMarshaler interface.
+func (u UUID) MarshalBinary() ([]byte, error) {
+ return u.Bytes(), nil
+}
+
+// UnmarshalBinary implements the encoding.BinaryUnmarshaler interface.
+// It will return an error if the slice isn't 16 bytes long.
+func (u *UUID) UnmarshalBinary(data []byte) error {
+ if len(data) != Size {
+ return fmt.Errorf("uuid: UUID must be exactly 16 bytes long, got %d bytes", len(data))
+ }
+ copy(u[:], data)
+
+ return nil
+}
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/codec_test.go b/cmd/ponzu/vendor/github.com/gofrs/uuid/codec_test.go
new file mode 100644
index 0000000..f156d1c
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/codec_test.go
@@ -0,0 +1,303 @@
+// Copyright (C) 2013-2018 by Maxim Bublis <b@codemonkey.ru>
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+package uuid
+
+import (
+ "bytes"
+ "flag"
+ "fmt"
+ "io/ioutil"
+ "os"
+ "path/filepath"
+ "testing"
+)
+
+// codecTestData holds []byte data for a UUID we commonly use for testing.
+var codecTestData = []byte{0x6b, 0xa7, 0xb8, 0x10, 0x9d, 0xad, 0x11, 0xd1, 0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8}
+
+// codecTestUUID is the UUID value corresponding to codecTestData.
+var codecTestUUID = UUID{0x6b, 0xa7, 0xb8, 0x10, 0x9d, 0xad, 0x11, 0xd1, 0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8}
+
+func TestFromBytes(t *testing.T) {
+ t.Run("Valid", func(t *testing.T) {
+ got, err := FromBytes(codecTestData)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if got != codecTestUUID {
+ t.Fatalf("FromBytes(%x) = %v, want %v", codecTestData, got, codecTestUUID)
+ }
+ })
+ t.Run("Invalid", func(t *testing.T) {
+ var short [][]byte
+ for i := 0; i < len(codecTestData); i++ {
+ short = append(short, codecTestData[:i])
+ }
+ var long [][]byte
+ for i := 1; i < 17; i++ {
+ tmp := append(codecTestData, make([]byte, i)...)
+ long = append(long, tmp)
+ }
+ invalid := append(short, long...)
+ for _, b := range invalid {
+ got, err := FromBytes(b)
+ if err == nil {
+ t.Fatalf("FromBytes(%x): want err != nil, got %v", b, got)
+ }
+ }
+ })
+}
+
+func TestFromBytesOrNil(t *testing.T) {
+ t.Run("Invalid", func(t *testing.T) {
+ b := []byte{4, 8, 15, 16, 23, 42}
+ got := FromBytesOrNil(b)
+ if got != Nil {
+ t.Errorf("FromBytesOrNil(%x): got %v, want %v", b, got, Nil)
+ }
+ })
+ t.Run("Valid", func(t *testing.T) {
+ got := FromBytesOrNil(codecTestData)
+ if got != codecTestUUID {
+ t.Errorf("FromBytesOrNil(%x): got %v, want %v", codecTestData, got, codecTestUUID)
+ }
+ })
+
+}
+
+type fromStringTest struct {
+ input string
+ variant string
+}
+
+// Run runs the FromString test in a subtest of t, named by fst.variant.
+func (fst fromStringTest) Run(t *testing.T) {
+ t.Run(fst.variant, func(t *testing.T) {
+ got, err := FromString(fst.input)
+ if err != nil {
+ t.Fatalf("FromString(%q): %v", fst.input, err)
+ }
+ if want := codecTestUUID; got != want {
+ t.Fatalf("FromString(%q) = %v, want %v", fst.input, got, want)
+ }
+ })
+}
+
+// fromStringTests contains UUID variants that are expected to be parsed
+// successfully by UnmarshalText / FromString.
+//
+// variants must be unique across elements of this slice. Please see the
+// comment in fuzz.go if you change this slice or add new tests to it.
+var fromStringTests = []fromStringTest{
+ {
+ input: "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
+ variant: "Canonical",
+ },
+ {
+ input: "{6ba7b810-9dad-11d1-80b4-00c04fd430c8}",
+ variant: "BracedCanonical",
+ },
+ {
+ input: "{6ba7b8109dad11d180b400c04fd430c8}",
+ variant: "BracedHashlike",
+ },
+ {
+ input: "6ba7b8109dad11d180b400c04fd430c8",
+ variant: "Hashlike",
+ },
+ {
+ input: "urn:uuid:6ba7b810-9dad-11d1-80b4-00c04fd430c8",
+ variant: "URNCanonical",
+ },
+ {
+ input: "urn:uuid:6ba7b8109dad11d180b400c04fd430c8",
+ variant: "URNHashlike",
+ },
+}
+
+var invalidFromStringInputs = []string{
+ // short
+ "6ba7b810-9dad-11d1-80b4-00c04fd430c",
+ "6ba7b8109dad11d180b400c04fd430c",
+
+ // invalid hex
+ "6ba7b8109dad11d180b400c04fd430q8",
+
+ // long
+ "6ba7b810-9dad-11d1-80b4-00c04fd430c8=",
+ "6ba7b810-9dad-11d1-80b4-00c04fd430c8}",
+ "{6ba7b810-9dad-11d1-80b4-00c04fd430c8}f",
+ "6ba7b810-9dad-11d1-80b4-00c04fd430c800c04fd430c8",
+
+ // malformed in other ways
+ "ba7b8109dad11d180b400c04fd430c8}",
+ "6ba7b8109dad11d180b400c04fd430c86ba7b8109dad11d180b400c04fd430c8",
+ "urn:uuid:{6ba7b810-9dad-11d1-80b4-00c04fd430c8}",
+ "uuid:urn:6ba7b810-9dad-11d1-80b4-00c04fd430c8",
+ "uuid:urn:6ba7b8109dad11d180b400c04fd430c8",
+ "6ba7b8109-dad-11d1-80b4-00c04fd430c8",
+ "6ba7b810-9dad1-1d1-80b4-00c04fd430c8",
+ "6ba7b810-9dad-11d18-0b4-00c04fd430c8",
+ "6ba7b810-9dad-11d1-80b40-0c04fd430c8",
+ "6ba7b810+9dad+11d1+80b4+00c04fd430c8",
+ "(6ba7b810-9dad-11d1-80b4-00c04fd430c8}",
+ "{6ba7b810-9dad-11d1-80b4-00c04fd430c8>",
+ "zba7b810-9dad-11d1-80b4-00c04fd430c8",
+ "6ba7b810-9dad11d180b400c04fd430c8",
+ "6ba7b8109dad-11d180b400c04fd430c8",
+ "6ba7b8109dad11d1-80b400c04fd430c8",
+ "6ba7b8109dad11d180b4-00c04fd430c8",
+}
+
+func TestFromString(t *testing.T) {
+ t.Run("Valid", func(t *testing.T) {
+ for _, fst := range fromStringTests {
+ fst.Run(t)
+ }
+ })
+ t.Run("Invalid", func(t *testing.T) {
+ for _, s := range invalidFromStringInputs {
+ got, err := FromString(s)
+ if err == nil {
+ t.Errorf("FromString(%q): want err != nil, got %v", s, got)
+ }
+ }
+ })
+}
+
+func TestFromStringOrNil(t *testing.T) {
+ t.Run("Invalid", func(t *testing.T) {
+ s := "bad"
+ got := FromStringOrNil(s)
+ if got != Nil {
+ t.Errorf("FromStringOrNil(%q): got %v, want Nil", s, got)
+ }
+ })
+ t.Run("Valid", func(t *testing.T) {
+ s := "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
+ got := FromStringOrNil(s)
+ if got != codecTestUUID {
+ t.Errorf("FromStringOrNil(%q): got %v, want %v", s, got, codecTestUUID)
+ }
+ })
+}
+
+func TestMarshalBinary(t *testing.T) {
+ got, err := codecTestUUID.MarshalBinary()
+ if err != nil {
+ t.Fatal(err)
+ }
+ if !bytes.Equal(got, codecTestData) {
+ t.Fatalf("%v.MarshalBinary() = %x, want %x", codecTestUUID, got, codecTestData)
+ }
+}
+
+func TestMarshalText(t *testing.T) {
+ want := []byte("6ba7b810-9dad-11d1-80b4-00c04fd430c8")
+ got, err := codecTestUUID.MarshalText()
+ if err != nil {
+ t.Fatal(err)
+ }
+ if !bytes.Equal(got, want) {
+ t.Errorf("%v.MarshalText(): got %s, want %s", codecTestUUID, got, want)
+ }
+}
+
+func TestDecodePlainWithWrongLength(t *testing.T) {
+ arg := []byte{'4', '2'}
+
+ u := UUID{}
+
+ if u.decodePlain(arg) == nil {
+ t.Errorf("%v.decodePlain(%q): should return error, but it did not", u, arg)
+ }
+}
+
+var stringBenchmarkSink string
+
+func BenchmarkString(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ stringBenchmarkSink = codecTestUUID.String()
+ }
+}
+
+func BenchmarkFromBytes(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ FromBytes(codecTestData)
+ }
+}
+
+func BenchmarkFromString(b *testing.B) {
+ b.Run("canonical", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ FromString("6ba7b810-9dad-11d1-80b4-00c04fd430c8")
+ }
+ })
+ b.Run("urn", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ FromString("urn:uuid:6ba7b810-9dad-11d1-80b4-00c04fd430c8")
+ }
+ })
+ b.Run("braced", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ FromString("{6ba7b810-9dad-11d1-80b4-00c04fd430c8}")
+ }
+ })
+}
+
+func BenchmarkMarshalBinary(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ codecTestUUID.MarshalBinary()
+ }
+}
+
+func BenchmarkMarshalText(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ codecTestUUID.MarshalText()
+ }
+}
+
+var seedFuzzCorpus = flag.Bool("seed_fuzz_corpus", false, "seed fuzz test corpus")
+
+func TestSeedFuzzCorpus(t *testing.T) {
+ // flag.Parse() is called for us by the test binary.
+ if !*seedFuzzCorpus {
+ t.Skip("seeding fuzz test corpus only on demand")
+ }
+ corpusDir := filepath.Join(".", "testdata", "corpus")
+ writeSeedFile := func(name, data string) error {
+ path := filepath.Join(corpusDir, name)
+ return ioutil.WriteFile(path, []byte(data), os.ModePerm)
+ }
+ for _, fst := range fromStringTests {
+ name := "seed_valid_" + fst.variant
+ if err := writeSeedFile(name, fst.input); err != nil {
+ t.Fatal(err)
+ }
+ }
+ for i, s := range invalidFromStringInputs {
+ name := fmt.Sprintf("seed_invalid_%d", i)
+ if err := writeSeedFile(name, s); err != nil {
+ t.Fatal(err)
+ }
+ }
+}
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/fuzz.go b/cmd/ponzu/vendor/github.com/gofrs/uuid/fuzz.go
new file mode 100644
index 0000000..afaefbc
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/fuzz.go
@@ -0,0 +1,47 @@
+// Copyright (c) 2018 Andrei Tudor Călin <mail@acln.ro>
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// +build gofuzz
+
+package uuid
+
+// Fuzz implements a simple fuzz test for FromString / UnmarshalText.
+//
+// To run:
+//
+// $ go get github.com/dvyukov/go-fuzz/...
+// $ cd $GOPATH/src/github.com/gofrs/uuid
+// $ go-fuzz-build github.com/gofrs/uuid
+// $ go-fuzz -bin=uuid-fuzz.zip -workdir=./testdata
+//
+// If you make significant changes to FromString / UnmarshalText and add
+// new cases to fromStringTests (in codec_test.go), please run
+//
+// $ go test -seed_fuzz_corpus
+//
+// to seed the corpus with the new interesting inputs, then run the fuzzer.
+func Fuzz(data []byte) int {
+ _, err := FromString(string(data))
+ if err != nil {
+ return 0
+ }
+ return 1
+}
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/generator.go b/cmd/ponzu/vendor/github.com/gofrs/uuid/generator.go
new file mode 100644
index 0000000..4257761
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/generator.go
@@ -0,0 +1,299 @@
+// Copyright (C) 2013-2018 by Maxim Bublis <b@codemonkey.ru>
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+package uuid
+
+import (
+ "crypto/md5"
+ "crypto/rand"
+ "crypto/sha1"
+ "encoding/binary"
+ "fmt"
+ "hash"
+ "io"
+ "net"
+ "os"
+ "sync"
+ "time"
+)
+
+// Difference in 100-nanosecond intervals between
+// UUID epoch (October 15, 1582) and Unix epoch (January 1, 1970).
+const epochStart = 122192928000000000
+
+type epochFunc func() time.Time
+
+// HWAddrFunc is the function type used to provide hardware (MAC) addresses.
+type HWAddrFunc func() (net.HardwareAddr, error)
+
+// DefaultGenerator is the default UUID Generator used by this package.
+var DefaultGenerator Generator = NewGen()
+
+var (
+ posixUID = uint32(os.Getuid())
+ posixGID = uint32(os.Getgid())
+)
+
+// NewV1 returns a UUID based on the current timestamp and MAC address.
+func NewV1() (UUID, error) {
+ return DefaultGenerator.NewV1()
+}
+
+// NewV2 returns a DCE Security UUID based on the POSIX UID/GID.
+func NewV2(domain byte) (UUID, error) {
+ return DefaultGenerator.NewV2(domain)
+}
+
+// NewV3 returns a UUID based on the MD5 hash of the namespace UUID and name.
+func NewV3(ns UUID, name string) UUID {
+ return DefaultGenerator.NewV3(ns, name)
+}
+
+// NewV4 returns a randomly generated UUID.
+func NewV4() (UUID, error) {
+ return DefaultGenerator.NewV4()
+}
+
+// NewV5 returns a UUID based on SHA-1 hash of the namespace UUID and name.
+func NewV5(ns UUID, name string) UUID {
+ return DefaultGenerator.NewV5(ns, name)
+}
+
+// Generator provides an interface for generating UUIDs.
+type Generator interface {
+ NewV1() (UUID, error)
+ NewV2(domain byte) (UUID, error)
+ NewV3(ns UUID, name string) UUID
+ NewV4() (UUID, error)
+ NewV5(ns UUID, name string) UUID
+}
+
+// Gen is a reference UUID generator based on the specifications laid out in
+// RFC-4122 and DCE 1.1: Authentication and Security Services. This type
+// satisfies the Generator interface as defined in this package.
+//
+// For consumers who are generating V1 UUIDs, but don't want to expose the MAC
+// address of the node generating the UUIDs, the NewGenWithHWAF() function has been
+// provided as a convenience. See the function's documentation for more info.
+//
+// The authors of this package do not feel that the majority of users will need
+// to obfuscate their MAC address, and so we recommend using NewGen() to create
+// a new generator.
+type Gen struct {
+ clockSequenceOnce sync.Once
+ hardwareAddrOnce sync.Once
+ storageMutex sync.Mutex
+
+ rand io.Reader
+
+ epochFunc epochFunc
+ hwAddrFunc HWAddrFunc
+ lastTime uint64
+ clockSequence uint16
+ hardwareAddr [6]byte
+}
+
+// interface check -- build will fail if *Gen doesn't satisfy Generator
+var _ Generator = (*Gen)(nil)
+
+// NewGen returns a new instance of Gen with some default values set. Most
+// people should use this.
+func NewGen() *Gen {
+ return NewGenWithHWAF(defaultHWAddrFunc)
+}
+
+// NewGenWithHWAF builds a new UUID generator with the HWAddrFunc provided. Most
+// consumers should use NewGen() instead.
+//
+// This is used so that consumers can generate their own MAC addresses, for use
+// in the generated UUIDs, if there is some concern about exposing the physical
+// address of the machine generating the UUID.
+//
+// The Gen generator will only invoke the HWAddrFunc once, and cache that MAC
+// address for all the future UUIDs generated by it. If you'd like to switch the
+// MAC address being used, you'll need to create a new generator using this
+// function.
+func NewGenWithHWAF(hwaf HWAddrFunc) *Gen {
+ return &Gen{
+ epochFunc: time.Now,
+ hwAddrFunc: hwaf,
+ rand: rand.Reader,
+ }
+}
+
+// NewV1 returns a UUID based on the current timestamp and MAC address.
+func (g *Gen) NewV1() (UUID, error) {
+ u := UUID{}
+
+ timeNow, clockSeq, err := g.getClockSequence()
+ if err != nil {
+ return Nil, err
+ }
+ binary.BigEndian.PutUint32(u[0:], uint32(timeNow))
+ binary.BigEndian.PutUint16(u[4:], uint16(timeNow>>32))
+ binary.BigEndian.PutUint16(u[6:], uint16(timeNow>>48))
+ binary.BigEndian.PutUint16(u[8:], clockSeq)
+
+ hardwareAddr, err := g.getHardwareAddr()
+ if err != nil {
+ return Nil, err
+ }
+ copy(u[10:], hardwareAddr)
+
+ u.SetVersion(V1)
+ u.SetVariant(VariantRFC4122)
+
+ return u, nil
+}
+
+// NewV2 returns a DCE Security UUID based on the POSIX UID/GID.
+func (g *Gen) NewV2(domain byte) (UUID, error) {
+ u, err := g.NewV1()
+ if err != nil {
+ return Nil, err
+ }
+
+ switch domain {
+ case DomainPerson:
+ binary.BigEndian.PutUint32(u[:], posixUID)
+ case DomainGroup:
+ binary.BigEndian.PutUint32(u[:], posixGID)
+ }
+
+ u[9] = domain
+
+ u.SetVersion(V2)
+ u.SetVariant(VariantRFC4122)
+
+ return u, nil
+}
+
+// NewV3 returns a UUID based on the MD5 hash of the namespace UUID and name.
+func (g *Gen) NewV3(ns UUID, name string) UUID {
+ u := newFromHash(md5.New(), ns, name)
+ u.SetVersion(V3)
+ u.SetVariant(VariantRFC4122)
+
+ return u
+}
+
+// NewV4 returns a randomly generated UUID.
+func (g *Gen) NewV4() (UUID, error) {
+ u := UUID{}
+ if _, err := io.ReadFull(g.rand, u[:]); err != nil {
+ return Nil, err
+ }
+ u.SetVersion(V4)
+ u.SetVariant(VariantRFC4122)
+
+ return u, nil
+}
+
+// NewV5 returns a UUID based on SHA-1 hash of the namespace UUID and name.
+func (g *Gen) NewV5(ns UUID, name string) UUID {
+ u := newFromHash(sha1.New(), ns, name)
+ u.SetVersion(V5)
+ u.SetVariant(VariantRFC4122)
+
+ return u
+}
+
+// Returns the epoch and clock sequence.
+func (g *Gen) getClockSequence() (uint64, uint16, error) {
+ var err error
+ g.clockSequenceOnce.Do(func() {
+ buf := make([]byte, 2)
+ if _, err = io.ReadFull(g.rand, buf); err != nil {
+ return
+ }
+ g.clockSequence = binary.BigEndian.Uint16(buf)
+ })
+ if err != nil {
+ return 0, 0, err
+ }
+
+ g.storageMutex.Lock()
+ defer g.storageMutex.Unlock()
+
+ timeNow := g.getEpoch()
+ // Clock didn't change since last UUID generation.
+ // Should increase clock sequence.
+ if timeNow <= g.lastTime {
+ g.clockSequence++
+ }
+ g.lastTime = timeNow
+
+ return timeNow, g.clockSequence, nil
+}
+
+// Returns the hardware address.
+func (g *Gen) getHardwareAddr() ([]byte, error) {
+ var err error
+ g.hardwareAddrOnce.Do(func() {
+ var hwAddr net.HardwareAddr
+ if hwAddr, err = g.hwAddrFunc(); err == nil {
+ copy(g.hardwareAddr[:], hwAddr)
+ return
+ }
+
+ // Initialize hardwareAddr randomly in case
+ // of real network interfaces absence.
+ if _, err = io.ReadFull(g.rand, g.hardwareAddr[:]); err != nil {
+ return
+ }
+ // Set multicast bit as recommended by RFC-4122
+ g.hardwareAddr[0] |= 0x01
+ })
+ if err != nil {
+ return []byte{}, err
+ }
+ return g.hardwareAddr[:], nil
+}
+
+// Returns the difference between UUID epoch (October 15, 1582)
+// and current time in 100-nanosecond intervals.
+func (g *Gen) getEpoch() uint64 {
+ return epochStart + uint64(g.epochFunc().UnixNano()/100)
+}
+
+// Returns the UUID based on the hashing of the namespace UUID and name.
+func newFromHash(h hash.Hash, ns UUID, name string) UUID {
+ u := UUID{}
+ h.Write(ns[:])
+ h.Write([]byte(name))
+ copy(u[:], h.Sum(nil))
+
+ return u
+}
+
+// Returns the hardware address.
+func defaultHWAddrFunc() (net.HardwareAddr, error) {
+ ifaces, err := net.Interfaces()
+ if err != nil {
+ return []byte{}, err
+ }
+ for _, iface := range ifaces {
+ if len(iface.HardwareAddr) >= 6 {
+ return iface.HardwareAddr, nil
+ }
+ }
+ return []byte{}, fmt.Errorf("uuid: no HW address found")
+}
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/generator_test.go b/cmd/ponzu/vendor/github.com/gofrs/uuid/generator_test.go
new file mode 100644
index 0000000..35b59b7
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/generator_test.go
@@ -0,0 +1,418 @@
+// Copyright (C) 2013-2018 by Maxim Bublis <b@codemonkey.ru>
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+package uuid
+
+import (
+ "bytes"
+ "crypto/rand"
+ "fmt"
+ "net"
+ "testing"
+ "time"
+)
+
+func TestGenerator(t *testing.T) {
+ t.Run("NewV1", testNewV1)
+ t.Run("NewV2", testNewV2)
+ t.Run("NewV3", testNewV3)
+ t.Run("NewV4", testNewV4)
+ t.Run("NewV5", testNewV5)
+}
+
+func testNewV1(t *testing.T) {
+ t.Run("Basic", testNewV1Basic)
+ t.Run("DifferentAcrossCalls", testNewV1DifferentAcrossCalls)
+ t.Run("StaleEpoch", testNewV1StaleEpoch)
+ t.Run("FaultyRand", testNewV1FaultyRand)
+ t.Run("MissingNetwork", testNewV1MissingNetwork)
+ t.Run("MissingNetworkFaultyRand", testNewV1MissingNetworkFaultyRand)
+}
+
+func TestNewGenWithHWAF(t *testing.T) {
+ addr := []byte{0, 1, 2, 3, 4, 42}
+
+ fn := func() (net.HardwareAddr, error) {
+ return addr, nil
+ }
+
+ var g *Gen
+ var err error
+ var uuid UUID
+
+ g = NewGenWithHWAF(fn)
+
+ if g == nil {
+ t.Fatal("g is unexpectedly nil")
+ }
+
+ uuid, err = g.NewV1()
+ if err != nil {
+ t.Fatalf("g.NewV1() err = %v, want <nil>", err)
+ }
+
+ node := uuid[10:]
+
+ if !bytes.Equal(addr, node) {
+ t.Fatalf("node = %v, want %v", node, addr)
+ }
+}
+
+func testNewV1Basic(t *testing.T) {
+ u, err := NewV1()
+ if err != nil {
+ t.Fatal(err)
+ }
+ if got, want := u.Version(), V1; got != want {
+ t.Errorf("generated UUID with version %d, want %d", got, want)
+ }
+ if got, want := u.Variant(), VariantRFC4122; got != want {
+ t.Errorf("generated UUID with variant %d, want %d", got, want)
+ }
+}
+
+func testNewV1DifferentAcrossCalls(t *testing.T) {
+ u1, err := NewV1()
+ if err != nil {
+ t.Fatal(err)
+ }
+ u2, err := NewV1()
+ if err != nil {
+ t.Fatal(err)
+ }
+ if u1 == u2 {
+ t.Errorf("generated identical UUIDs across calls: %v", u1)
+ }
+}
+
+func testNewV1StaleEpoch(t *testing.T) {
+ g := &Gen{
+ epochFunc: func() time.Time {
+ return time.Unix(0, 0)
+ },
+ hwAddrFunc: defaultHWAddrFunc,
+ rand: rand.Reader,
+ }
+ u1, err := g.NewV1()
+ if err != nil {
+ t.Fatal(err)
+ }
+ u2, err := g.NewV1()
+ if err != nil {
+ t.Fatal(err)
+ }
+ if u1 == u2 {
+ t.Errorf("generated identical UUIDs across calls: %v", u1)
+ }
+}
+
+func testNewV1FaultyRand(t *testing.T) {
+ g := &Gen{
+ epochFunc: time.Now,
+ hwAddrFunc: defaultHWAddrFunc,
+ rand: &faultyReader{
+ readToFail: 0, // fail immediately
+ },
+ }
+ u, err := g.NewV1()
+ if err == nil {
+ t.Fatalf("got %v, want error", u)
+ }
+ if u != Nil {
+ t.Fatalf("got %v on error, want Nil", u)
+ }
+}
+
+func testNewV1MissingNetwork(t *testing.T) {
+ g := &Gen{
+ epochFunc: time.Now,
+ hwAddrFunc: func() (net.HardwareAddr, error) {
+ return []byte{}, fmt.Errorf("uuid: no hw address found")
+ },
+ rand: rand.Reader,
+ }
+ _, err := g.NewV1()
+ if err != nil {
+ t.Errorf("did not handle missing network interfaces: %v", err)
+ }
+}
+
+func testNewV1MissingNetworkFaultyRand(t *testing.T) {
+ g := &Gen{
+ epochFunc: time.Now,
+ hwAddrFunc: func() (net.HardwareAddr, error) {
+ return []byte{}, fmt.Errorf("uuid: no hw address found")
+ },
+ rand: &faultyReader{
+ readToFail: 1,
+ },
+ }
+ u, err := g.NewV1()
+ if err == nil {
+ t.Errorf("did not error on faulty reader and missing network, got %v", u)
+ }
+}
+
+func testNewV2(t *testing.T) {
+ t.Run("Basic", testNewV2Basic)
+ t.Run("DifferentAcrossCalls", testNewV2DifferentAcrossCalls)
+ t.Run("FaultyRand", testNewV2FaultyRand)
+}
+
+func testNewV2Basic(t *testing.T) {
+ domains := []byte{
+ DomainPerson,
+ DomainGroup,
+ DomainOrg,
+ }
+ for _, domain := range domains {
+ u, err := NewV2(domain)
+ if err != nil {
+ t.Errorf("NewV2(%d): %v", domain, err)
+ }
+ if got, want := u.Version(), V2; got != want {
+ t.Errorf("NewV2(%d) generated UUID with version %d, want %d", domain, got, want)
+ }
+ if got, want := u.Variant(), VariantRFC4122; got != want {
+ t.Errorf("NewV2(%d) generated UUID with variant %d, want %d", domain, got, want)
+ }
+ }
+}
+
+func testNewV2DifferentAcrossCalls(t *testing.T) {
+ u1, err := NewV2(DomainOrg)
+ if err != nil {
+ t.Fatal(err)
+ }
+ u2, err := NewV2(DomainOrg)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if u1 == u2 {
+ t.Errorf("generated identical UUIDs across calls: %v", u1)
+ }
+}
+
+func testNewV2FaultyRand(t *testing.T) {
+ g := &Gen{
+ epochFunc: time.Now,
+ hwAddrFunc: defaultHWAddrFunc,
+ rand: &faultyReader{
+ readToFail: 0, // fail immediately
+ },
+ }
+ u, err := g.NewV2(DomainPerson)
+ if err == nil {
+ t.Fatalf("got %v, want error", u)
+ }
+ if u != Nil {
+ t.Fatalf("got %v on error, want Nil", u)
+ }
+}
+
+func testNewV3(t *testing.T) {
+ t.Run("Basic", testNewV3Basic)
+ t.Run("EqualNames", testNewV3EqualNames)
+ t.Run("DifferentNamespaces", testNewV3DifferentNamespaces)
+}
+
+func testNewV3Basic(t *testing.T) {
+ ns := NamespaceDNS
+ name := "www.example.com"
+ u := NewV3(ns, name)
+ if got, want := u.Version(), V3; got != want {
+ t.Errorf("NewV3(%v, %q): got version %d, want %d", ns, name, got, want)
+ }
+ if got, want := u.Variant(), VariantRFC4122; got != want {
+ t.Errorf("NewV3(%v, %q): got variant %d, want %d", ns, name, got, want)
+ }
+ want := "5df41881-3aed-3515-88a7-2f4a814cf09e"
+ if got := u.String(); got != want {
+ t.Errorf("NewV3(%v, %q) = %q, want %q", ns, name, got, want)
+ }
+}
+
+func testNewV3EqualNames(t *testing.T) {
+ ns := NamespaceDNS
+ name := "example.com"
+ u1 := NewV3(ns, name)
+ u2 := NewV3(ns, name)
+ if u1 != u2 {
+ t.Errorf("NewV3(%v, %q) generated %v and %v across two calls", ns, name, u1, u2)
+ }
+}
+
+func testNewV3DifferentNamespaces(t *testing.T) {
+ name := "example.com"
+ ns1 := NamespaceDNS
+ ns2 := NamespaceURL
+ u1 := NewV3(ns1, name)
+ u2 := NewV3(ns2, name)
+ if u1 == u2 {
+ t.Errorf("NewV3(%v, %q) == NewV3(%d, %q) (%v)", ns1, name, ns2, name, u1)
+ }
+}
+
+func testNewV4(t *testing.T) {
+ t.Run("Basic", testNewV4Basic)
+ t.Run("DifferentAcrossCalls", testNewV4DifferentAcrossCalls)
+ t.Run("FaultyRand", testNewV4FaultyRand)
+ t.Run("ShortRandomRead", testNewV4ShortRandomRead)
+}
+
+func testNewV4Basic(t *testing.T) {
+ u, err := NewV4()
+ if err != nil {
+ t.Fatal(err)
+ }
+ if got, want := u.Version(), V4; got != want {
+ t.Errorf("got version %d, want %d", got, want)
+ }
+ if got, want := u.Variant(), VariantRFC4122; got != want {
+ t.Errorf("got variant %d, want %d", got, want)
+ }
+}
+
+func testNewV4DifferentAcrossCalls(t *testing.T) {
+ u1, err := NewV4()
+ if err != nil {
+ t.Fatal(err)
+ }
+ u2, err := NewV4()
+ if err != nil {
+ t.Fatal(err)
+ }
+ if u1 == u2 {
+ t.Errorf("generated identical UUIDs across calls: %v", u1)
+ }
+}
+
+func testNewV4FaultyRand(t *testing.T) {
+ g := &Gen{
+ epochFunc: time.Now,
+ hwAddrFunc: defaultHWAddrFunc,
+ rand: &faultyReader{
+ readToFail: 0, // fail immediately
+ },
+ }
+ u, err := g.NewV4()
+ if err == nil {
+ t.Errorf("got %v, nil error", u)
+ }
+}
+
+func testNewV4ShortRandomRead(t *testing.T) {
+ g := &Gen{
+ epochFunc: time.Now,
+ hwAddrFunc: func() (net.HardwareAddr, error) {
+ return []byte{}, fmt.Errorf("uuid: no hw address found")
+ },
+ rand: bytes.NewReader([]byte{42}),
+ }
+ u, err := g.NewV4()
+ if err == nil {
+ t.Errorf("got %v, nil error", u)
+ }
+}
+
+func testNewV5(t *testing.T) {
+ t.Run("Basic", testNewV5Basic)
+ t.Run("EqualNames", testNewV5EqualNames)
+ t.Run("DifferentNamespaces", testNewV5DifferentNamespaces)
+}
+
+func testNewV5Basic(t *testing.T) {
+ ns := NamespaceDNS
+ name := "www.example.com"
+ u := NewV5(ns, name)
+ if got, want := u.Version(), V5; got != want {
+ t.Errorf("NewV5(%v, %q): got version %d, want %d", ns, name, got, want)
+ }
+ if got, want := u.Variant(), VariantRFC4122; got != want {
+ t.Errorf("NewV5(%v, %q): got variant %d, want %d", ns, name, got, want)
+ }
+ want := "2ed6657d-e927-568b-95e1-2665a8aea6a2"
+ if got := u.String(); got != want {
+ t.Errorf("NewV5(%v, %q) = %q, want %q", ns, name, got, want)
+ }
+}
+
+func testNewV5EqualNames(t *testing.T) {
+ ns := NamespaceDNS
+ name := "example.com"
+ u1 := NewV5(ns, name)
+ u2 := NewV5(ns, name)
+ if u1 != u2 {
+ t.Errorf("NewV5(%v, %q) generated %v and %v across two calls", ns, name, u1, u2)
+ }
+}
+
+func testNewV5DifferentNamespaces(t *testing.T) {
+ name := "example.com"
+ ns1 := NamespaceDNS
+ ns2 := NamespaceURL
+ u1 := NewV5(ns1, name)
+ u2 := NewV5(ns2, name)
+ if u1 == u2 {
+ t.Errorf("NewV5(%v, %q) == NewV5(%v, %q) (%v)", ns1, name, ns2, name, u1)
+ }
+}
+
+func BenchmarkGenerator(b *testing.B) {
+ b.Run("NewV1", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ NewV1()
+ }
+ })
+ b.Run("NewV2", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ NewV2(DomainOrg)
+ }
+ })
+ b.Run("NewV3", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ NewV3(NamespaceDNS, "www.example.com")
+ }
+ })
+ b.Run("NewV4", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ NewV4()
+ }
+ })
+ b.Run("NewV5", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ NewV5(NamespaceDNS, "www.example.com")
+ }
+ })
+}
+
+type faultyReader struct {
+ callsNum int
+ readToFail int // Read call number to fail
+}
+
+func (r *faultyReader) Read(dest []byte) (int, error) {
+ r.callsNum++
+ if (r.callsNum - 1) == r.readToFail {
+ return 0, fmt.Errorf("io: reader is faulty")
+ }
+ return rand.Read(dest)
+}
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/sql.go b/cmd/ponzu/vendor/github.com/gofrs/uuid/sql.go
new file mode 100644
index 0000000..78558ab
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/sql.go
@@ -0,0 +1,105 @@
+// Copyright (C) 2013-2018 by Maxim Bublis <b@codemonkey.ru>
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+package uuid
+
+import (
+ "bytes"
+ "database/sql/driver"
+ "encoding/json"
+ "fmt"
+)
+
+// Value implements the driver.Valuer interface.
+func (u UUID) Value() (driver.Value, error) {
+ return u.String(), nil
+}
+
+// Scan implements the sql.Scanner interface.
+// A 16-byte slice will be handled by UnmarshalBinary, while
+// a longer byte slice or a string will be handled by UnmarshalText.
+func (u *UUID) Scan(src interface{}) error {
+ switch src := src.(type) {
+ case []byte:
+ if len(src) == Size {
+ return u.UnmarshalBinary(src)
+ }
+ return u.UnmarshalText(src)
+
+ case string:
+ return u.UnmarshalText([]byte(src))
+ }
+
+ return fmt.Errorf("uuid: cannot convert %T to UUID", src)
+}
+
+// NullUUID can be used with the standard sql package to represent a
+// UUID value that can be NULL in the database.
+type NullUUID struct {
+ UUID UUID
+ Valid bool
+}
+
+// Value implements the driver.Valuer interface.
+func (u NullUUID) Value() (driver.Value, error) {
+ if !u.Valid {
+ return nil, nil
+ }
+ // Delegate to UUID Value function
+ return u.UUID.Value()
+}
+
+// Scan implements the sql.Scanner interface.
+func (u *NullUUID) Scan(src interface{}) error {
+ if src == nil {
+ u.UUID, u.Valid = Nil, false
+ return nil
+ }
+
+ // Delegate to UUID Scan function
+ u.Valid = true
+ return u.UUID.Scan(src)
+}
+
+// MarshalJSON marshals the NullUUID as null or the nested UUID
+func (u NullUUID) MarshalJSON() ([]byte, error) {
+ if !u.Valid {
+ return json.Marshal(nil)
+ }
+
+ return json.Marshal(u.UUID)
+}
+
+// UnmarshalJSON unmarshals a NullUUID
+func (u *NullUUID) UnmarshalJSON(b []byte) error {
+ if bytes.Equal(b, []byte("null")) {
+ u.UUID, u.Valid = Nil, false
+ return nil
+ }
+
+ if err := json.Unmarshal(b, &u.UUID); err != nil {
+ return err
+ }
+
+ u.Valid = true
+
+ return nil
+}
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/sql_test.go b/cmd/ponzu/vendor/github.com/gofrs/uuid/sql_test.go
new file mode 100644
index 0000000..a2d3941
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/sql_test.go
@@ -0,0 +1,305 @@
+// Copyright (C) 2013-2018 by Maxim Bublis <b@codemonkey.ru>
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+package uuid
+
+import (
+ "encoding/json"
+ "fmt"
+ "testing"
+)
+
+func TestSQL(t *testing.T) {
+ t.Run("Value", testSQLValue)
+ t.Run("Scan", func(t *testing.T) {
+ t.Run("Binary", testSQLScanBinary)
+ t.Run("String", testSQLScanString)
+ t.Run("Text", testSQLScanText)
+ t.Run("Unsupported", testSQLScanUnsupported)
+ t.Run("Nil", testSQLScanNil)
+ })
+}
+
+func testSQLValue(t *testing.T) {
+ v, err := codecTestUUID.Value()
+ if err != nil {
+ t.Fatal(err)
+ }
+ got, ok := v.(string)
+ if !ok {
+ t.Fatalf("Value() returned %T, want string", v)
+ }
+ if want := codecTestUUID.String(); got != want {
+ t.Errorf("Value() == %q, want %q", got, want)
+ }
+}
+
+func testSQLScanBinary(t *testing.T) {
+ got := UUID{}
+ err := got.Scan(codecTestData)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if got != codecTestUUID {
+ t.Errorf("Scan(%x): got %v, want %v", codecTestData, got, codecTestUUID)
+ }
+}
+
+func testSQLScanString(t *testing.T) {
+ s := "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
+ got := UUID{}
+ err := got.Scan(s)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if got != codecTestUUID {
+ t.Errorf("Scan(%q): got %v, want %v", s, got, codecTestUUID)
+ }
+}
+
+func testSQLScanText(t *testing.T) {
+ text := []byte("6ba7b810-9dad-11d1-80b4-00c04fd430c8")
+ got := UUID{}
+ err := got.Scan(text)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if got != codecTestUUID {
+ t.Errorf("Scan(%q): got %v, want %v", text, got, codecTestUUID)
+ }
+}
+
+func testSQLScanUnsupported(t *testing.T) {
+ unsupported := []interface{}{
+ true,
+ 42,
+ }
+ for _, v := range unsupported {
+ got := UUID{}
+ err := got.Scan(v)
+ if err == nil {
+ t.Errorf("Scan(%T) succeeded, got %v", v, got)
+ }
+ }
+}
+
+func testSQLScanNil(t *testing.T) {
+ got := UUID{}
+ err := got.Scan(nil)
+ if err == nil {
+ t.Errorf("Scan(nil) succeeded, got %v", got)
+ }
+}
+
+func TestNullUUID(t *testing.T) {
+ t.Run("Value", func(t *testing.T) {
+ t.Run("Nil", testNullUUIDValueNil)
+ t.Run("Valid", testNullUUIDValueValid)
+ })
+
+ t.Run("Scan", func(t *testing.T) {
+ t.Run("Nil", testNullUUIDScanNil)
+ t.Run("Valid", testNullUUIDScanValid)
+ })
+
+ t.Run("MarshalJSON", func(t *testing.T) {
+ t.Run("Nil", testNullUUIDMarshalJSONNil)
+ t.Run("Null", testNullUUIDMarshalJSONNull)
+ t.Run("Valid", testNullUUIDMarshalJSONValid)
+ })
+
+ t.Run("UnmarshalJSON", func(t *testing.T) {
+ t.Run("Nil", testNullUUIDUnmarshalJSONNil)
+ t.Run("Null", testNullUUIDUnmarshalJSONNull)
+ t.Run("Valid", testNullUUIDUnmarshalJSONValid)
+ t.Run("Malformed", testNullUUIDUnmarshalJSONMalformed)
+ })
+}
+
+func testNullUUIDValueNil(t *testing.T) {
+ nu := NullUUID{}
+ got, err := nu.Value()
+ if got != nil {
+ t.Errorf("null NullUUID.Value returned non-nil driver.Value")
+ }
+ if err != nil {
+ t.Errorf("null NullUUID.Value returned non-nil error")
+ }
+}
+
+func testNullUUIDValueValid(t *testing.T) {
+ nu := NullUUID{
+ Valid: true,
+ UUID: codecTestUUID,
+ }
+ got, err := nu.Value()
+ if err != nil {
+ t.Fatal(err)
+ }
+ s, ok := got.(string)
+ if !ok {
+ t.Errorf("Value() returned %T, want string", got)
+ }
+ want := "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
+ if s != want {
+ t.Errorf("%v.Value() == %s, want %s", nu, s, want)
+ }
+}
+
+func testNullUUIDScanNil(t *testing.T) {
+ u := NullUUID{}
+ err := u.Scan(nil)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if u.Valid {
+ t.Error("NullUUID is valid after Scan(nil)")
+ }
+ if u.UUID != Nil {
+ t.Errorf("NullUUID.UUID is %v after Scan(nil) want Nil", u.UUID)
+ }
+}
+
+func testNullUUIDScanValid(t *testing.T) {
+ s := "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
+ u := NullUUID{}
+ err := u.Scan(s)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if !u.Valid {
+ t.Errorf("Valid == false after Scan(%q)", s)
+ }
+ if u.UUID != codecTestUUID {
+ t.Errorf("UUID == %v after Scan(%q), want %v", u.UUID, s, codecTestUUID)
+ }
+}
+
+func testNullUUIDMarshalJSONNil(t *testing.T) {
+ u := NullUUID{Valid: true}
+
+ data, err := u.MarshalJSON()
+ if err != nil {
+ t.Fatalf("(%#v).MarshalJSON err want: <nil>, got: %v", u, err)
+ }
+
+ dataStr := string(data)
+
+ if dataStr != fmt.Sprintf("%q", Nil) {
+ t.Fatalf("(%#v).MarshalJSON value want: %s, got: %s", u, Nil, dataStr)
+ }
+}
+
+func testNullUUIDMarshalJSONValid(t *testing.T) {
+ u := NullUUID{
+ Valid: true,
+ UUID: codecTestUUID,
+ }
+
+ data, err := u.MarshalJSON()
+ if err != nil {
+ t.Fatalf("(%#v).MarshalJSON err want: <nil>, got: %v", u, err)
+ }
+
+ dataStr := string(data)
+
+ if dataStr != fmt.Sprintf("%q", codecTestUUID) {
+ t.Fatalf("(%#v).MarshalJSON value want: %s, got: %s", u, codecTestUUID, dataStr)
+ }
+}
+
+func testNullUUIDMarshalJSONNull(t *testing.T) {
+ u := NullUUID{}
+
+ data, err := u.MarshalJSON()
+ if err != nil {
+ t.Fatalf("(%#v).MarshalJSON err want: <nil>, got: %v", u, err)
+ }
+
+ dataStr := string(data)
+
+ if dataStr != "null" {
+ t.Fatalf("(%#v).MarshalJSON value want: %s, got: %s", u, "null", dataStr)
+ }
+}
+
+func testNullUUIDUnmarshalJSONNil(t *testing.T) {
+ var u NullUUID
+
+ data := []byte(`"00000000-0000-0000-0000-000000000000"`)
+
+ if err := json.Unmarshal(data, &u); err != nil {
+ t.Fatalf("json.Unmarshal err = %v, want <nil>", err)
+ }
+
+ if !u.Valid {
+ t.Fatalf("u.Valid = false, want true")
+ }
+
+ if u.UUID != Nil {
+ t.Fatalf("u.UUID = %v, want %v", u.UUID, Nil)
+ }
+}
+
+func testNullUUIDUnmarshalJSONNull(t *testing.T) {
+ var u NullUUID
+
+ data := []byte(`null`)
+
+ if err := json.Unmarshal(data, &u); err != nil {
+ t.Fatalf("json.Unmarshal err = %v, want <nil>", err)
+ }
+
+ if u.Valid {
+ t.Fatalf("u.Valid = true, want false")
+ }
+
+ if u.UUID != Nil {
+ t.Fatalf("u.UUID = %v, want %v", u.UUID, Nil)
+ }
+}
+func testNullUUIDUnmarshalJSONValid(t *testing.T) {
+ var u NullUUID
+
+ data := []byte(`"6ba7b810-9dad-11d1-80b4-00c04fd430c8"`)
+
+ if err := json.Unmarshal(data, &u); err != nil {
+ t.Fatalf("json.Unmarshal err = %v, want <nil>", err)
+ }
+
+ if !u.Valid {
+ t.Fatalf("u.Valid = false, want true")
+ }
+
+ if u.UUID != codecTestUUID {
+ t.Fatalf("u.UUID = %v, want %v", u.UUID, Nil)
+ }
+}
+
+func testNullUUIDUnmarshalJSONMalformed(t *testing.T) {
+ var u NullUUID
+
+ data := []byte(`257`)
+
+ if err := json.Unmarshal(data, &u); err == nil {
+ t.Fatal("json.Unmarshal err = <nil>, want error")
+ }
+}
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/1416586f4a34d02bcb506f6107b40df512b9f2f9 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/1416586f4a34d02bcb506f6107b40df512b9f2f9
new file mode 100644
index 0000000..cfb2480
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/1416586f4a34d02bcb506f6107b40df512b9f2f9
@@ -0,0 +1 @@
+zba7b810-9dad-11d1-80b4-00c04fd4 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/3b46a7e7b02ec193581e6c9fa2c8a72f50a64e08-1 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/3b46a7e7b02ec193581e6c9fa2c8a72f50a64e08-1
new file mode 100644
index 0000000..77b9420
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/3b46a7e7b02ec193581e6c9fa2c8a72f50a64e08-1
@@ -0,0 +1 @@
+6ba7b810-9dad-11d1-80F4-00c"4fd430c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/50c54bb75fcfdc488f162bf2f0c6dec6103bfa18-5 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/50c54bb75fcfdc488f162bf2f0c6dec6103bfa18-5
new file mode 100644
index 0000000..17e57ce
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/50c54bb75fcfdc488f162bf2f0c6dec6103bfa18-5
@@ -0,0 +1 @@
+6ad1DdE8dda91DdE80F400c0Bool30t: \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/69c581ab749cbd56be8684d3a58ac2cfab9af0f4-5 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/69c581ab749cbd56be8684d3a58ac2cfab9af0f4-5
new file mode 100644
index 0000000..f53c1bd
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/69c581ab749cbd56be8684d3a58ac2cfab9af0f4-5
@@ -0,0 +1 @@
+6ba7b810Edad1DdE80F400c0Bool30c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/752bf000e0bff06777dd0d6f0be6353844de678a-3 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/752bf000e0bff06777dd0d6f0be6353844de678a-3
new file mode 100644
index 0000000..6bcb9a1
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/752bf000e0bff06777dd0d6f0be6353844de678a-3
@@ -0,0 +1 @@
+6ba7b8109dad1Dd180F400c0Bool30c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/a4483762d4ece8466d82cca5cacd35a0829c4e60-2 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/a4483762d4ece8466d82cca5cacd35a0829c4e60-2
new file mode 100644
index 0000000..88427b7
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/a4483762d4ece8466d82cca5cacd35a0829c4e60-2
@@ -0,0 +1 @@
+6ba7b810-9dad-11d1-80F4-F0c"4fd430c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/d0952c45e0c823fc5cc12bcf7d9b877d150ab523-1 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/d0952c45e0c823fc5cc12bcf7d9b877d150ab523-1
new file mode 100644
index 0000000..b3b8228
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/d0952c45e0c823fc5cc12bcf7d9b877d150ab523-1
@@ -0,0 +1 @@
+6ba7b8109dad11d180b400c0Bool30c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/da39a3ee5e6b4b0d3255bfef95601890afd80709 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/da39a3ee5e6b4b0d3255bfef95601890afd80709
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/da39a3ee5e6b4b0d3255bfef95601890afd80709
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/e2b84d2065846891f18ae109b12e01d224e1c7c3-4 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/e2b84d2065846891f18ae109b12e01d224e1c7c3-4
new file mode 100644
index 0000000..abff4da
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/e2b84d2065846891f18ae109b12e01d224e1c7c3-4
@@ -0,0 +1 @@
+6ba7b8109dad1DdE80F400c0Bool30c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/e320d749435115e874f77420e17d0937e07f69f3-2 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/e320d749435115e874f77420e17d0937e07f69f3-2
new file mode 100644
index 0000000..b71e8b2
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/e320d749435115e874f77420e17d0937e07f69f3-2
@@ -0,0 +1 @@
+6ba7b8109dad1Dd180b400c0Bool30c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/ed132d47d757f6468443a22df8a2a965efb34098-7 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/ed132d47d757f6468443a22df8a2a965efb34098-7
new file mode 100644
index 0000000..a40ccde
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/ed132d47d757f6468443a22df8a2a965efb34098-7
@@ -0,0 +1 @@
+6ba1DdE8dDAE8DdE80F400c0BoUl30to \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/eeefb01f7bb3c627aedb292c994b20f739ffd613-6 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/eeefb01f7bb3c627aedb292c994b20f739ffd613-6
new file mode 100644
index 0000000..4117221
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/eeefb01f7bb3c627aedb292c994b20f739ffd613-6
@@ -0,0 +1 @@
+6ad1DdE8dDdE8DdE80F400c0Bool30t: \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_0 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_0
new file mode 100755
index 0000000..02965f8
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_0
@@ -0,0 +1 @@
+6ba7b810-9dad-11d1-80b4-00c04fd430c \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_1 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_1
new file mode 100755
index 0000000..3c7f5f6
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_1
@@ -0,0 +1 @@
+6ba7b8109dad11d180b400c04fd430c \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_10 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_10
new file mode 100755
index 0000000..ec890f3
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_10
@@ -0,0 +1 @@
+uuid:urn:6ba7b810-9dad-11d1-80b4-00c04fd430c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_11 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_11
new file mode 100755
index 0000000..266a823
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_11
@@ -0,0 +1 @@
+uuid:urn:6ba7b8109dad11d180b400c04fd430c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_12 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_12
new file mode 100755
index 0000000..06f8ad2
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_12
@@ -0,0 +1 @@
+6ba7b8109-dad-11d1-80b4-00c04fd430c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_13 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_13
new file mode 100755
index 0000000..302b9c3
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_13
@@ -0,0 +1 @@
+6ba7b810-9dad1-1d1-80b4-00c04fd430c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_14 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_14
new file mode 100755
index 0000000..c37896c
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_14
@@ -0,0 +1 @@
+6ba7b810-9dad-11d18-0b4-00c04fd430c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_15 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_15
new file mode 100755
index 0000000..bb279bd
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_15
@@ -0,0 +1 @@
+6ba7b810-9dad-11d1-80b40-0c04fd430c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_16 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_16
new file mode 100755
index 0000000..2c8be7d
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_16
@@ -0,0 +1 @@
+6ba7b810+9dad+11d1+80b4+00c04fd430c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_17 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_17
new file mode 100755
index 0000000..129f752
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_17
@@ -0,0 +1 @@
+(6ba7b810-9dad-11d1-80b4-00c04fd430c8} \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_18 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_18
new file mode 100755
index 0000000..ed41a50
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_18
@@ -0,0 +1 @@
+{6ba7b810-9dad-11d1-80b4-00c04fd430c8> \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_19 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_19
new file mode 100755
index 0000000..a296f9e
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_19
@@ -0,0 +1 @@
+zba7b810-9dad-11d1-80b4-00c04fd430c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_2 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_2
new file mode 100755
index 0000000..e294615
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_2
@@ -0,0 +1 @@
+6ba7b8109dad11d180b400c04fd430q8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_20 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_20
new file mode 100755
index 0000000..6e5d2d5
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_20
@@ -0,0 +1 @@
+6ba7b810-9dad11d180b400c04fd430c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_21 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_21
new file mode 100755
index 0000000..53ebad9
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_21
@@ -0,0 +1 @@
+6ba7b8109dad-11d180b400c04fd430c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_22 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_22
new file mode 100755
index 0000000..c08019c
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_22
@@ -0,0 +1 @@
+6ba7b8109dad11d1-80b400c04fd430c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_23 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_23
new file mode 100755
index 0000000..8c32062
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_23
@@ -0,0 +1 @@
+6ba7b8109dad11d180b4-00c04fd430c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_3 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_3
new file mode 100755
index 0000000..2afa5c9
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_3
@@ -0,0 +1 @@
+6ba7b810-9dad-11d1-80b4-00c04fd430c8= \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_4 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_4
new file mode 100755
index 0000000..a5f4d4e
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_4
@@ -0,0 +1 @@
+6ba7b810-9dad-11d1-80b4-00c04fd430c8} \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_5 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_5
new file mode 100755
index 0000000..a78e7ed
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_5
@@ -0,0 +1 @@
+{6ba7b810-9dad-11d1-80b4-00c04fd430c8}f \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_6 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_6
new file mode 100755
index 0000000..f14ded5
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_6
@@ -0,0 +1 @@
+6ba7b810-9dad-11d1-80b4-00c04fd430c800c04fd430c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_7 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_7
new file mode 100755
index 0000000..76e0980
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_7
@@ -0,0 +1 @@
+ba7b8109dad11d180b400c04fd430c8} \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_8 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_8
new file mode 100755
index 0000000..f89e744
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_8
@@ -0,0 +1 @@
+6ba7b8109dad11d180b400c04fd430c86ba7b8109dad11d180b400c04fd430c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_9 b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_9
new file mode 100755
index 0000000..80ad554
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_invalid_9
@@ -0,0 +1 @@
+urn:uuid:{6ba7b810-9dad-11d1-80b4-00c04fd430c8} \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_BracedCanonical b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_BracedCanonical
new file mode 100755
index 0000000..23918e3
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_BracedCanonical
@@ -0,0 +1 @@
+{6ba7b810-9dad-11d1-80b4-00c04fd430c8} \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_BracedHashlike b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_BracedHashlike
new file mode 100755
index 0000000..726e1df
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_BracedHashlike
@@ -0,0 +1 @@
+{6ba7b8109dad11d180b400c04fd430c8} \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_Canonical b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_Canonical
new file mode 100755
index 0000000..719471c
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_Canonical
@@ -0,0 +1 @@
+6ba7b810-9dad-11d1-80b4-00c04fd430c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_Hashlike b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_Hashlike
new file mode 100755
index 0000000..327f806
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_Hashlike
@@ -0,0 +1 @@
+6ba7b8109dad11d180b400c04fd430c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_URNCanonical b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_URNCanonical
new file mode 100755
index 0000000..78981af
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_URNCanonical
@@ -0,0 +1 @@
+urn:uuid:6ba7b810-9dad-11d1-80b4-00c04fd430c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_URNHashlike b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_URNHashlike
new file mode 100755
index 0000000..089ec0c
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/testdata/corpus/seed_valid_URNHashlike
@@ -0,0 +1 @@
+urn:uuid:6ba7b8109dad11d180b400c04fd430c8 \ No newline at end of file
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/uuid.go b/cmd/ponzu/vendor/github.com/gofrs/uuid/uuid.go
new file mode 100644
index 0000000..a2558b6
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/uuid.go
@@ -0,0 +1,159 @@
+// Copyright (C) 2013-2018 by Maxim Bublis <b@codemonkey.ru>
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// Package uuid provides implementations of the Universally Unique Identifier (UUID), as specified in RFC-4122 and DCE 1.1.
+//
+// RFC-4122[1] provides the specification for versions 1, 3, 4, and 5.
+//
+// DCE 1.1[2] provides the specification for version 2.
+//
+// [1] https://tools.ietf.org/html/rfc4122
+// [2] http://pubs.opengroup.org/onlinepubs/9696989899/chap5.htm#tagcjh_08_02_01_01
+package uuid
+
+import (
+ "encoding/hex"
+)
+
+// Size of a UUID in bytes.
+const Size = 16
+
+// UUID is an array type to represent the value of a UUID, as defined in RFC-4122.
+type UUID [Size]byte
+
+// UUID versions.
+const (
+ _ byte = iota
+ V1 // Version 1 (date-time and MAC address)
+ V2 // Version 2 (date-time and MAC address, DCE security version)
+ V3 // Version 3 (namespace name-based)
+ V4 // Version 4 (random)
+ V5 // Version 5 (namespace name-based)
+)
+
+// UUID layout variants.
+const (
+ VariantNCS byte = iota
+ VariantRFC4122
+ VariantMicrosoft
+ VariantFuture
+)
+
+// UUID DCE domains.
+const (
+ DomainPerson = iota
+ DomainGroup
+ DomainOrg
+)
+
+// String parse helpers.
+var (
+ urnPrefix = []byte("urn:uuid:")
+ byteGroups = []int{8, 4, 4, 4, 12}
+)
+
+// Nil is the nil UUID, as specified in RFC-4122, that has all 128 bits set to
+// zero.
+var Nil = UUID{}
+
+// Predefined namespace UUIDs.
+var (
+ NamespaceDNS = Must(FromString("6ba7b810-9dad-11d1-80b4-00c04fd430c8"))
+ NamespaceURL = Must(FromString("6ba7b811-9dad-11d1-80b4-00c04fd430c8"))
+ NamespaceOID = Must(FromString("6ba7b812-9dad-11d1-80b4-00c04fd430c8"))
+ NamespaceX500 = Must(FromString("6ba7b814-9dad-11d1-80b4-00c04fd430c8"))
+)
+
+// Version returns the algorithm version used to generate the UUID.
+func (u UUID) Version() byte {
+ return u[6] >> 4
+}
+
+// Variant returns the UUID layout variant.
+func (u UUID) Variant() byte {
+ switch {
+ case (u[8] >> 7) == 0x00:
+ return VariantNCS
+ case (u[8] >> 6) == 0x02:
+ return VariantRFC4122
+ case (u[8] >> 5) == 0x06:
+ return VariantMicrosoft
+ case (u[8] >> 5) == 0x07:
+ fallthrough
+ default:
+ return VariantFuture
+ }
+}
+
+// Bytes returns a byte slice representation of the UUID.
+func (u UUID) Bytes() []byte {
+ return u[:]
+}
+
+// String returns a canonical RFC-4122 string representation of the UUID:
+// xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
+func (u UUID) String() string {
+ buf := make([]byte, 36)
+
+ hex.Encode(buf[0:8], u[0:4])
+ buf[8] = '-'
+ hex.Encode(buf[9:13], u[4:6])
+ buf[13] = '-'
+ hex.Encode(buf[14:18], u[6:8])
+ buf[18] = '-'
+ hex.Encode(buf[19:23], u[8:10])
+ buf[23] = '-'
+ hex.Encode(buf[24:], u[10:])
+
+ return string(buf)
+}
+
+// SetVersion sets the version bits.
+func (u *UUID) SetVersion(v byte) {
+ u[6] = (u[6] & 0x0f) | (v << 4)
+}
+
+// SetVariant sets the variant bits.
+func (u *UUID) SetVariant(v byte) {
+ switch v {
+ case VariantNCS:
+ u[8] = (u[8]&(0xff>>1) | (0x00 << 7))
+ case VariantRFC4122:
+ u[8] = (u[8]&(0xff>>2) | (0x02 << 6))
+ case VariantMicrosoft:
+ u[8] = (u[8]&(0xff>>3) | (0x06 << 5))
+ case VariantFuture:
+ fallthrough
+ default:
+ u[8] = (u[8]&(0xff>>3) | (0x07 << 5))
+ }
+}
+
+// Must is a helper that wraps a call to a function returning (UUID, error)
+// and panics if the error is non-nil. It is intended for use in variable
+// initializations such as
+// var packageUUID = uuid.Must(uuid.FromString("123e4567-e89b-12d3-a456-426655440000"))
+func Must(u UUID, err error) UUID {
+ if err != nil {
+ panic(err)
+ }
+ return u
+}
diff --git a/cmd/ponzu/vendor/github.com/gofrs/uuid/uuid_test.go b/cmd/ponzu/vendor/github.com/gofrs/uuid/uuid_test.go
new file mode 100644
index 0000000..a5b35d9
--- /dev/null
+++ b/cmd/ponzu/vendor/github.com/gofrs/uuid/uuid_test.go
@@ -0,0 +1,135 @@
+// Copyright (C) 2013-2018 by Maxim Bublis <b@codemonkey.ru>
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+package uuid
+
+import (
+ "bytes"
+ "fmt"
+ "testing"
+)
+
+func TestUUID(t *testing.T) {
+ t.Run("Bytes", testUUIDBytes)
+ t.Run("String", testUUIDString)
+ t.Run("Version", testUUIDVersion)
+ t.Run("Variant", testUUIDVariant)
+ t.Run("SetVersion", testUUIDSetVersion)
+ t.Run("SetVariant", testUUIDSetVariant)
+}
+
+func testUUIDBytes(t *testing.T) {
+ got := codecTestUUID.Bytes()
+ want := codecTestData
+ if !bytes.Equal(got, want) {
+ t.Errorf("%v.Bytes() = %x, want %x", codecTestUUID, got, want)
+ }
+}
+
+func testUUIDString(t *testing.T) {
+ got := NamespaceDNS.String()
+ want := "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
+ if got != want {
+ t.Errorf("%v.String() = %q, want %q", NamespaceDNS, got, want)
+ }
+}
+
+func testUUIDVersion(t *testing.T) {
+ u := UUID{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+ if got, want := u.Version(), V1; got != want {
+ t.Errorf("%v.Version() == %d, want %d", u, got, want)
+ }
+}
+
+func testUUIDVariant(t *testing.T) {
+ tests := []struct {
+ u UUID
+ want byte
+ }{
+ {
+ u: UUID{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ want: VariantNCS,
+ },
+ {
+ u: UUID{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ want: VariantRFC4122,
+ },
+ {
+ u: UUID{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ want: VariantMicrosoft,
+ },
+ {
+ u: UUID{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ want: VariantFuture,
+ },
+ }
+ for _, tt := range tests {
+ if got := tt.u.Variant(); got != tt.want {
+ t.Errorf("%v.Variant() == %d, want %d", tt.u, got, tt.want)
+ }
+ }
+}
+
+func testUUIDSetVersion(t *testing.T) {
+ u := UUID{}
+ want := V4
+ u.SetVersion(want)
+ if got := u.Version(); got != want {
+ t.Errorf("%v.Version() == %d after SetVersion(%d)", u, got, want)
+ }
+}
+
+func testUUIDSetVariant(t *testing.T) {
+ variants := []byte{
+ VariantNCS,
+ VariantRFC4122,
+ VariantMicrosoft,
+ VariantFuture,
+ }
+ for _, want := range variants {
+ u := UUID{}
+ u.SetVariant(want)
+ if got := u.Variant(); got != want {
+ t.Errorf("%v.Variant() == %d after SetVariant(%d)", u, got, want)
+ }
+ }
+}
+
+func TestMust(t *testing.T) {
+ sentinel := fmt.Errorf("uuid: sentinel error")
+ defer func() {
+ r := recover()
+ if r == nil {
+ t.Fatalf("did not panic, want %v", sentinel)
+ }
+ err, ok := r.(error)
+ if !ok {
+ t.Fatalf("panicked with %T, want error (%v)", r, sentinel)
+ }
+ if err != sentinel {
+ t.Fatalf("panicked with %v, want %v", err, sentinel)
+ }
+ }()
+ fn := func() (UUID, error) {
+ return Nil, sentinel
+ }
+ Must(fn())
+}