47 lines
766 B
Go
47 lines
766 B
Go
package builtins
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"strings"
|
|
|
|
"ucl.lmika.dev/ucl"
|
|
)
|
|
|
|
type LogMessageHandler func(s string) error
|
|
|
|
func Log(handler LogMessageHandler) ucl.Module {
|
|
if handler == nil {
|
|
handler = func(s string) error {
|
|
log.Println(s)
|
|
return nil
|
|
}
|
|
}
|
|
|
|
lh := logHandler{handler: handler}
|
|
|
|
return ucl.Module{
|
|
Name: "log",
|
|
Builtins: map[string]ucl.BuiltinHandler{
|
|
"puts": lh.logMessage,
|
|
},
|
|
}
|
|
}
|
|
|
|
type logHandler struct {
|
|
handler LogMessageHandler
|
|
}
|
|
|
|
func (lh logHandler) logMessage(ctx context.Context, args ucl.CallArgs) (any, error) {
|
|
var sb strings.Builder
|
|
var s ucl.Object
|
|
|
|
for args.NArgs() > 0 {
|
|
if err := args.Bind(&s); err != nil {
|
|
return nil, err
|
|
}
|
|
sb.WriteString(s.String())
|
|
}
|
|
return nil, lh.handler(sb.String())
|
|
}
|