Skip to main content

CircuitBreaker

Struct CircuitBreaker 

Source
pub struct CircuitBreaker { /* private fields */ }
Expand description

Sliding-window loss breaker.

§Example

use rustrade_risk::{CircuitBreaker, CircuitBreakerConfig};

let mut cb = CircuitBreaker::new(CircuitBreakerConfig {
    loss_limit: 3,
    window_secs: 3600,
    cooldown_secs: 600,
});

cb.record_loss();
cb.record_loss();
assert!(!cb.is_tripped());
cb.record_loss();
assert!(cb.is_tripped());

Implementations§

Source§

impl CircuitBreaker

Source

pub fn new(config: CircuitBreakerConfig) -> CircuitBreaker

Create with the default system clock.

Source

pub fn with_clock( config: CircuitBreakerConfig, clock: Arc<dyn Clock>, ) -> CircuitBreaker

Create with an injected clock — typically Arc<ManualClock> from crate::clock in tests.

Source

pub fn tick(&mut self)

Call once per decision tick to auto-reset the breaker after cooldown and evict stale loss timestamps.

Source

pub fn record_loss(&mut self)

Record a losing trade. Trips the breaker if the rolling count within window_secs reaches loss_limit.

Source

pub fn record_win(&mut self)

Record a winning trade.

Does NOT clear the tripped state — once tripped, only elapsed cooldown can un-trip the breaker. A single win is not evidence that market conditions have recovered.

Source

pub fn is_tripped(&self) -> bool

Is the breaker currently tripped and within its cooldown window?

Source

pub fn snapshot(&self) -> CircuitBreakerSnapshot

Capture the mutable breaker state for persistence.

Pairs with Self::restore. The configured limits and the clock are intentionally excluded — only the recorded loss timestamps and trip time are persisted.

Source

pub fn restore(&mut self, snap: CircuitBreakerSnapshot)

Restore breaker state from a CircuitBreakerSnapshot.

Overwrites the loss window and trip time; keeps the configured limits and clock from the live instance. Call Self::tick afterwards to evict losses now outside the window and auto-reset the breaker if its cooldown elapsed while the process was down.

Source

pub fn reset(&mut self)

Manually clear the breaker. Typically not called in production — the cooldown does this automatically.

Source

pub fn recent_loss_count(&self) -> usize

Number of losses currently in the rolling window.

Source

pub fn cooldown_remaining(&self) -> Option<Duration>

Cooldown time remaining if tripped, else None.

Trait Implementations§

Source§

impl Clone for CircuitBreaker

Source§

fn clone(&self) -> CircuitBreaker

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CircuitBreaker

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more