pub struct ProtocolStreamBuilder { /* private fields */ }Expand description
Builds and configures the multi protocol stream described in the module-level docs.
See the module documentation for details on protocols, configuration options, and stream behavior.
Implementations§
Source§impl ProtocolStreamBuilder
impl ProtocolStreamBuilder
Sourcepub fn new(tycho_url: &str, chain: Chain) -> Self
pub fn new(tycho_url: &str, chain: Chain) -> Self
Creates a new builder for a multi-protocol stream.
See the module-level docs for full details on stream behavior and configuration.
Sourcepub fn exchange<T>(
self,
name: &str,
filter: ComponentFilter,
filter_fn: Option<fn(&ComponentWithState) -> bool>,
) -> Selfwhere
T: ProtocolSim + TryFromWithBlock<ComponentWithState, BlockHeader, Error = InvalidSnapshotError> + Send + 'static,
pub fn exchange<T>(
self,
name: &str,
filter: ComponentFilter,
filter_fn: Option<fn(&ComponentWithState) -> bool>,
) -> Selfwhere
T: ProtocolSim + TryFromWithBlock<ComponentWithState, BlockHeader, Error = InvalidSnapshotError> + Send + 'static,
Adds a specific exchange to the stream.
This configures the builder to include a new protocol synchronizer for name,
filtering its components according to filter and optionally filter_fn.
The type parameter T specifies the decoder type for this exchange. All
component states for this exchange will be decoded into instances of T.
§Parameters
name: The protocol or exchange name (e.g.,"uniswap_v4","vm:balancer_v2").filter: Defines the set of components to include in the stream.filter_fn: Optional custom filter function for client-side filtering of components not expressible infilter.
§Notes
For certain protocols (e.g., "uniswap_v4", "vm:balancer_v2", "vm:curve"), omitting
filter_fn may cause decoding errors or incorrect results. In these cases, a proper
filter function is required to ensure correct decoding and quoting logic.
Sourcepub fn exchange_with_decoder_context<T>(
self,
name: &str,
filter: ComponentFilter,
filter_fn: Option<fn(&ComponentWithState) -> bool>,
decoder_context: DecoderContext,
) -> Selfwhere
T: ProtocolSim + TryFromWithBlock<ComponentWithState, BlockHeader, Error = InvalidSnapshotError> + Send + 'static,
pub fn exchange_with_decoder_context<T>(
self,
name: &str,
filter: ComponentFilter,
filter_fn: Option<fn(&ComponentWithState) -> bool>,
decoder_context: DecoderContext,
) -> Selfwhere
T: ProtocolSim + TryFromWithBlock<ComponentWithState, BlockHeader, Error = InvalidSnapshotError> + Send + 'static,
Adds a specific exchange to the stream with decoder context.
This configures the builder to include a new protocol synchronizer for name,
filtering its components according to filter and optionally filter_fn. It also registers
the DecoderContext (this is useful to test protocols that are not live yet)
The type parameter T specifies the decoder type for this exchange. All
component states for this exchange will be decoded into instances of T.
§Parameters
name: The protocol or exchange name (e.g.,"uniswap_v4","vm:balancer_v2").filter: Defines the set of components to include in the stream.filter_fn: Optional custom filter function for client-side filtering of components not expressible infilter.decoder_context: The decoder context for this exchange
§Notes
For certain protocols (e.g., "uniswap_v4", "vm:balancer_v2", "vm:curve"), omitting
filter_fn may cause decoding errors or incorrect results. In these cases, a proper
filter function is required to ensure correct decoding and quoting logic.
Sourcepub fn block_time(self, block_time: u64) -> Self
pub fn block_time(self, block_time: u64) -> Self
Sets the block time interval for the stream.
This controls how often the stream produces updates.
Sourcepub fn timeout(self, timeout: u64) -> Self
👎Deprecated: Use latency_buffer instead
pub fn timeout(self, timeout: u64) -> Self
Sets the network operation timeout (deprecated).
Use [latency_buffer] instead for controlling latency.
This method is retained for backwards compatibility.
Sourcepub fn latency_buffer(self, timeout: u64) -> Self
pub fn latency_buffer(self, timeout: u64) -> Self
Sets the latency buffer to aggregate same-block messages.
This allows the supervisor to wait a short interval for all synchronizers to emit before aggregating.
Sourcepub fn max_missed_blocks(self, n: u64) -> Self
pub fn max_missed_blocks(self, n: u64) -> Self
Sets the maximum number of blocks a synchronizer may miss before being marked as Stale.
Sourcepub fn startup_timeout(self, timeout: Duration) -> Self
pub fn startup_timeout(self, timeout: Duration) -> Self
Sets how long a synchronizer may take to process the initial message.
Useful for data-intensive protocols where startup decoding takes longer.
Sourcepub fn no_state(self, no_state: bool) -> Self
pub fn no_state(self, no_state: bool) -> Self
Configures the stream to exclude state updates.
This reduces bandwidth and decoding workload if protocol state is not of interest (e.g. only process new tokens).
Sourcepub fn auth_key(self, auth_key: Option<String>) -> Self
pub fn auth_key(self, auth_key: Option<String>) -> Self
Sets the API key for authenticating with the Tycho server.
Sourcepub fn no_tls(self, no_tls: bool) -> Self
pub fn no_tls(self, no_tls: bool) -> Self
Disables TLS/ SSL for the connection, using http and ws protocols.
This is not recommended for production use.
Sourcepub fn disable_compression(self) -> Self
pub fn disable_compression(self) -> Self
Disable compression for the connection.
Sourcepub fn stream_end_policy(self, stream_end_policy: StreamEndPolicy) -> Self
pub fn stream_end_policy(self, stream_end_policy: StreamEndPolicy) -> Self
Sets the stream end policy.
Controls when the stream should stop based on synchronizer states.
§Note
The stream always ends latest if all protocols are stale or ended independent of this configuration. This allows you to end the stream earlier than that.
See self::StreamEndPolicy for possible configuration options.
Sourcepub async fn set_tokens(self, tokens: HashMap<Bytes, Token>) -> Self
pub async fn set_tokens(self, tokens: HashMap<Bytes, Token>) -> Self
Sets the initial tokens to consider during decoding.
Only components containing these tokens will be decoded initially. New tokens may be added automatically if they meet the quality threshold.
Sourcepub fn skip_state_decode_failures(self, skip: bool) -> Self
pub fn skip_state_decode_failures(self, skip: bool) -> Self
Skips decoding errors for component state updates.
Allows the stream to continue processing even if some states fail to decode, logging a warning instead of panicking.
Sourcepub fn websocket_retry_config(self, config: &RetryConfiguration) -> Self
pub fn websocket_retry_config(self, config: &RetryConfiguration) -> Self
Configures the retry policy for websocket reconnects.
Sourcepub fn state_synchronizer_retry_config(
self,
config: &RetryConfiguration,
) -> Self
pub fn state_synchronizer_retry_config( self, config: &RetryConfiguration, ) -> Self
Configures the retry policy for state synchronization.
pub fn get_decoder(&self) -> &TychoStreamDecoder<BlockHeader>
Sourcepub async fn build(
self,
) -> Result<impl Stream<Item = Result<Update, StreamDecodeError>>, StreamError>
pub async fn build( self, ) -> Result<impl Stream<Item = Result<Update, StreamDecodeError>>, StreamError>
Builds and returns the configured protocol stream.
See the module-level docs for details on stream behavior and emitted messages. This method applies all builder settings and starts the stream.
Auto Trait Implementations§
impl Freeze for ProtocolStreamBuilder
impl !RefUnwindSafe for ProtocolStreamBuilder
impl Send for ProtocolStreamBuilder
impl Sync for ProtocolStreamBuilder
impl Unpin for ProtocolStreamBuilder
impl !UnwindSafe for ProtocolStreamBuilder
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.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> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.