1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*******************************************************************************
*
* Copyright (c) 2025 - 2026 Haixing Hu.
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0.
*
******************************************************************************/
//! Type-preserving retry policy for synchronous and asynchronous operations.
//!
//! `Retry<E>` binds only the operation error type. The success type `T` is
//! introduced on `run` / `run_async`, so normal error retry does not require
//! `T: Clone + Eq + Hash`.
//!
//! The default error type is `BoxError` from the `qubit-error` crate. It is not
//! re-exported by this crate; callers that need the boxed error alias should
//! import it from `qubit-error` directly.
//!
//! The public workflow is intentionally small:
//!
//! 1. Build a [`Retry`] policy with [`Retry::builder`] or
//! [`Retry::from_options`].
//! 2. Choose the execution mode:
//! - [`Retry::run`] for low-overhead same-thread synchronous work.
//! - `Retry::run_async` for Tokio futures and async timeouts when the
//! `tokio` feature is enabled.
//! - [`Retry::run_in_worker`] for blocking work that needs panic capture,
//! timeout waiting, or cooperative cancellation.
//! 3. Inspect [`RetryError`] when the flow stops. It keeps the terminal reason,
//! the last observed [`AttemptFailure`], and the final [`RetryContext`].
//!
//! Internally, `Retry` stays a facade. Options, event dispatch, flow state,
//! failure policy, and execution loops live in separate objects so each piece
//! owns one retry concern.
pub use ;
pub use ;
pub use ;
pub use RetryConfigValues;
pub use ;