package main
import (
"context"
"fmt"
"log"
"github.com/hastekit/hastekit-sdk-go/pkg/workflow"
)
// GreetNode reads "name" from the run context and emits a greeting.
type GreetNode struct {
workflow.BaseNode
}
func NewGreetNode() *GreetNode {
return &GreetNode{BaseNode: workflow.BaseNode{NodeType: "greet"}}
}
func (n *GreetNode) Validate() error { return nil }
func (n *GreetNode) Execute(ctx context.Context, in *workflow.Input) (map[string]any, string, error) {
name, _ := workflow.ResolvePath(in, "name")
output := map[string]any{"greeting": fmt.Sprintf("Hello, %v!", name)}
return output, workflow.DefaultPort, nil
}
func main() {
g := workflow.NewGraph("greeter")
g.AddNode("greet", NewGreetNode())
g.AddEdge(workflow.StartNode, "greet")
g.AddEdge("greet", workflow.EndNode)
out, err := g.Invoke(context.Background(), &workflow.Input{
RunContext: map[string]any{"name": "Ada"},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(out.RunContext["greeting"]) // Hello, Ada!
}