1
0
Fork 0

Adding upstream version 0.8.9.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-05-22 10:16:14 +02:00
parent 3b2c48b5e4
commit c0c4addb85
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
285 changed files with 25880 additions and 0 deletions

84
pkg/format/urlpart.go Normal file
View 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
}