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

View file

@ -0,0 +1,74 @@
package generic
import (
"net/url"
"strings"
)
// Constants for character values and offsets.
const (
ExtraPrefixChar = '$' // Prefix for extra data in query parameters
HeaderPrefixChar = '@' // Prefix for header values in query parameters
CaseOffset = 'a' - 'A' // Offset between lowercase and uppercase letters
UppercaseA = 'A' // ASCII value for uppercase A
UppercaseZ = 'Z' // ASCII value for uppercase Z
DashChar = '-' // Dash character for header formatting
HeaderCapacityFactor = 2 // Estimated capacity multiplier for header string builder
)
func normalizedHeaderKey(key string) string {
stringBuilder := strings.Builder{}
stringBuilder.Grow(len(key) * HeaderCapacityFactor)
for i, c := range key {
if UppercaseA <= c && c <= UppercaseZ {
// Char is uppercase
if i > 0 && key[i-1] != DashChar {
// Add missing dash
stringBuilder.WriteRune(DashChar)
}
} else if i == 0 || key[i-1] == DashChar {
// First char, or previous was dash
c -= CaseOffset
}
stringBuilder.WriteRune(c)
}
return stringBuilder.String()
}
func appendCustomQueryValues(
query url.Values,
headers map[string]string,
extraData map[string]string,
) {
for key, value := range headers {
query.Set(string(HeaderPrefixChar)+key, value)
}
for key, value := range extraData {
query.Set(string(ExtraPrefixChar)+key, value)
}
}
func stripCustomQueryValues(query url.Values) (map[string]string, map[string]string) {
headers := make(map[string]string)
extraData := make(map[string]string)
for key, values := range query {
switch key[0] {
case HeaderPrefixChar:
headerKey := normalizedHeaderKey(key[1:])
headers[headerKey] = values[0]
case ExtraPrefixChar:
extraData[key[1:]] = values[0]
default:
continue
}
delete(query, key)
}
return headers, extraData
}