Skip to content

Commit

Permalink
gojqextra: Simplify function type helpers
Browse files Browse the repository at this point in the history
No need for env to be a function
  • Loading branch information
wader committed Jul 16, 2022
1 parent 361cb48 commit 9b2e474
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 29 deletions.
48 changes: 24 additions & 24 deletions internal/gojqextra/makefn_gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,23 @@ import (
"github.com/wader/gojq"
)

func Func0[Tenv any, Tc any](name string, fn func(e Tenv, c Tc) any) func(envFn func() Tenv) Function {
return func(envFn func() Tenv) Function {
func Func0[Tenv any, Tc any](name string, fn func(e Tenv, c Tc) any) func(env Tenv) Function {
return func(env Tenv) Function {
f := Function{Name: name, MinArity: 0, MaxArity: 0}
f.FuncFn = func(c any, a []any) any {
cv, ok := CastFn[Tc](c, mapstruct.ToStruct)
if !ok {
return FuncTypeError{Name: name, V: c}
}

return fn(envFn(), cv)
return fn(env, cv)
}
return f
}
}

func Func1[Tenv any, Tc any, Ta0 any](name string, fn func(e Tenv, c Tc, a0 Ta0) any) func(envFn func() Tenv) Function {
return func(envFn func() Tenv) Function {
func Func1[Tenv any, Tc any, Ta0 any](name string, fn func(e Tenv, c Tc, a0 Ta0) any) func(env Tenv) Function {
return func(env Tenv) Function {
f := Function{Name: name, MinArity: 1, MaxArity: 1}
f.FuncFn = func(c any, a []any) any {
cv, ok := CastFn[Tc](c, mapstruct.ToStruct)
Expand All @@ -34,14 +34,14 @@ func Func1[Tenv any, Tc any, Ta0 any](name string, fn func(e Tenv, c Tc, a0 Ta0)
return FuncArgTypeError{Name: name, ArgName: "first", V: a[0]}
}

return fn(envFn(), cv, a0)
return fn(env, cv, a0)
}
return f
}
}

func Func2[Tenv any, Tc any, Ta0 any, Ta1 any](name string, fn func(e Tenv, c Tc, a0 Ta0, a1 Ta1) any) func(envFn func() Tenv) Function {
return func(envFn func() Tenv) Function {
func Func2[Tenv any, Tc any, Ta0 any, Ta1 any](name string, fn func(e Tenv, c Tc, a0 Ta0, a1 Ta1) any) func(env Tenv) Function {
return func(env Tenv) Function {
f := Function{Name: name, MinArity: 2, MaxArity: 2}
f.FuncFn = func(c any, a []any) any {
cv, ok := CastFn[Tc](c, mapstruct.ToStruct)
Expand All @@ -57,14 +57,14 @@ func Func2[Tenv any, Tc any, Ta0 any, Ta1 any](name string, fn func(e Tenv, c Tc
return FuncArgTypeError{Name: name, ArgName: "second", V: a[1]}
}

return fn(envFn(), cv, a0, a1)
return fn(env, cv, a0, a1)
}
return f
}
}

func Func3[Tenv any, Tc any, Ta0 any, Ta1 any, Ta2 any](name string, fn func(e Tenv, c Tc, a0 Ta0, a1 Ta1, a2 Ta2) any) func(envFn func() Tenv) Function {
return func(envFn func() Tenv) Function {
func Func3[Tenv any, Tc any, Ta0 any, Ta1 any, Ta2 any](name string, fn func(e Tenv, c Tc, a0 Ta0, a1 Ta1, a2 Ta2) any) func(env Tenv) Function {
return func(env Tenv) Function {
f := Function{Name: name, MinArity: 3, MaxArity: 3}
f.FuncFn = func(c any, a []any) any {
cv, ok := CastFn[Tc](c, mapstruct.ToStruct)
Expand All @@ -84,29 +84,29 @@ func Func3[Tenv any, Tc any, Ta0 any, Ta1 any, Ta2 any](name string, fn func(e T
return FuncArgTypeError{Name: name, ArgName: "third", V: a[2]}
}

return fn(envFn(), cv, a0, a1, a2)
return fn(env, cv, a0, a1, a2)
}
return f
}
}

func Iter0[Tenv any, Tc any](name string, fn func(e Tenv, c Tc) gojq.Iter) func(envFn func() Tenv) Function {
return func(envFn func() Tenv) Function {
func Iter0[Tenv any, Tc any](name string, fn func(e Tenv, c Tc) gojq.Iter) func(env Tenv) Function {
return func(env Tenv) Function {
f := Function{Name: name, MinArity: 0, MaxArity: 0}
f.IterFn = func(c any, a []any) gojq.Iter {
cv, ok := CastFn[Tc](c, mapstruct.ToStruct)
if !ok {
return gojq.NewIter(FuncTypeError{Name: name, V: c})
}

return fn(envFn(), cv)
return fn(env, cv)
}
return f
}
}

func Iter1[Tenv any, Tc any, Ta0 any](name string, fn func(e Tenv, c Tc, a0 Ta0) gojq.Iter) func(envFn func() Tenv) Function {
return func(envFn func() Tenv) Function {
func Iter1[Tenv any, Tc any, Ta0 any](name string, fn func(e Tenv, c Tc, a0 Ta0) gojq.Iter) func(env Tenv) Function {
return func(env Tenv) Function {
f := Function{Name: name, MinArity: 1, MaxArity: 1}
f.IterFn = func(c any, a []any) gojq.Iter {
cv, ok := CastFn[Tc](c, mapstruct.ToStruct)
Expand All @@ -118,14 +118,14 @@ func Iter1[Tenv any, Tc any, Ta0 any](name string, fn func(e Tenv, c Tc, a0 Ta0)
return gojq.NewIter(FuncArgTypeError{Name: name, ArgName: "first", V: a[0]})
}

return fn(envFn(), cv, a0)
return fn(env, cv, a0)
}
return f
}
}

func Iter2[Tenv any, Tc any, Ta0 any, Ta1 any](name string, fn func(e Tenv, c Tc, a0 Ta0, a1 Ta1) gojq.Iter) func(envFn func() Tenv) Function {
return func(envFn func() Tenv) Function {
func Iter2[Tenv any, Tc any, Ta0 any, Ta1 any](name string, fn func(e Tenv, c Tc, a0 Ta0, a1 Ta1) gojq.Iter) func(env Tenv) Function {
return func(env Tenv) Function {
f := Function{Name: name, MinArity: 2, MaxArity: 2}
f.IterFn = func(c any, a []any) gojq.Iter {
cv, ok := CastFn[Tc](c, mapstruct.ToStruct)
Expand All @@ -141,14 +141,14 @@ func Iter2[Tenv any, Tc any, Ta0 any, Ta1 any](name string, fn func(e Tenv, c Tc
return gojq.NewIter(FuncArgTypeError{Name: name, ArgName: "second", V: a[1]})
}

return fn(envFn(), cv, a0, a1)
return fn(env, cv, a0, a1)
}
return f
}
}

func Iter3[Tenv any, Tc any, Ta0 any, Ta1 any, Ta2 any](name string, fn func(e Tenv, c Tc, a0 Ta0, a1 Ta1, a2 Ta2) gojq.Iter) func(envFn func() Tenv) Function {
return func(envFn func() Tenv) Function {
func Iter3[Tenv any, Tc any, Ta0 any, Ta1 any, Ta2 any](name string, fn func(e Tenv, c Tc, a0 Ta0, a1 Ta1, a2 Ta2) gojq.Iter) func(env Tenv) Function {
return func(env Tenv) Function {
f := Function{Name: name, MinArity: 3, MaxArity: 3}
f.IterFn = func(c any, a []any) gojq.Iter {
cv, ok := CastFn[Tc](c, mapstruct.ToStruct)
Expand All @@ -168,7 +168,7 @@ func Iter3[Tenv any, Tc any, Ta0 any, Ta1 any, Ta2 any](name string, fn func(e T
return gojq.NewIter(FuncArgTypeError{Name: name, ArgName: "third", V: a[2]})
}

return fn(envFn(), cv, a0, a1, a2)
return fn(env, cv, a0, a1, a2)
}
return f
}
Expand Down
6 changes: 3 additions & 3 deletions internal/gojqextra/makefn_gen.go.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import (
{{- range $fn := slice (map "name" "Func" "type" "any" "field" "FuncFn") (map "name" "Iter" "type" "gojq.Iter" "field" "IterFn") }}
{{- range $args := xrange 0 4}}

func {{$fn.name}}{{$args}}[Tenv any, Tc any{{range $i := xrange 0 $args}}, Ta{{$i}} any{{end}}](name string, fn func(e Tenv, c Tc{{range $i := xrange 0 $args}}, a{{$i}} Ta{{$i}}{{end}}) {{$fn.type}}) func(envFn func() Tenv) Function {
return func(envFn func() Tenv) Function {
func {{$fn.name}}{{$args}}[Tenv any, Tc any{{range $i := xrange 0 $args}}, Ta{{$i}} any{{end}}](name string, fn func(e Tenv, c Tc{{range $i := xrange 0 $args}}, a{{$i}} Ta{{$i}}{{end}}) {{$fn.type}}) func(env Tenv) Function {
return func(env Tenv) Function {
f := Function{Name: name, MinArity: {{$args}}, MaxArity: {{$args}}}
f.{{$fn.field}} = func(c any, a []any) {{$fn.type}} {
cv, ok := CastFn[Tc](c, mapstruct.ToStruct)
Expand All @@ -32,7 +32,7 @@ import (
}
{{- end}}

return fn(envFn(), cv{{range $i := xrange 0 $args}}, a{{$i}}{{end}})
return fn(env, cv{{range $i := xrange 0 $args}}, a{{$i}}{{end}})
}
return f
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/interp/interp.go
Original file line number Diff line number Diff line change
Expand Up @@ -768,7 +768,7 @@ func (i *Interp) Eval(ctx context.Context, c any, expr string, opts EvalOpts) (g
var funcCompilerOpts []gojq.CompilerOption

for _, fn := range i.Registry.EnvFuncFns {
f := fn(func() *Interp { return ni })
f := fn(ni)
if f.IterFn != nil {
funcCompilerOpts = append(funcCompilerOpts,
gojq.WithIterFunction(f.Name, f.MinArity, f.MaxArity, f.IterFn))
Expand Down
2 changes: 1 addition & 1 deletion pkg/interp/registry.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import (
"github.com/wader/fq/pkg/decode"
)

type EnvFuncFn func(envFn func() *Interp) gojqextra.Function
type EnvFuncFn func(env *Interp) gojqextra.Function

type Registry struct {
Groups map[string]decode.Group
Expand Down

0 comments on commit 9b2e474

Please sign in to comment.