/
func.go
36 lines (29 loc) · 817 Bytes
/
func.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package script
import (
"go.starlark.net/starlark"
)
// Retval TODO
type Retval interface{}
// Func provides a simple wrapper that enables a golang function to be exposed to starlark.
type Func func(args ArgParser) (Retval, error)
// builtin wraps the Func and returns a starlark builtin
func (fn Func) builtin(name string) *starlark.Builtin {
return starlark.NewBuiltin(
name,
func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
parser, err := getParser(args, kwargs)
if err != nil {
return starlark.None, err
}
retval, err := fn(parser)
if err != nil {
return starlark.None, err
}
val, err := convertToStarlark(retval)
if err != nil {
return starlark.None, err
}
return val, nil
},
)
}