wfe (1.0.0)
Installation
[registry]
default = "gitea"
[registries.gitea]
index = "sparse+ " # Sparse index
# index = " " # Git
[net]
git-fetch-with-cli = truecargo add wfe@1.0.0About this package
WFE workflow engine - umbrella crate
wfe
The umbrella crate for the WFE workflow engine.
What it does
wfe provides WorkflowHost, the main orchestrator that ties persistence, locking, queuing, and step execution into a single runtime. It re-exports everything from wfe-core so downstream code only needs one dependency. Register workflow definitions, start instances, publish events, suspend/resume/terminate -- all through WorkflowHost.
Quick start
use std::sync::Arc;
use wfe::{WorkflowHostBuilder, WorkflowHost};
// Build a host with your providers.
let host = WorkflowHostBuilder::new()
.use_persistence(persistence)
.use_lock_provider(lock_provider)
.use_queue_provider(queue_provider)
.build()
.unwrap();
// Register a workflow definition.
host.register_workflow::<serde_json::Value>(
&|builder| {
builder
.start_with::<MyStep>()
.name("do the thing")
.end_workflow()
},
"my-workflow",
1,
).await;
// Register custom steps.
host.register_step::<MyStep>().await;
// Start the background consumers.
host.start().await.unwrap();
// Launch a workflow instance.
let id = host.start_workflow("my-workflow", 1, serde_json::json!({})).await.unwrap();
// Publish an event to resume a waiting workflow.
host.publish_event("approval", "order-123", serde_json::json!({"approved": true})).await.unwrap();
Synchronous runner (testing)
run_workflow_sync starts a workflow and polls until it completes or times out. Useful in integration tests.
use std::time::Duration;
use wfe::run_workflow_sync;
let result = run_workflow_sync(&host, "my-workflow", 1, data, Duration::from_secs(5)).await?;
assert_eq!(result.status, wfe::models::WorkflowStatus::Complete);
API
| Type | Description |
|---|---|
WorkflowHost |
Main orchestrator. Registers workflows/steps, starts instances, publishes events, manages lifecycle. |
WorkflowHostBuilder |
Fluent builder for WorkflowHost. Requires persistence, lock provider, and queue provider. Optionally accepts lifecycle publisher and search index. |
InMemoryWorkflowRegistry |
In-memory WorkflowRegistry implementation. Stores definitions keyed by (id, version). |
run_workflow_sync |
Async helper that starts a workflow and polls until completion or timeout. |
purge_workflows |
Cleanup utility for removing completed workflow data from persistence. |
Everything from wfe-core is re-exported: WorkflowBuilder, StepBody, ExecutionResult, models, traits, and primitives.
Features
| Feature | Description |
|---|---|
otel |
Enables OpenTelemetry tracing. Pulls in opentelemetry, opentelemetry_sdk, opentelemetry-otlp, and tracing-opentelemetry. Also enables wfe-core/otel. |
Testing
cargo test -p wfe
Tests use wfe-sqlite and wfe-core/test-support for in-memory persistence. No external services required.
License
MIT
Dependencies
| ID | Version |
|---|---|
| async-trait | ^0.1 |
| chrono | ^0.4 |
| opentelemetry | ^0.27 |
| opentelemetry-otlp | ^0.27 |
| opentelemetry_sdk | ^0.27 |
| serde | ^1 |
| serde_json | ^1 |
| thiserror | ^2 |
| tokio | ^1 |
| tokio-util | ^0.7 |
| tracing | ^0.1 |
| tracing-opentelemetry | ^0.28 |
| tracing-subscriber | ^0.3 |
| uuid | ^1 |
| wfe-core | ^1.0.0 |
| pretty_assertions | ^1 |
| rstest | ^0.23 |
| tokio | ^1 |
| wfe-core | ^1.0.0 |
| wfe-sqlite | ^1.0.0 |
| wiremock | ^0.6 |
Details
Assets (1)
Versions (2)
View all
wfe-1.0.0.crate
40 KiB