altair_concurrent/lib.rs
1//! Type-safe parallel execution of named async tasks.
2//!
3//! Provides a [`TaskMap`] for declaring named tasks and an [`execute_concurrently`]
4//! entry point that runs them on the tokio runtime with optional cancellation,
5//! timeout, and partial-results modes. Each task runs inside its own tracing
6//! span so it appears as a separate node in distributed traces.
7//!
8//! # Example
9//!
10//! ```no_run
11//! use altair_concurrent::{execute_concurrently, TaskMap};
12//!
13//! # async fn run() -> altair_concurrent::Result<()> {
14//! let tasks: TaskMap<String> = TaskMap::new()
15//! .insert("greet", |_| async { Ok::<_, std::io::Error>("hi".to_string()) });
16//! let results = execute_concurrently(tasks).await?;
17//! assert_eq!(results["greet"], "hi");
18//! # Ok(()) }
19//! ```
20
21#![deny(missing_docs)]
22#![forbid(unsafe_code)]
23#![warn(clippy::pedantic)]
24#![allow(clippy::module_name_repetitions)]
25#![allow(clippy::missing_errors_doc)]
26
27mod error;
28mod executor;
29mod task_map;
30
31pub mod prelude;
32
33pub use error::{Error, Result};
34pub use executor::{BoxedError, Executor, PartialExecutor, PartialResults, execute_concurrently};
35pub use task_map::TaskMap;
36
37// Re-exports for one-dep ergonomics
38pub use tokio::task::{JoinError, JoinSet};
39pub use tokio_util::sync::CancellationToken;