Files
qgo-server/vendor/github.com/dunglas/httpsfv/item.go
Smile Rex 6ace91a21a
All checks were successful
Create and publish a Docker image 🚀 / build-and-push-image (push) Successful in 1m49s
add vendor data
2026-03-10 01:11:41 +03:00

74 lines
1.2 KiB
Go

package httpsfv
import (
"strings"
)
// Item is a bare value and associated parameters.
// See https://httpwg.org/specs/rfc9651.html#item.
type Item struct {
Value interface{}
Params *Params
}
// NewItem returns a new Item.
func NewItem(v interface{}) Item {
assertBareItem(v)
return Item{v, NewParams()}
}
func (i Item) member() {
}
// marshalSFV serializes as defined in
// https://httpwg.org/specs/rfc9651.html#ser-item.
func (i Item) marshalSFV(b *strings.Builder) error {
if i.Value == nil {
return ErrInvalidBareItem
}
if err := marshalBareItem(b, i.Value); err != nil {
return err
}
return i.Params.marshalSFV(b)
}
// UnmarshalItem parses an item as defined in
// https://httpwg.org/specs/rfc9651.html#parse-item.
func UnmarshalItem(v []string) (Item, error) {
s := &scanner{
data: strings.Join(v, ","),
}
s.scanWhileSp()
sfv, err := parseItem(s)
if err != nil {
return Item{}, err
}
s.scanWhileSp()
if !s.eof() {
return Item{}, &UnmarshalError{off: s.off}
}
return sfv, nil
}
func parseItem(s *scanner) (Item, error) {
bi, err := parseBareItem(s)
if err != nil {
return Item{}, err
}
p, err := parseParams(s)
if err != nil {
return Item{}, err
}
return Item{bi, p}, nil
}