package httpsfv
import (
"errors"
"strings"
)
var ErrInvalidInnerListFormat = errors .New ("invalid inner list format" )
type InnerList struct {
Items []Item
Params *Params
}
func (il InnerList ) member () {
}
func (il InnerList ) marshalSFV (b *strings .Builder ) error {
if err := b .WriteByte ('(' ); err != nil {
return err
}
l := len (il .Items )
for i := 0 ; i < l ; i ++ {
if err := il .Items [i ].marshalSFV (b ); err != nil {
return err
}
if i != l -1 {
if err := b .WriteByte (' ' ); err != nil {
return err
}
}
}
if err := b .WriteByte (')' ); err != nil {
return err
}
return il .Params .marshalSFV (b )
}
func parseInnerList(s *scanner ) (InnerList , error ) {
if s .eof () || s .data [s .off ] != '(' {
return InnerList {}, &UnmarshalError {s .off , ErrInvalidInnerListFormat }
}
s .off ++
il := InnerList {nil , nil }
for !s .eof () {
s .scanWhileSp ()
if s .eof () {
return InnerList {}, &UnmarshalError {s .off , ErrInvalidInnerListFormat }
}
if s .data [s .off ] == ')' {
s .off ++
p , err := parseParams (s )
if err != nil {
return InnerList {}, err
}
il .Params = p
return il , nil
}
i , err := parseItem (s )
if err != nil {
return InnerList {}, err
}
if s .eof () || (s .data [s .off ] != ')' && s .data [s .off ] != ' ' ) {
return InnerList {}, &UnmarshalError {s .off , ErrInvalidInnerListFormat }
}
il .Items = append (il .Items , i )
}
return InnerList {}, &UnmarshalError {s .off , ErrInvalidInnerListFormat }
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .