turboclaude_core/
lib.rs

1#![deny(unsafe_code)]
2#![warn(missing_docs)]
3
4//! Core abstractions for the TurboClaude ecosystem.
5//!
6//! This crate provides foundational traits and utilities that are shared
7//! across all TurboClaude crates, enabling:
8//!
9//! - **Universal retry strategies** via `BackoffStrategy` trait
10//!   - Exponential backoff with jitter
11//!   - Custom retry predicates
12//!   - Circuit breaker support (future)
13//! - **Consistent resource lifecycle management** via `Resource<T>` and `LazyResource<T>`
14//! - **Declarative error boundaries** via `error_boundary!` macro
15//! - **Standardized serialization** via `SerializePipeline` trait
16//!
17//! # Design Philosophy
18//!
19//! This crate consolidates duplicated patterns across the TurboClaude ecosystem:
20//!
21//! - **Before**: Retry logic duplicated in 2 places with different APIs
22//! - **After**: One universal abstraction, multiple implementations
23//! - **Before**: Error conversion via repetitive `map_err()` chains
24//! - **After**: Declarative `error_boundary!` definitions at module boundaries
25//! - **Before**: Manual serde method calls scattered throughout codebase
26//! - **After**: Unified `SerializePipeline` interface for all protocol types
27//!
28//! # Examples
29//!
30//! Using the prelude for convenient imports:
31//!
32//! ```rust
33//! use turboclaude_core::prelude::*;
34//! use std::time::Duration;
35//!
36//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
37//! let backoff = ExponentialBackoff::builder()
38//!     .max_retries(3)
39//!     .initial_delay(Duration::from_millis(100))
40//!     .build();
41//!
42//! let result = backoff.execute(|| async {
43//!     Ok::<_, std::io::Error>(42)
44//! }).await?;
45//! # Ok(())
46//! # }
47//! ```
48
49pub mod error;
50pub mod resource;
51pub mod retry;
52pub mod serde;
53
54/// Convenient re-exports of commonly used items.
55///
56/// Import all core abstractions with:
57///
58/// ```rust
59/// use turboclaude_core::prelude::*;
60/// ```
61pub mod prelude {
62    pub use crate::error::ErrorBoundary;
63    pub use crate::error_boundary;
64    pub use crate::resource::{LazyResource, Resource};
65    pub use crate::retry::{BackoffStrategy, ExponentialBackoff, ExponentialBackoffBuilder};
66    pub use crate::serde::SerializePipeline;
67}