main API

main

package

API reference for the main package.

F
function

main

examples/advanced/main.go:11-57
func main()

{
	wf := workflow.New()

	wf.Add("Flaky API",
		workflow.WithRetry(workflow.RetryPolicy{MaxAttempts: 3, Delay: 100 * time.Millisecond},
			func(ctx context.Context) error {
				fmt.Println("Trying API...")
				return nil
			},
		),
		nil,
	)

	group := workflow.Group{
		workflow.Step{
			Name: "Upload Image",
			Do: func(ctx context.Context) error {
				fmt.Println("Uploading Image...")
				time.Sleep(500 * time.Millisecond)
				return nil
			},
			Compensate: func(ctx context.Context) error {
				fmt.Println("Undo: Delete Image")
				return nil
			},
		},
		workflow.Step{
			Name: "Upload Thumbnail",
			Do: func(ctx context.Context) error {
				fmt.Println("Uploading Thumb...")
				return nil
			},
			Compensate: func(ctx context.Context) error {
				fmt.Println("Undo: Delete Thumb")
				return nil
			},
		},
	}
	wf.AddGroup(group)

	fmt.Println("--- Starting Advanced Saga ---")
	if err := wf.Run(context.Background()); err != nil {
		fmt.Printf("Failed: %v\n", err)
	} else {
		fmt.Println("--- Success ---")
	}
}
F
function

main

examples/basic/main.go:10-41
func main()

{
	wf := workflow.New()

	wf.Add("Reserve Stock",
		func(ctx context.Context) error {
			fmt.Println("Step 1: Reserving Stock...")
			return nil
		},
		func(ctx context.Context) error {
			fmt.Println("Undo 1: Releasing Stock")
			return nil
		},
	)

	wf.Add("Charge Card",
		func(ctx context.Context) error {
			fmt.Println("Step 2: Charging Card...")
			return fmt.Errorf("insufficient funds")
		},
		func(ctx context.Context) error {
			fmt.Println("Undo 2: Refund Card")
			return nil
		},
	)

	fmt.Println("Starting Workflow...")
	if err := wf.Run(context.Background()); err != nil {
		fmt.Printf("Workflow failed: %v\n", err)
	} else {
		fmt.Println("Workflow completed successfully!")
	}
}