Skip to main content

breaker_machines/
lib.rs

1//! BreakerMachines - High-performance circuit breaker implementation
2//!
3//! This crate provides a complete circuit breaker implementation with:
4//! - Thread-safe event storage with sliding window calculations
5//! - State machine for circuit breaker lifecycle (Closed → Open → HalfOpen)
6//! - Monotonic time tracking to prevent NTP clock skew issues
7//! - Configurable failure thresholds and timeouts
8//!
9//! # Example
10//!
11//! ```rust
12//! use breaker_machines::CircuitBreaker;
13//!
14//! let mut circuit = CircuitBreaker::builder("my_service")
15//!     .failure_threshold(5)
16//!     .failure_window_secs(60.0)
17//!     .half_open_timeout_secs(30.0)
18//!     .success_threshold(2)
19//!     .on_open(|name| println!("Circuit {} opened!", name))
20//!     .build();
21//!
22//! // Execute with circuit protection
23//! let result = circuit.call(|| {
24//!     // Your service call here
25//!     Ok::<_, String>("success")
26//! });
27//!
28//! // Check circuit state
29//! if circuit.is_open() {
30//!     println!("Circuit is open, skipping call");
31//! }
32//! ```
33
34pub mod builder;
35pub mod bulkhead;
36pub mod callbacks;
37pub mod circuit;
38pub mod classifier;
39pub mod errors;
40pub mod storage;
41
42pub use builder::CircuitBuilder;
43pub use bulkhead::{BulkheadGuard, BulkheadSemaphore};
44pub use circuit::{CallOptions, CircuitBreaker, Config, FallbackContext};
45pub use classifier::{DefaultClassifier, FailureClassifier, FailureContext, PredicateClassifier};
46pub use errors::CircuitError;
47pub use storage::{MemoryStorage, NullStorage, StorageBackend};
48
49/// Event type for circuit breaker operations
50#[derive(Debug, Clone, Copy, PartialEq, Eq)]
51pub enum EventKind {
52    Success,
53    Failure,
54}
55
56/// A single event recorded by the circuit breaker
57#[derive(Debug, Clone)]
58pub struct Event {
59    pub kind: EventKind,
60    pub timestamp: f64,
61    pub duration: f64,
62}