pub struct FallbackService<S> { /* private fields */ }Expand description
The FallbackService consumes multiple transports and is able to
query them in parallel, returning the first successful response.
The service ranks transports based on latency and stability metrics, and will attempt to always use the best available transports.
Implementations§
Source§impl<S: Clone> FallbackService<S>
impl<S: Clone> FallbackService<S>
Sourcepub fn new(transports: Vec<S>, active_transport_count: usize) -> Self
pub fn new(transports: Vec<S>, active_transport_count: usize) -> Self
Create a new fallback service from a list of transports.
The active_transport_count parameter controls how many transports are used for requests
at any one time.
Uses the default set of sequential methods (eth_sendRawTransactionSync, eth_sendTransactionSync).
Sourcepub fn new_with_sequential_methods(
transports: Vec<S>,
active_transport_count: usize,
sequential_methods: HashSet<String>,
) -> Self
pub fn new_with_sequential_methods( transports: Vec<S>, active_transport_count: usize, sequential_methods: HashSet<String>, ) -> Self
Create a new fallback service from a list of transports.
The active_transport_count parameter controls how many transports are used for requests
at any one time.
Uses the given set of sequential methods (eth_sendRawTransactionSync, eth_sendTransactionSync).
Sourcepub fn append_sequential_method(
self,
sequential_method: impl Into<String>,
) -> Self
pub fn append_sequential_method( self, sequential_method: impl Into<String>, ) -> Self
Inserts the sequential method into the set.
Sourcepub fn with_sequential_methods(
self,
sequential_methods: HashSet<String>,
) -> Self
pub fn with_sequential_methods( self, sequential_methods: HashSet<String>, ) -> Self
Configures the sequential_methods parameter specifies which RPC methods require sequential
execution due to non-deterministic results in parallel execution.
Trait Implementations§
Source§impl<S: Clone> Clone for FallbackService<S>
impl<S: Clone> Clone for FallbackService<S>
Source§fn clone(&self) -> FallbackService<S>
fn clone(&self) -> FallbackService<S>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<S: Debug> Debug for FallbackService<S>
impl<S: Debug> Debug for FallbackService<S>
Source§impl<S> Service<RequestPacket> for FallbackService<S>where
S: Service<RequestPacket, Future = TransportFut<'static>, Error = TransportError> + Send + Sync + Clone + 'static,
impl<S> Service<RequestPacket> for FallbackService<S>where
S: Service<RequestPacket, Future = TransportFut<'static>, Error = TransportError> + Send + Sync + Clone + 'static,
Source§type Response = ResponsePacket
type Response = ResponsePacket
Source§type Future = Pin<Box<dyn Future<Output = Result<ResponsePacket, RpcError<TransportErrorKind>>> + Send>>
type Future = Pin<Box<dyn Future<Output = Result<ResponsePacket, RpcError<TransportErrorKind>>> + Send>>
Auto Trait Implementations§
impl<S> Freeze for FallbackService<S>
impl<S> !RefUnwindSafe for FallbackService<S>
impl<S> Send for FallbackService<S>
impl<S> Sync for FallbackService<S>
impl<S> Unpin for FallbackService<S>
impl<S> !UnwindSafe for FallbackService<S>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoBoxTransport for T
impl<T> IntoBoxTransport for T
Source§fn into_box_transport(self) -> BoxTransport
fn into_box_transport(self) -> BoxTransport
Source§impl<T, Request> ServiceExt<Request> for T
impl<T, Request> ServiceExt<Request> for T
Source§fn ready(&mut self) -> Ready<'_, Self, Request>where
Self: Sized,
fn ready(&mut self) -> Ready<'_, Self, Request>where
Self: Sized,
Source§fn ready_oneshot(self) -> ReadyOneshot<Self, Request>where
Self: Sized,
fn ready_oneshot(self) -> ReadyOneshot<Self, Request>where
Self: Sized,
Source§fn oneshot(self, req: Request) -> Oneshot<Self, Request>where
Self: Sized,
fn oneshot(self, req: Request) -> Oneshot<Self, Request>where
Self: Sized,
Service, calling it with the provided request once it is ready.Source§fn and_then<F>(self, f: F) -> AndThen<Self, F>
fn and_then<F>(self, f: F) -> AndThen<Self, F>
poll_ready method. Read moreSource§fn map_response<F, Response>(self, f: F) -> MapResponse<Self, F>
fn map_response<F, Response>(self, f: F) -> MapResponse<Self, F>
poll_ready method. Read moreSource§fn map_err<F, Error>(self, f: F) -> MapErr<Self, F>
fn map_err<F, Error>(self, f: F) -> MapErr<Self, F>
poll_ready method. Read moreSource§fn map_result<F, Response, Error>(self, f: F) -> MapResult<Self, F>
fn map_result<F, Response, Error>(self, f: F) -> MapResult<Self, F>
Result<Self::Response, Self::Error>)
to a different value, regardless of whether the future succeeds or
fails. Read moreSource§fn map_request<F, NewRequest>(self, f: F) -> MapRequest<Self, F>
fn map_request<F, NewRequest>(self, f: F) -> MapRequest<Self, F>
Source§fn then<F, Response, Error, Fut>(self, f: F) -> Then<Self, F>
fn then<F, Response, Error, Fut>(self, f: F) -> Then<Self, F>
Source§fn map_future<F, Fut, Response, Error>(self, f: F) -> MapFuture<Self, F>
fn map_future<F, Fut, Response, Error>(self, f: F) -> MapFuture<Self, F>
Source§impl<T> Transport for Twhere
T: Service<RequestPacket, Response = ResponsePacket, Error = RpcError<TransportErrorKind>, Future = Pin<Box<dyn Future<Output = Result<ResponsePacket, RpcError<TransportErrorKind>>> + Send>>> + Send + Sync + 'static,
impl<T> Transport for Twhere
T: Service<RequestPacket, Response = ResponsePacket, Error = RpcError<TransportErrorKind>, Future = Pin<Box<dyn Future<Output = Result<ResponsePacket, RpcError<TransportErrorKind>>> + Send>>> + Send + Sync + 'static,
Source§fn boxed(self) -> BoxTransportwhere
Self: IntoBoxTransport,
fn boxed(self) -> BoxTransportwhere
Self: IntoBoxTransport,
Source§fn as_boxed(&self) -> BoxTransportwhere
Self: IntoBoxTransport,
fn as_boxed(&self) -> BoxTransportwhere
Self: IntoBoxTransport,
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<T> ErasedDestructor for Twhere
T: 'static,
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 24 bytes