Open dolmen opened 5 days ago
Related Issues
(Emoji vote if this was helpful or unhelpful; more detailed feedback welcome in this discussion.)
Note that generic functions can also be written outside the package so the Decoder
methods would be purely to allow "native" range-over-func support:
func IterTokens[Token any, Tokenizer interface{ Token() (Token, error) }](tok Tokenizer) iter.Seq2[Token, error] {
return func(yield func(Token, error) bool) {
for {
token, err := tok.Token()
if err == io.EOF {
break
}
if !yield(token, err) {
break
}
}
}
}
func IterRawTokens[Token any, Tokenizer interface{ RawToken() (Token, error) }](tok Tokenizer) iter.Seq2[Token, error] {
return func(yield func(Token, error) bool) {
for {
token, err := tok.RawToken()
if err == io.EOF {
break
}
if !yield(token, err) {
break
}
}
}
}
Proposal Details
Add
iter.Seq2
iterator methods onencoding/xml.Decoder
to iter over tokens and raw tokens.Note: I'm not yet sure to like an iterator that handles a stream error this way.
Related:
66626