evcc-io/util/urlvalues/url.go

37 lines
753 B
Go

// Package urlvalues provides functions for working with url.Values
package urlvalues
import (
"errors"
"net/url"
"strings"
)
// Copy creates a deep copy of url values
func Copy(q url.Values) url.Values {
res := make(url.Values, len(q))
for k, v := range q {
res[k] = append([]string{}, v...)
}
return res
}
// Merge copies multiple from url values into to
func Merge(to url.Values, from ...url.Values) {
for _, vv := range from {
for k, v := range vv {
to[k] = append(to[k], v...)
}
}
}
// Require verifies that url contains the required non-nil values
func Require(q url.Values, keys ...string) error {
for _, k := range keys {
if strings.TrimSpace(q.Get(k)) == "" {
return errors.New("missing " + k)
}
}
return nil
}