Initial QSfera import
This commit is contained in:
+52
@@ -0,0 +1,52 @@
|
||||
package jws
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func (h *stdHeaders) Copy(dst Headers) error {
|
||||
for _, k := range h.Keys() {
|
||||
var v any
|
||||
if err := h.Get(k, &v); err != nil {
|
||||
return fmt.Errorf(`failed to get header %q: %w`, k, err)
|
||||
}
|
||||
if err := dst.Set(k, v); err != nil {
|
||||
return fmt.Errorf(`failed to set header %q: %w`, k, err)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// mergeHeaders merges two headers, and works even if the first Header
|
||||
// object is nil. This is not exported because ATM it felt like this
|
||||
// function is not frequently used, and MergeHeaders seemed a clunky name
|
||||
func mergeHeaders(h1, h2 Headers) (Headers, error) {
|
||||
h3 := NewHeaders()
|
||||
|
||||
if h1 != nil {
|
||||
if err := h1.Copy(h3); err != nil {
|
||||
return nil, fmt.Errorf(`failed to copy headers from first Header: %w`, err)
|
||||
}
|
||||
}
|
||||
|
||||
if h2 != nil {
|
||||
if err := h2.Copy(h3); err != nil {
|
||||
return nil, fmt.Errorf(`failed to copy headers from second Header: %w`, err)
|
||||
}
|
||||
}
|
||||
|
||||
return h3, nil
|
||||
}
|
||||
|
||||
func (h *stdHeaders) Merge(h2 Headers) (Headers, error) {
|
||||
return mergeHeaders(h, h2)
|
||||
}
|
||||
|
||||
// Clone creates a deep copy of the header
|
||||
func (h *stdHeaders) Clone() (Headers, error) {
|
||||
dst := NewHeaders()
|
||||
if err := h.Copy(dst); err != nil {
|
||||
return nil, fmt.Errorf(`failed to copy header: %w`, err)
|
||||
}
|
||||
return dst, nil
|
||||
}
|
||||
Reference in New Issue
Block a user