dag-executor 0.1.0

A production-ready DAG executor with state management and advanced patterns
Documentation
//! # dag-executor
//!
//! A production-ready DAG (directed acyclic graph) executor with stateful task
//! execution, file-based persistence and recovery, advanced workflow patterns
//! (conditional, fan-out/fan-in, loops, event-driven), and fault-tolerance
//! primitives (circuit breaker, retries, dead-letter queue).
//!
//! ## Quick start
//!
//! ```no_run
//! use std::sync::Arc;
//! use dag_executor::prelude::*;
//!
//! # async fn run() -> anyhow::Result<()> {
//! let mut dag = Dag::new();
//! dag.add_task(Arc::new(BasicTask::new("a", |_ctx| async { Ok(serde_json::json!(1)) })))?;
//! dag.add_task(Arc::new(
//!     BasicTask::new("b", |_ctx| async { Ok(serde_json::json!(2)) }).with_deps(["a"]),
//! ))?;
//!
//! let executor = DagExecutor::builder().build();
//! let report = executor.run(dag).await?;
//! assert!(report.is_success());
//! # Ok(())
//! # }
//! ```
//!
//! See the [`prelude`] module for the most commonly used types.
#![cfg_attr(docsrs, feature(doc_cfg))]
#![warn(missing_docs)]
#![warn(rustdoc::broken_intra_doc_links)]

pub mod advanced;
pub mod context;
pub mod dag;
pub mod error;
pub mod metrics;
pub mod state;
pub mod storage;
pub mod tasks;
pub mod utils;

/// Common imports for working with the executor.
pub mod prelude {
    pub use crate::advanced::{
        patterns, Backoff, CircuitBreaker, CircuitState, DeadLetterQueue, RetryPolicy,
    };
    pub use crate::context::Context;
    pub use crate::dag::{Dag, DagExecutor, DagExecutorBuilder, ExecutionReport};
    pub use crate::error::{DagExecutorError, Result, StorageError, TaskError, ValidationError};
    pub use crate::state::{TaskRecord, TaskState};
    pub use crate::storage::{Cache, FileStorage, MemoryStorage, Storage};
    pub use crate::tasks::{
        BasicTask, ConditionalTask, EventDrivenTask, LoopTask, StatefulTask, Task,
    };
    pub use crate::utils::Config;
}