main API

main

package

API reference for the main package.

S
struct

Document

examples/action/main.go:15-19
type Document struct

Methods

Save
Method

Returns

error
func (*Document) Save() error
{
	d.Dirty = false
	return nil
}

Fields

Name Type Description
Name string
Content string
Dirty bool
S
struct

SaveAction

examples/action/main.go:28-31
type SaveAction struct

Methods

Handle
Method

Parameters

Returns

any
error
func (*SaveAction) Handle(ctx context.Context) (any, error)
{
	if err := a.Document.Save(); err != nil {
		return nil, err
	}
	return map[string]string{"status": "saved", "file": a.Document.Name}, nil
}

Fields

Name Type Description
Meta core.Pattern action:"file.save" keys:"ctrl+s"
Document *Document
S
struct

NewFileAction

examples/action/main.go:40-43
type NewFileAction struct

Methods

Handle
Method

Parameters

Returns

any
error
func (*NewFileAction) Handle(ctx context.Context) (any, error)
{
	a.Document.Name = "Untitled"
	a.Document.Content = ""
	a.Document.Dirty = false
	return map[string]string{"status": "new file created"}, nil
}

Fields

Name Type Description
Meta core.Pattern action:"file.new" keys:"ctrl+n"
Document *Document
F
function

main

examples/action/main.go:54-90
func main()

{
	// Create document
	doc := &Document{Name: "test.txt", Content: "Hello World", Dirty: true}

	// Create action transport
	t := action.New()
	t.Logger = logger.NewSlog(slog.Default())

	// Register dependencies
	t.Provide("Document", doc)

	// Register actions
	t.Register(&SaveAction{})
	t.Register(&NewFileAction{})

	// Show registered actions
	fmt.Println("Registered actions:", t.Actions())
	fmt.Println("Key bindings:", t.KeyBindings())

	// Simulate user pressing Ctrl+S
	fmt.Println("\n--- Dispatching 'ctrl+s' ---")
	result, err := t.DispatchKey(context.Background(), "ctrl+s")
	if err != nil {
		slog.Error("dispatch failed", "error", err)
	} else {
		fmt.Printf("Result: %v\n", result)
	}

	// Simulate dispatching by action name
	fmt.Println("\n--- Dispatching 'file.new' ---")
	result, err = t.Dispatch(context.Background(), "file.new")
	if err != nil {
		slog.Error("dispatch failed", "error", err)
	} else {
		fmt.Printf("Result: %v\n", result)
	}
}
F
function

main

examples/basic/main.go:15-49
func main()

{
	metaFlag := flag.Bool("meta", false, "generate OpenAPI JSON and exit")
	flag.Parse()

	// Create endpoint prototype (for registration and swagger)
	pingEndpoint := &ping.PingEndpoint{}

	// Handle 'swagger' subcommand OR --meta flag
	if (len(os.Args) > 1 && os.Args[1] == "swagger") || *metaFlag {
		doc, err := swagger.Build("Example API", "1.0.0", pingEndpoint)
		if err != nil {
			fmt.Fprintf(os.Stderr, "swagger build error: %v\n", err)
			os.Exit(1)
		}
		fmt.Println(string(doc))
		os.Exit(0)
	}

	// Create router
	r := router.New()
	r.SetLogger(logger.NewSlog(slog.Default()))

	// Register dependencies (by field name)
	r.Provide("PingService", ping.NewPingService())

	// Register endpoints (explicit, no init() magic)
	r.Register(pingEndpoint)

	slog.Info("🚀 Server listening on :8080")
	slog.Info("Try: curl http://localhost:8080/api/v1/ping?times=3")

	if err := r.Listen(":8080"); err != nil {
		slog.Error("server terminated", "err", err)
	}
}
S
struct

OrderProcessed

Events

examples/integration/main.go:15-18
type OrderProcessed struct

Fields

Name Type Description
OrderID string
Status string
S
struct

CheckoutAction

Action Handler

examples/integration/main.go:21-24
type CheckoutAction struct

Methods

Handle
Method

Parameters

Returns

any
error
func (*CheckoutAction) Handle(ctx context.Context) (any, error)
{
	fmt.Printf("[Action] Starting checkout for order: %s\n", a.OrderID)

	// Create a reversible workflow
	wf := engine.New()
	wf.Add(&step.Basic{
		Name: "Reserve Items",
		OnExecute: func(ctx context.Context) error {
			fmt.Println("  [Workflow] Items reserved.")
			return nil
		},
		OnUndo: func(ctx context.Context) error {
			fmt.Println("  [Workflow] Items released.")
			return nil
		},
	})

	wf.Add(&step.Basic{
		Name: "Process Payment",
		OnExecute: func(ctx context.Context) error {
			fmt.Println("  [Workflow] Payment processed.")
			return nil
		},
		OnUndo: func(ctx context.Context) error {
			fmt.Println("  [Workflow] Payment refunded.")
			return nil
		},
	})

	if err := wf.Run(ctx); err != nil {
		return nil, err
	}

	return map[string]string{"status": "completed", "order_id": a.OrderID}, nil
}

Fields

Name Type Description
Meta router.Meta action:"order.checkout" keys:"ctrl+b"
OrderID string json:"order_id"
F
function

main

examples/integration/main.go:62-90
func main()

{
	r := router.New()

	// Subscribe to OrderProcessed events using the Default Bus (passing nil as bus)
	// The Action transport automatically emits events on this bus by default.
	bus.Subscribe(nil, func(ctx context.Context, e *CheckoutAction) error {
		fmt.Printf("[Signal] Async notification: Order %s was processed successfully!\n", e.OrderID)
		return nil
	})

	// Register Action
	r.RegisterAction(&CheckoutAction{})

	fmt.Println("--- Dispatching Checkout Action ---")
	// Passing payload as a map
	res, err := r.Dispatch(context.Background(), "order.checkout", map[string]any{
		"order_id": "ORD-2024-ABC",
	})
	if err != nil {
		fmt.Printf("Error: %v\n", err)
		return
	}

	fmt.Printf("Response: %v\n", res)

	// Wait a bit for async signals
	time.Sleep(500 * time.Millisecond)
	fmt.Println("Done.")
}