package parser
import (
)
type StreamingParser struct {
pool.Reader
}
func ( pool.Reader) StreamingParser {
return StreamingParser{
Reader: ,
}
}
func ( StreamingParser) ( byte) error {
, := .ReadByte()
if != nil {
return
}
if == {
return nil
}
_ = .UnreadByte()
return fmt.Errorf("got %q, wanted %q", , )
}
func ( StreamingParser) ( []byte) ([]byte, error) {
, := .ReadByte()
if != nil {
return ,
}
for {
if == '"' {
return , nil
}
, := .ReadByte()
if != nil {
return ,
}
if == '\\' {
switch {
case '\\', '"':
= append(, )
, = .ReadByte()
if != nil {
return nil,
}
default:
= append(, '\\')
=
}
continue
}
= append(, )
=
}
}