ucl/ucl/builtins/log.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())
}