error_rail/
prelude_async.rs

1//! Async prelude - all async utilities in one import.
2//!
3//! This module provides all the async-related items needed for async error handling.
4//! It re-exports everything from the sync [`prelude`](crate::prelude) plus async-specific items.
5//!
6//! # Usage
7//!
8//! ```rust,no_run
9//! use error_rail::prelude_async::*;
10//!
11//! #[derive(Debug)]
12//! struct User;
13//!
14//! #[derive(Debug)]
15//! struct ApiError;
16//!
17//! async fn fetch_from_db(_id: u64) -> Result<User, ApiError> {
18//!     Err(ApiError)
19//! }
20//!
21//! async fn fetch_user(id: u64) -> BoxedResult<User, ApiError> {
22//!     fetch_from_db(id)
23//!         .ctx("fetching user from database")
24//!         .await
25//!         .map_err(Box::new)
26//! }
27//! ```
28//!
29//! # What's Included
30//!
31//! ## From Sync Prelude
32//!
33//! - **Macros**: [`context!`], [`group!`], [`rail!`], [`rail_unboxed!`]
34//! - **Types**: [`ComposableError`], [`ErrorContext`], [`ErrorPipeline`]
35//! - **Traits**: [`ResultExt`], [`BoxedResultExt`], [`IntoErrorContext`]
36//! - **Type Alias**: [`BoxedResult`]
37//!
38//! ## Async-Specific
39//!
40//! - **Traits**: [`FutureResultExt`](crate::async_ext::FutureResultExt) - `.ctx()` and `.with_ctx()` for futures
41//! - **Types**: [`AsyncErrorPipeline`](crate::async_ext::AsyncErrorPipeline), [`ContextFuture`](crate::async_ext::ContextFuture)
42//! - **Macros**: [`rail_async!`], [`ctx_async!`]
43//!
44//! ## Async Retry (requires `async` feature)
45//!
46//! - **Traits**: [`RetryPolicy`](crate::async_ext::RetryPolicy)
47//! - **Types**: [`ExponentialBackoff`](crate::async_ext::ExponentialBackoff), [`FixedDelay`](crate::async_ext::FixedDelay)
48//! - **Functions**: [`retry_with_policy`](crate::async_ext::retry_with_policy)
49//!
50//! ## Async Validation (requires `async` feature)
51//!
52//! - **Functions**: [`validate_all_async`](crate::async_ext::validate_all_async), [`validate_seq_async`](crate::async_ext::validate_seq_async)
53//!
54//! ## Tokio Integration (requires `ecosystem` feature)
55//!
56//! - **Functions**: [`retry_transient`](crate::async_ext::retry_transient), [`retry_transient_n`](crate::async_ext::retry_transient_n), [`try_with_timeout`](crate::async_ext::try_with_timeout)
57//! - **Types**: [`TimeoutResult`](crate::async_ext::TimeoutResult), [`TimeoutError`](crate::async_ext::TimeoutError)
58//!
59//! ## Tracing Integration (requires `tracing` feature)
60//!
61//! - **Traits**: [`FutureSpanExt`](crate::async_ext::FutureSpanExt), [`ResultSpanExt`](crate::async_ext::ResultSpanExt)
62//! - **Functions**: [`instrument_error`](crate::async_ext::instrument_error)
63
64// Re-export everything from sync prelude
65pub use crate::prelude::*;
66
67// Async-specific exports
68#[cfg(feature = "async")]
69pub use crate::async_ext::{AsyncErrorPipeline, ContextFuture, FutureResultExt};
70
71#[cfg(feature = "async")]
72pub use crate::{ctx_async, rail_async};
73
74// Async retry exports
75#[cfg(feature = "async")]
76pub use crate::async_ext::{
77    retry_with_metadata, retry_with_policy, ExponentialBackoff, FixedDelay, RetryPolicy,
78    RetryResult,
79};
80
81// Async validation exports
82#[cfg(feature = "async")]
83pub use crate::async_ext::{validate_all_async, validate_seq_async};
84
85// Tokio integration exports
86#[cfg(feature = "tokio")]
87pub use crate::async_ext::{
88    retry_transient, retry_transient_n, try_with_timeout, TimeoutError, TimeoutResult,
89};
90
91// Tracing integration exports
92#[cfg(feature = "tracing")]
93pub use crate::async_ext::{instrument_error, FutureSpanExt, ResultSpanExt, SpanContextFuture};