Files
QSfera/Server/vendor/github.com/lestrrat-go/jwx/v3/jws/headers.go
T
Курнат Андрей 2315f25754 Initial QSfera import
2026-06-07 10:20:04 +03:00

53 lines
1.2 KiB
Go

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
}