CircuitBreaker

Struct CircuitBreaker 

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

Circuit breaker implementation for provider failure management.

This struct provides the main circuit breaker functionality, automatically detecting failures and managing state transitions to prevent cascading failures.

§Examples

use ultrafast_models_sdk::circuit_breaker::{CircuitBreaker, CircuitBreakerConfig};
use std::time::Duration;

let config = CircuitBreakerConfig::default();
let circuit_breaker = CircuitBreaker::new("openai".to_string(), config);

// Execute operation with circuit breaker protection
let result = circuit_breaker.call(|| async {
    // Your provider operation here
    Ok("success")
}).await;

Implementations§

Source§

impl CircuitBreaker

Source

pub fn new(name: String, config: CircuitBreakerConfig) -> Self

Create a new circuit breaker with the specified configuration.

§Arguments
  • name - Unique identifier for this circuit breaker
  • config - Configuration parameters for circuit breaker behavior
§Examples
use ultrafast_models_sdk::circuit_breaker::{CircuitBreaker, CircuitBreakerConfig};

let config = CircuitBreakerConfig::default();
let circuit_breaker = CircuitBreaker::new("anthropic".to_string(), config);
Source

pub async fn call<F, Fut, T, E>( &self, operation: F, ) -> Result<T, CircuitBreakerError>
where F: FnOnce() -> Fut, Fut: Future<Output = Result<T, E>>, E: Error + Send + Sync + 'static,

Execute an operation with circuit breaker protection.

This method automatically manages the circuit breaker state based on the success or failure of the provided operation.

§Arguments
  • operation - The operation to execute with circuit breaker protection
§Returns

Returns the result of the operation, or a circuit breaker error if the operation should be blocked.

§Examples
use ultrafast_models_sdk::circuit_breaker::{CircuitBreaker, CircuitBreakerError};

let circuit_breaker = CircuitBreaker::new("provider".to_string(), config);

let result = circuit_breaker.call(|| async {
    // Your provider call here
    provider.chat_completion(request).await
}).await;

match result {
    Ok(response) => println!("Success"),
    Err(CircuitBreakerError::Open) => println!("Circuit is open"),
    Err(CircuitBreakerError::Timeout) => println!("Request timed out"),
}
Source

pub async fn get_state(&self) -> CircuitState

Get the current circuit breaker state.

Returns the current operational state of the circuit breaker.

Source

pub async fn get_metrics(&self) -> CircuitBreakerMetrics

Get comprehensive metrics for this circuit breaker.

Returns detailed metrics including state, failure/success counts, and timing information.

Source

pub async fn force_open(&self)

Force the circuit breaker to open state.

This method manually opens the circuit breaker, useful for testing or emergency situations.

Source

pub async fn force_closed(&self)

Force the circuit breaker to closed state.

This method manually closes the circuit breaker, useful for testing or when you want to reset the circuit breaker state.

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> 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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. 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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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
Source§

impl<T> ErasedDestructor for T
where T: 'static,