package httpsfv import ( "errors" "io" ) // ErrInvalidBooleanFormat is returned when a boolean format is invalid. var ErrInvalidBooleanFormat = errors.New("invalid boolean format") // marshalBoolean serializes as defined in // https://httpwg.org/specs/rfc9651.html#ser-boolean. func marshalBoolean(bd io.StringWriter, b bool) error { if b { _, err := bd.WriteString("?1") return err } _, err := bd.WriteString("?0") return err } // parseBoolean parses as defined in // https://httpwg.org/specs/rfc9651.html#parse-boolean. func parseBoolean(s *scanner) (bool, error) { if s.eof() || s.data[s.off] != '?' { return false, &UnmarshalError{s.off, ErrInvalidBooleanFormat} } s.off++ if s.eof() { return false, &UnmarshalError{s.off, ErrInvalidBooleanFormat} } switch s.data[s.off] { case '0': s.off++ return false, nil case '1': s.off++ return true, nil } return false, &UnmarshalError{s.off, ErrInvalidBooleanFormat} }