Adding upstream version 0.8.9.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
3b2c48b5e4
commit
c0c4addb85
285 changed files with 25880 additions and 0 deletions
84
pkg/format/urlpart.go
Normal file
84
pkg/format/urlpart.go
Normal file
|
@ -0,0 +1,84 @@
|
|||
//go:generate stringer -type=URLPart -trimprefix URL
|
||||
|
||||
package format
|
||||
|
||||
import (
|
||||
"log"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// URLPart is an indicator as to what part of an URL a field is serialized to.
|
||||
type URLPart int
|
||||
|
||||
// Suffix returns the separator between the URLPart and its subsequent part.
|
||||
func (u URLPart) Suffix() rune {
|
||||
switch u {
|
||||
case URLQuery:
|
||||
return '/'
|
||||
case URLUser:
|
||||
return ':'
|
||||
case URLPassword:
|
||||
return '@'
|
||||
case URLHost:
|
||||
return ':'
|
||||
case URLPort:
|
||||
return '/'
|
||||
case URLPath:
|
||||
return '/'
|
||||
default:
|
||||
return '/'
|
||||
}
|
||||
}
|
||||
|
||||
// indicator as to what part of an URL a field is serialized to.
|
||||
const (
|
||||
URLQuery URLPart = iota
|
||||
URLUser
|
||||
URLPassword
|
||||
URLHost
|
||||
URLPort
|
||||
URLPath // Base path; additional paths are URLPath + N
|
||||
)
|
||||
|
||||
// ParseURLPart returns the URLPart that matches the supplied string.
|
||||
func ParseURLPart(inputString string) URLPart {
|
||||
lowerString := strings.ToLower(inputString)
|
||||
switch lowerString {
|
||||
case "user":
|
||||
return URLUser
|
||||
case "pass", "password":
|
||||
return URLPassword
|
||||
case "host":
|
||||
return URLHost
|
||||
case "port":
|
||||
return URLPort
|
||||
case "path", "path1":
|
||||
return URLPath
|
||||
case "query", "":
|
||||
return URLQuery
|
||||
}
|
||||
|
||||
// Handle dynamic path segments (e.g., "path2", "path3", etc.).
|
||||
if strings.HasPrefix(lowerString, "path") && len(lowerString) > 4 {
|
||||
if num, err := strconv.Atoi(lowerString[4:]); err == nil && num >= 2 {
|
||||
return URLPath + URLPart(num-1) // Offset from URLPath; "path2" -> URLPath+1
|
||||
}
|
||||
}
|
||||
|
||||
log.Printf("invalid URLPart: %s, defaulting to URLQuery", lowerString)
|
||||
|
||||
return URLQuery
|
||||
}
|
||||
|
||||
// ParseURLParts returns the URLParts that matches the supplied string.
|
||||
func ParseURLParts(s string) []URLPart {
|
||||
rawParts := strings.Split(s, ",")
|
||||
urlParts := make([]URLPart, len(rawParts))
|
||||
|
||||
for i, raw := range rawParts {
|
||||
urlParts[i] = ParseURLPart(raw)
|
||||
}
|
||||
|
||||
return urlParts
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue