aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/tomnomnom/linkheader
diff options
context:
space:
mode:
authorr <r@freesoftwareextremist.com>2020-02-01 11:31:44 +0000
committerr <r@freesoftwareextremist.com>2020-02-01 11:31:44 +0000
commit9cf648eaa3c2d158cc4aafda73738f7fe173ca84 (patch)
treee4d6f69bc405a5c12d59df1a91a5d6d1536e2423 /vendor/github.com/tomnomnom/linkheader
parente73df8de9ab5a00aa377d5cd7cfe335e06774ea0 (diff)
downloadbloat-9cf648eaa3c2d158cc4aafda73738f7fe173ca84.tar.gz
bloat-9cf648eaa3c2d158cc4aafda73738f7fe173ca84.zip
Use vendored dependencies
Diffstat (limited to 'vendor/github.com/tomnomnom/linkheader')
-rw-r--r--vendor/github.com/tomnomnom/linkheader/.gitignore2
-rw-r--r--vendor/github.com/tomnomnom/linkheader/.travis.yml6
-rw-r--r--vendor/github.com/tomnomnom/linkheader/CONTRIBUTING.mkd10
-rw-r--r--vendor/github.com/tomnomnom/linkheader/LICENSE21
-rw-r--r--vendor/github.com/tomnomnom/linkheader/README.mkd35
-rw-r--r--vendor/github.com/tomnomnom/linkheader/main.go151
6 files changed, 225 insertions, 0 deletions
diff --git a/vendor/github.com/tomnomnom/linkheader/.gitignore b/vendor/github.com/tomnomnom/linkheader/.gitignore
new file mode 100644
index 0000000..0a00dde
--- /dev/null
+++ b/vendor/github.com/tomnomnom/linkheader/.gitignore
@@ -0,0 +1,2 @@
+cpu.out
+linkheader.test
diff --git a/vendor/github.com/tomnomnom/linkheader/.travis.yml b/vendor/github.com/tomnomnom/linkheader/.travis.yml
new file mode 100644
index 0000000..cfda086
--- /dev/null
+++ b/vendor/github.com/tomnomnom/linkheader/.travis.yml
@@ -0,0 +1,6 @@
+language: go
+
+go:
+ - 1.6
+ - 1.7
+ - tip
diff --git a/vendor/github.com/tomnomnom/linkheader/CONTRIBUTING.mkd b/vendor/github.com/tomnomnom/linkheader/CONTRIBUTING.mkd
new file mode 100644
index 0000000..0339bec
--- /dev/null
+++ b/vendor/github.com/tomnomnom/linkheader/CONTRIBUTING.mkd
@@ -0,0 +1,10 @@
+# Contributing
+
+* Raise an issue if appropriate
+* Fork the repo
+* Bootstrap the dev dependencies (run `./script/bootstrap`)
+* Make your changes
+* Use [gofmt](https://golang.org/cmd/gofmt/)
+* Make sure the tests pass (run `./script/test`)
+* Make sure the linters pass (run `./script/lint`)
+* Issue a pull request
diff --git a/vendor/github.com/tomnomnom/linkheader/LICENSE b/vendor/github.com/tomnomnom/linkheader/LICENSE
new file mode 100644
index 0000000..55192df
--- /dev/null
+++ b/vendor/github.com/tomnomnom/linkheader/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2016 Tom Hudson
+
+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/vendor/github.com/tomnomnom/linkheader/README.mkd b/vendor/github.com/tomnomnom/linkheader/README.mkd
new file mode 100644
index 0000000..2a949ca
--- /dev/null
+++ b/vendor/github.com/tomnomnom/linkheader/README.mkd
@@ -0,0 +1,35 @@
+# Golang Link Header Parser
+
+Library for parsing HTTP Link headers. Requires Go 1.6 or higher.
+
+Docs can be found on [the GoDoc page](https://godoc.org/github.com/tomnomnom/linkheader).
+
+[![Build Status](https://travis-ci.org/tomnomnom/linkheader.svg)](https://travis-ci.org/tomnomnom/linkheader)
+
+## Basic Example
+
+```go
+package main
+
+import (
+ "fmt"
+
+ "github.com/tomnomnom/linkheader"
+)
+
+func main() {
+ header := "<https://api.github.com/user/58276/repos?page=2>; rel=\"next\"," +
+ "<https://api.github.com/user/58276/repos?page=2>; rel=\"last\""
+ links := linkheader.Parse(header)
+
+ for _, link := range links {
+ fmt.Printf("URL: %s; Rel: %s\n", link.URL, link.Rel)
+ }
+}
+
+// Output:
+// URL: https://api.github.com/user/58276/repos?page=2; Rel: next
+// URL: https://api.github.com/user/58276/repos?page=2; Rel: last
+```
+
+
diff --git a/vendor/github.com/tomnomnom/linkheader/main.go b/vendor/github.com/tomnomnom/linkheader/main.go
new file mode 100644
index 0000000..6b81321
--- /dev/null
+++ b/vendor/github.com/tomnomnom/linkheader/main.go
@@ -0,0 +1,151 @@
+// Package linkheader provides functions for parsing HTTP Link headers
+package linkheader
+
+import (
+ "fmt"
+ "strings"
+)
+
+// A Link is a single URL and related parameters
+type Link struct {
+ URL string
+ Rel string
+ Params map[string]string
+}
+
+// HasParam returns if a Link has a particular parameter or not
+func (l Link) HasParam(key string) bool {
+ for p := range l.Params {
+ if p == key {
+ return true
+ }
+ }
+ return false
+}
+
+// Param returns the value of a parameter if it exists
+func (l Link) Param(key string) string {
+ for k, v := range l.Params {
+ if key == k {
+ return v
+ }
+ }
+ return ""
+}
+
+// String returns the string representation of a link
+func (l Link) String() string {
+
+ p := make([]string, 0, len(l.Params))
+ for k, v := range l.Params {
+ p = append(p, fmt.Sprintf("%s=\"%s\"", k, v))
+ }
+ if l.Rel != "" {
+ p = append(p, fmt.Sprintf("%s=\"%s\"", "rel", l.Rel))
+ }
+ return fmt.Sprintf("<%s>; %s", l.URL, strings.Join(p, "; "))
+}
+
+// Links is a slice of Link structs
+type Links []Link
+
+// FilterByRel filters a group of Links by the provided Rel attribute
+func (l Links) FilterByRel(r string) Links {
+ links := make(Links, 0)
+ for _, link := range l {
+ if link.Rel == r {
+ links = append(links, link)
+ }
+ }
+ return links
+}
+
+// String returns the string representation of multiple Links
+// for use in HTTP responses etc
+func (l Links) String() string {
+ if l == nil {
+ return fmt.Sprint(nil)
+ }
+
+ var strs []string
+ for _, link := range l {
+ strs = append(strs, link.String())
+ }
+ return strings.Join(strs, ", ")
+}
+
+// Parse parses a raw Link header in the form:
+// <url>; rel="foo", <url>; rel="bar"; wat="dis"
+// returning a slice of Link structs
+func Parse(raw string) Links {
+ var links Links
+
+ // One chunk: <url>; rel="foo"
+ for _, chunk := range strings.Split(raw, ",") {
+
+ link := Link{URL: "", Rel: "", Params: make(map[string]string)}
+
+ // Figure out what each piece of the chunk is
+ for _, piece := range strings.Split(chunk, ";") {
+
+ piece = strings.Trim(piece, " ")
+ if piece == "" {
+ continue
+ }
+
+ // URL
+ if piece[0] == '<' && piece[len(piece)-1] == '>' {
+ link.URL = strings.Trim(piece, "<>")
+ continue
+ }
+
+ // Params
+ key, val := parseParam(piece)
+ if key == "" {
+ continue
+ }
+
+ // Special case for rel
+ if strings.ToLower(key) == "rel" {
+ link.Rel = val
+ } else {
+ link.Params[key] = val
+ }
+ }
+
+ if link.URL != "" {
+ links = append(links, link)
+ }
+ }
+
+ return links
+}
+
+// ParseMultiple is like Parse, but accepts a slice of headers
+// rather than just one header string
+func ParseMultiple(headers []string) Links {
+ links := make(Links, 0)
+ for _, header := range headers {
+ links = append(links, Parse(header)...)
+ }
+ return links
+}
+
+// parseParam takes a raw param in the form key="val" and
+// returns the key and value as seperate strings
+func parseParam(raw string) (key, val string) {
+
+ parts := strings.SplitN(raw, "=", 2)
+ if len(parts) == 1 {
+ return parts[0], ""
+ }
+ if len(parts) != 2 {
+ return "", ""
+ }
+
+ key = parts[0]
+ val = strings.Trim(parts[1], "\"")
+
+ return key, val
+
+}