Generate Seq
This commit is contained in:
34
internal/bindgen/seq.go.tmpl
Normal file
34
internal/bindgen/seq.go.tmpl
Normal file
@ -0,0 +1,34 @@
|
||||
{{define "func"}}{{if gt . 1 -}}
|
||||
func Seq{{.}}[In, Out{{range .Count}}, T{{.}}{{end}} any](
|
||||
{{- range .Count}}
|
||||
p{{.}} Parser[In, T{{.}}],{{end}}
|
||||
f func({{range .Count}}{{if ne . 1}}, {{end}}T{{.}}{{end}}) Out,
|
||||
) Parser[In, Out] {
|
||||
return func(s State[In]) (Result[In, Out], error) {
|
||||
var anyConsumed bool
|
||||
var failed bool
|
||||
var msg Message
|
||||
var next = s
|
||||
{{range .Count}}
|
||||
r{{.}}, err := p{{.}}(next)
|
||||
if err != nil {
|
||||
return Result[In, Out]{}, err
|
||||
}
|
||||
anyConsumed = anyConsumed || r{{.}}.Consumed()
|
||||
failed, _, msg = r{{.}}.Failed()
|
||||
if failed {
|
||||
return Fail[In, Out](anyConsumed, msg), nil
|
||||
}
|
||||
_, _, val{{.}}, next, _ := r{{.}}.Succeeded()
|
||||
{{end}}
|
||||
final := f({{range .Count}}{{if ne . 1}}, {{end}}val{{.}}{{end}})
|
||||
return Succeed(anyConsumed, final, next, MessageOK(s.Pos())), nil
|
||||
}
|
||||
}{{end}}{{end -}}
|
||||
|
||||
// GENERATED FILE. DO NOT EDIT.
|
||||
|
||||
package {{.Package}}
|
||||
{{range .Count}}{{template "func" .}}
|
||||
|
||||
{{end}}
|
Reference in New Issue
Block a user