// Copyright (c) 2024-2026 Celestino Amoroso (celestino.amoroso@gmail.com).
// All rights reserved.

// bind-go-function.go
package kern

// ---- Linking with Go functions
type GolangFunctor struct {
	BaseFunctor
	f FuncTemplate
}

func NewGolangFunctor(f FuncTemplate) *GolangFunctor {
	return &GolangFunctor{f: f}
}

func (functor *GolangFunctor) TypeName() string {
	return "GoFunctor"
}

func (functor *GolangFunctor) InvokeNamed(ctx ExprContext, name string, args map[string]any) (result any, err error) {
	return functor.f(ctx, name, args)
}
