39 lines
945 B
Go
39 lines
945 B
Go
|
package cmdlang
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
// Builtins used for test
|
||
|
func WithTestBuiltin() InstOption {
|
||
|
return func(i *Inst) {
|
||
|
i.rootEC.addCmd("firstarg", invokableFunc(func(ctx context.Context, args invocationArgs) (object, error) {
|
||
|
return args.args[0], nil
|
||
|
}))
|
||
|
|
||
|
i.rootEC.addCmd("pipe", invokableFunc(func(ctx context.Context, args invocationArgs) (object, error) {
|
||
|
return &listIterStream{
|
||
|
list: args.args,
|
||
|
}, nil
|
||
|
}))
|
||
|
|
||
|
i.rootEC.addCmd("joinpipe", invokableStreamFunc(func(ctx context.Context, inStream stream, args invocationArgs) (object, error) {
|
||
|
sb := strings.Builder{}
|
||
|
if err := forEach(inStream, func(o object, i int) error {
|
||
|
if i > 0 {
|
||
|
sb.WriteString(",")
|
||
|
}
|
||
|
sb.WriteString(o.String())
|
||
|
return nil
|
||
|
}); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return strObject(sb.String()), nil
|
||
|
}))
|
||
|
|
||
|
i.rootEC.setVar("a", strObject("alpha"))
|
||
|
i.rootEC.setVar("bee", strObject("buzz"))
|
||
|
}
|
||
|
}
|