pub struct TransactionFetcher<N: NetworkPrimitives = EthNetworkPrimitives> {
pub active_peers: LruMap<PeerId, u8, ByLength>,
pub inflight_requests: FuturesUnordered<GetPooledTxRequestFut<N::PooledTransaction>>,
pub hashes_pending_fetch: LruCache<TxHash>,
pub info: TransactionFetcherInfo,
/* private fields */
}
Expand description
The type responsible for fetching missing transactions from peers.
This will keep track of unique transaction hashes that are currently being fetched and submits new requests on announced hashes.
Fields§
§active_peers: LruMap<PeerId, u8, ByLength>
All peers with to which a GetPooledTransactions
request is inflight.
inflight_requests: FuturesUnordered<GetPooledTxRequestFut<N::PooledTransaction>>
All currently active GetPooledTransactions
requests.
The set of hashes encompassed by these requests are a subset of all hashes in the fetcher. It’s disjoint from the set of hashes which are awaiting an idle fallback peer in order to be fetched.
hashes_pending_fetch: LruCache<TxHash>
Hashes that are awaiting an idle fallback peer so they can be fetched.
This is a subset of all hashes in the fetcher, and is disjoint from the set of hashes for
which a GetPooledTransactions
request is inflight.
info: TransactionFetcherInfo
Info on capacity of the transaction fetcher.
Implementations§
Source§impl<N: NetworkPrimitives> TransactionFetcher<N>
impl<N: NetworkPrimitives> TransactionFetcher<N>
Sourcepub fn update_metrics(&self)
pub fn update_metrics(&self)
Updates metrics.
Sourcepub fn with_transaction_fetcher_config(
config: &TransactionFetcherConfig,
) -> Self
pub fn with_transaction_fetcher_config( config: &TransactionFetcherConfig, ) -> Self
Sets up transaction fetcher with config
Sourcepub fn remove_hashes_from_transaction_fetcher<I>(&mut self, hashes: I)where
I: IntoIterator<Item = TxHash>,
pub fn remove_hashes_from_transaction_fetcher<I>(&mut self, hashes: I)where
I: IntoIterator<Item = TxHash>,
Removes the specified hashes from inflight tracking.
Sourcepub fn is_idle(&self, peer_id: &PeerId) -> bool
pub fn is_idle(&self, peer_id: &PeerId) -> bool
Returns true
if peer is idle with respect to self.inflight_requests
.
Sourcepub fn get_idle_peer_for(&self, hash: TxHash) -> Option<&PeerId>
pub fn get_idle_peer_for(&self, hash: TxHash) -> Option<&PeerId>
Returns any idle peer for the given hash.
Sourcepub fn find_any_idle_fallback_peer_for_any_pending_hash(
&mut self,
hashes_to_request: &mut RequestTxHashes,
budget: Option<usize>,
) -> Option<PeerId>
pub fn find_any_idle_fallback_peer_for_any_pending_hash( &mut self, hashes_to_request: &mut RequestTxHashes, budget: Option<usize>, ) -> Option<PeerId>
Returns any idle peer for any hash pending fetch. If one is found, the corresponding hash is written to the request buffer that is passed as parameter.
Loops through the hashes pending fetch in lru order until one is found with an idle fallback peer, or the budget passed as parameter is depleted, whatever happens first.
Sourcepub fn pack_request(
&self,
hashes_to_request: &mut RequestTxHashes,
hashes_from_announcement: ValidAnnouncementData,
) -> RequestTxHashes
pub fn pack_request( &self, hashes_to_request: &mut RequestTxHashes, hashes_from_announcement: ValidAnnouncementData, ) -> RequestTxHashes
Packages hashes for a GetPooledTxRequest
up to limit. Returns left over hashes. Takes
a RequestTxHashes
buffer as parameter for filling with hashes to request.
Returns left over hashes.
Sourcepub fn pack_request_eth68(
&self,
hashes_to_request: &mut RequestTxHashes,
hashes_from_announcement: impl HandleMempoolData + IntoIterator<Item = (TxHash, Option<(u8, usize)>)>,
) -> RequestTxHashes
pub fn pack_request_eth68( &self, hashes_to_request: &mut RequestTxHashes, hashes_from_announcement: impl HandleMempoolData + IntoIterator<Item = (TxHash, Option<(u8, usize)>)>, ) -> RequestTxHashes
Packages hashes for a GetPooledTxRequest
from an
Eth68
announcement up to limit as defined by protocol
version 68. Takes a RequestTxHashes
buffer as parameter for filling with hashes to
request.
Returns left over hashes.
Loops through hashes passed as parameter and checks if a hash fits in the expected response. If no, it’s added to surplus hashes. If yes, it’s added to hashes to the request and expected response size is accumulated.
Sourcepub fn pack_request_eth66(
&self,
hashes_to_request: &mut RequestTxHashes,
hashes_from_announcement: ValidAnnouncementData,
) -> RequestTxHashes
pub fn pack_request_eth66( &self, hashes_to_request: &mut RequestTxHashes, hashes_from_announcement: ValidAnnouncementData, ) -> RequestTxHashes
Packages hashes for a GetPooledTxRequest
from an
Eth66
announcement up to limit as defined by
protocol version 66. Takes a RequestTxHashes
buffer as parameter for filling with
hashes to request.
Returns left over hashes.
Sourcepub fn try_buffer_hashes_for_retry(
&mut self,
hashes: RequestTxHashes,
peer_failed_to_serve: &PeerId,
)
pub fn try_buffer_hashes_for_retry( &mut self, hashes: RequestTxHashes, peer_failed_to_serve: &PeerId, )
Tries to buffer hashes for retry.
Sourcepub fn buffer_hashes(
&mut self,
hashes: RequestTxHashes,
fallback_peer: Option<PeerId>,
)
pub fn buffer_hashes( &mut self, hashes: RequestTxHashes, fallback_peer: Option<PeerId>, )
Buffers hashes. Note: Only peers that haven’t yet tried to request the hashes should be
passed as fallback_peer
parameter! For re-buffering hashes on failed request, use
TransactionFetcher::try_buffer_hashes_for_retry
. Hashes that have been re-requested
DEFAULT_MAX_RETRIES
, are dropped.
Sourcepub fn on_fetch_pending_hashes(
&mut self,
peers: &HashMap<PeerId, PeerMetadata<N>>,
has_capacity_wrt_pending_pool_imports: impl Fn(usize) -> bool,
)
pub fn on_fetch_pending_hashes( &mut self, peers: &HashMap<PeerId, PeerMetadata<N>>, has_capacity_wrt_pending_pool_imports: impl Fn(usize) -> bool, )
Tries to request hashes pending fetch.
Finds the first buffered hash with a fallback peer that is idle, if any. Fills the rest of the request by checking the transactions seen by the peer against the buffer.
Sourcepub fn filter_unseen_and_pending_hashes(
&mut self,
new_announced_hashes: &mut ValidAnnouncementData,
is_tx_bad_import: impl Fn(&TxHash) -> bool,
peer_id: &PeerId,
client_version: &str,
)
pub fn filter_unseen_and_pending_hashes( &mut self, new_announced_hashes: &mut ValidAnnouncementData, is_tx_bad_import: impl Fn(&TxHash) -> bool, peer_id: &PeerId, client_version: &str, )
Filters out hashes that have been seen before. For hashes that have already been seen, the peer is added as fallback peer.
Sourcepub fn request_transactions_from_peer(
&mut self,
new_announced_hashes: RequestTxHashes,
peer: &PeerMetadata<N>,
) -> Option<RequestTxHashes>
pub fn request_transactions_from_peer( &mut self, new_announced_hashes: RequestTxHashes, peer: &PeerMetadata<N>, ) -> Option<RequestTxHashes>
Requests the missing transactions from the previously unseen announced hashes of the peer. Returns the requested hashes if the request concurrency limit is reached or if the request fails to send over the channel to the peer’s session task.
This filters all announced hashes that are already in flight, and requests the missing, while marking the given peer as an alternative peer for the hashes that are already in flight.
Sourcepub fn fill_request_from_hashes_pending_fetch(
&mut self,
hashes_to_request: &mut RequestTxHashes,
seen_hashes: &LruCache<TxHash>,
budget_fill_request: Option<usize>,
)
pub fn fill_request_from_hashes_pending_fetch( &mut self, hashes_to_request: &mut RequestTxHashes, seen_hashes: &LruCache<TxHash>, budget_fill_request: Option<usize>, )
Tries to fill request with hashes pending fetch so that the expected PooledTransactions
response is full enough. A mutable reference to a list of hashes to request is passed as
parameter. A budget is passed as parameter, this ensures that the node stops searching
for more hashes after the budget is depleted. Under bad network conditions, the cache of
hashes pending fetch may become very full for a while. As the node recovers, the hashes
pending fetch cache should get smaller. The budget should aim to be big enough to loop
through all buffered hashes in good network conditions.
The request hashes buffer is filled as if it’s an eth68 request, i.e. smartly assemble
the request based on expected response size. For any hash missing size metadata, it is
guessed at AVERAGE_BYTE_SIZE_TX_ENCODED
.
Loops through hashes pending fetch and does:
- Check if a hash pending fetch is seen by peer.
- Optimistically include the hash in the request.
- Accumulate expected total response size.
- Check if acc size and hashes count is at limit, if so stop looping.
- Remove hashes to request from cache of hashes pending fetch.
Sourcepub fn has_capacity_for_fetching_pending_hashes(&self) -> bool
pub fn has_capacity_for_fetching_pending_hashes(&self) -> bool
Returns true
if TransactionFetcher
has capacity to request pending hashes. Returns
false
if TransactionFetcher
is operating close to full capacity.
Sourcepub fn search_breadth_budget_find_idle_fallback_peer(
&self,
has_capacity_wrt_pending_pool_imports: impl Fn(usize) -> bool,
) -> Option<usize>
pub fn search_breadth_budget_find_idle_fallback_peer( &self, has_capacity_wrt_pending_pool_imports: impl Fn(usize) -> bool, ) -> Option<usize>
Returns the limit to enforce when looking for any pending hash with an idle fallback peer.
Returns Some(limit)
if TransactionFetcher
and the
TransactionPool
are operating close to full
capacity. Returns None
, unlimited, if they are not that busy.
Sourcepub fn search_breadth_budget_find_intersection_pending_hashes_and_hashes_seen_by_peer(
&self,
has_capacity_wrt_pending_pool_imports: impl Fn(usize) -> bool,
) -> Option<usize>
pub fn search_breadth_budget_find_intersection_pending_hashes_and_hashes_seen_by_peer( &self, has_capacity_wrt_pending_pool_imports: impl Fn(usize) -> bool, ) -> Option<usize>
Returns the limit to enforce when looking for the intersection between hashes announced by peer and hashes pending fetch.
Returns Some(limit)
if TransactionFetcher
and the
TransactionPool
are operating close to full
capacity. Returns None
, unlimited, if they are not that busy.
Sourcepub const fn approx_capacity_get_pooled_transactions_req(
&self,
announcement_version: EthVersion,
) -> usize
pub const fn approx_capacity_get_pooled_transactions_req( &self, announcement_version: EthVersion, ) -> usize
Returns the approx number of transactions that a GetPooledTransactions
request will
have capacity for w.r.t. the given version of the protocol.
Sourcepub fn on_resolved_get_pooled_transactions_request_fut(
&mut self,
response: GetPooledTxResponse<N::PooledTransaction>,
) -> FetchEvent<N::PooledTransaction>
pub fn on_resolved_get_pooled_transactions_request_fut( &mut self, response: GetPooledTxResponse<N::PooledTransaction>, ) -> FetchEvent<N::PooledTransaction>
Processes a resolved GetPooledTransactions
request. Queues the outcome as a
FetchEvent
, which will then be streamed by
TransactionsManager
.
Trait Implementations§
Source§impl<N: Debug + NetworkPrimitives> Debug for TransactionFetcher<N>where
N::PooledTransaction: Debug,
impl<N: Debug + NetworkPrimitives> Debug for TransactionFetcher<N>where
N::PooledTransaction: Debug,
Source§impl<T: NetworkPrimitives> Default for TransactionFetcher<T>
impl<T: NetworkPrimitives> Default for TransactionFetcher<T>
Source§impl<N: NetworkPrimitives> Stream for TransactionFetcher<N>
impl<N: NetworkPrimitives> Stream for TransactionFetcher<N>
Source§fn poll_next(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
) -> Poll<Option<Self::Item>>
fn poll_next( self: Pin<&mut Self>, cx: &mut Context<'_>, ) -> Poll<Option<Self::Item>>
Advances all inflight requests and returns the next event.
Source§type Item = FetchEvent<<N as NetworkPrimitives>::PooledTransaction>
type Item = FetchEvent<<N as NetworkPrimitives>::PooledTransaction>
impl<'pin, N: NetworkPrimitives> Unpin for TransactionFetcher<N>where
PinnedFieldsOf<__TransactionFetcher<'pin, N>>: Unpin,
Auto Trait Implementations§
impl<N = EthNetworkPrimitives> !Freeze for TransactionFetcher<N>
impl<N = EthNetworkPrimitives> !RefUnwindSafe for TransactionFetcher<N>
impl<N> Send for TransactionFetcher<N>
impl<N> Sync for TransactionFetcher<N>
impl<N = EthNetworkPrimitives> !UnwindSafe for TransactionFetcher<N>
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
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§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.§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.§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.§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.§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.§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.§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.§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.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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 more§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§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 more§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 more§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
§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
§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.§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.§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.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<St> StreamExt for Stwhere
St: Stream + ?Sized,
impl<St> StreamExt for Stwhere
St: Stream + ?Sized,
§fn next(&mut self) -> Next<'_, Self>where
Self: Unpin,
fn next(&mut self) -> Next<'_, Self>where
Self: Unpin,
None
if the
stream is finished. Read more§fn try_next<T, E>(&mut self) -> TryNext<'_, Self>
fn try_next<T, E>(&mut self) -> TryNext<'_, Self>
§fn map<T, F>(self, f: F) -> Map<Self, F>
fn map<T, F>(self, f: F) -> Map<Self, F>
§fn map_while<T, F>(self, f: F) -> MapWhile<Self, F>
fn map_while<T, F>(self, f: F) -> MapWhile<Self, F>
None
. Read more§fn then<F, Fut>(self, f: F) -> Then<Self, Fut, F>
fn then<F, Fut>(self, f: F) -> Then<Self, Fut, F>
§fn merge<U>(self, other: U) -> Merge<Self, U>where
U: Stream<Item = Self::Item>,
Self: Sized,
fn merge<U>(self, other: U) -> Merge<Self, U>where
U: Stream<Item = Self::Item>,
Self: Sized,
§fn filter<F>(self, f: F) -> Filter<Self, F>
fn filter<F>(self, f: F) -> Filter<Self, F>
§fn filter_map<T, F>(self, f: F) -> FilterMap<Self, F>
fn filter_map<T, F>(self, f: F) -> FilterMap<Self, F>
§fn fuse(self) -> Fuse<Self>where
Self: Sized,
fn fuse(self) -> Fuse<Self>where
Self: Sized,
None
. Read more§fn take(self, n: usize) -> Take<Self>where
Self: Sized,
fn take(self, n: usize) -> Take<Self>where
Self: Sized,
n
items of the underlying stream. Read more§fn take_while<F>(self, f: F) -> TakeWhile<Self, F>
fn take_while<F>(self, f: F) -> TakeWhile<Self, F>
true
. Read more§fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
n
first items of the
underlying stream. Read more§fn skip_while<F>(self, f: F) -> SkipWhile<Self, F>
fn skip_while<F>(self, f: F) -> SkipWhile<Self, F>
true
. Read more§fn all<F>(&mut self, f: F) -> AllFuture<'_, Self, F>
fn all<F>(&mut self, f: F) -> AllFuture<'_, Self, F>
§fn any<F>(&mut self, f: F) -> AnyFuture<'_, Self, F>
fn any<F>(&mut self, f: F) -> AnyFuture<'_, Self, F>
§fn chain<U>(self, other: U) -> Chain<Self, U>where
U: Stream<Item = Self::Item>,
Self: Sized,
fn chain<U>(self, other: U) -> Chain<Self, U>where
U: Stream<Item = Self::Item>,
Self: Sized,
§fn fold<B, F>(self, init: B, f: F) -> FoldFuture<Self, B, F>
fn fold<B, F>(self, init: B, f: F) -> FoldFuture<Self, B, F>
§fn collect<T>(self) -> Collect<Self, T>where
T: FromStream<Self::Item>,
Self: Sized,
fn collect<T>(self) -> Collect<Self, T>where
T: FromStream<Self::Item>,
Self: Sized,
§fn timeout(self, duration: Duration) -> Timeout<Self>where
Self: Sized,
fn timeout(self, duration: Duration) -> Timeout<Self>where
Self: Sized,
time
only.§fn timeout_repeating(self, interval: Interval) -> TimeoutRepeating<Self>where
Self: Sized,
fn timeout_repeating(self, interval: Interval) -> TimeoutRepeating<Self>where
Self: Sized,
time
only.§fn throttle(self, duration: Duration) -> Throttle<Self>where
Self: Sized,
fn throttle(self, duration: Duration) -> Throttle<Self>where
Self: Sized,
time
only.§impl<T> StreamExt for Twhere
T: Stream + ?Sized,
impl<T> StreamExt for Twhere
T: Stream + ?Sized,
§fn next(&mut self) -> Next<'_, Self>where
Self: Unpin,
fn next(&mut self) -> Next<'_, Self>where
Self: Unpin,
§fn into_future(self) -> StreamFuture<Self>
fn into_future(self) -> StreamFuture<Self>
§fn map<T, F>(self, f: F) -> Map<Self, F>
fn map<T, F>(self, f: F) -> Map<Self, F>
§fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
§fn filter<Fut, F>(self, f: F) -> Filter<Self, Fut, F>
fn filter<Fut, F>(self, f: F) -> Filter<Self, Fut, F>
§fn filter_map<Fut, T, F>(self, f: F) -> FilterMap<Self, Fut, F>
fn filter_map<Fut, T, F>(self, f: F) -> FilterMap<Self, Fut, F>
§fn then<Fut, F>(self, f: F) -> Then<Self, Fut, F>
fn then<Fut, F>(self, f: F) -> Then<Self, Fut, F>
§fn collect<C>(self) -> Collect<Self, C>
fn collect<C>(self) -> Collect<Self, C>
§fn unzip<A, B, FromA, FromB>(self) -> Unzip<Self, FromA, FromB>
fn unzip<A, B, FromA, FromB>(self) -> Unzip<Self, FromA, FromB>
§fn concat(self) -> Concat<Self>
fn concat(self) -> Concat<Self>
§fn count(self) -> Count<Self>where
Self: Sized,
fn count(self) -> Count<Self>where
Self: Sized,
§fn fold<T, Fut, F>(self, init: T, f: F) -> Fold<Self, Fut, T, F>
fn fold<T, Fut, F>(self, init: T, f: F) -> Fold<Self, Fut, T, F>
§fn any<Fut, F>(self, f: F) -> Any<Self, Fut, F>
fn any<Fut, F>(self, f: F) -> Any<Self, Fut, F>
true
if any element in stream satisfied a predicate. Read more§fn all<Fut, F>(self, f: F) -> All<Self, Fut, F>
fn all<Fut, F>(self, f: F) -> All<Self, Fut, F>
true
if all element in stream satisfied a predicate. Read more§fn flatten(self) -> Flatten<Self>where
Self::Item: Stream,
Self: Sized,
fn flatten(self) -> Flatten<Self>where
Self::Item: Stream,
Self: Sized,
§fn flatten_unordered(
self,
limit: impl Into<Option<usize>>,
) -> FlattenUnorderedWithFlowController<Self, ()>
fn flatten_unordered( self, limit: impl Into<Option<usize>>, ) -> FlattenUnorderedWithFlowController<Self, ()>
alloc
only.§fn flat_map_unordered<U, F>(
self,
limit: impl Into<Option<usize>>,
f: F,
) -> FlatMapUnordered<Self, U, F>
fn flat_map_unordered<U, F>( self, limit: impl Into<Option<usize>>, f: F, ) -> FlatMapUnordered<Self, U, F>
alloc
only.StreamExt::map
] but flattens nested Stream
s
and polls them concurrently, yielding items in any order, as they made
available. Read more§fn scan<S, B, Fut, F>(self, initial_state: S, f: F) -> Scan<Self, S, Fut, F>
fn scan<S, B, Fut, F>(self, initial_state: S, f: F) -> Scan<Self, S, Fut, F>
StreamExt::fold
] that holds internal state
and produces a new stream. Read more§fn skip_while<Fut, F>(self, f: F) -> SkipWhile<Self, Fut, F>
fn skip_while<Fut, F>(self, f: F) -> SkipWhile<Self, Fut, F>
true
. Read more§fn take_while<Fut, F>(self, f: F) -> TakeWhile<Self, Fut, F>
fn take_while<Fut, F>(self, f: F) -> TakeWhile<Self, Fut, F>
true
. Read more§fn take_until<Fut>(self, fut: Fut) -> TakeUntil<Self, Fut>
fn take_until<Fut>(self, fut: Fut) -> TakeUntil<Self, Fut>
§fn for_each<Fut, F>(self, f: F) -> ForEach<Self, Fut, F>
fn for_each<Fut, F>(self, f: F) -> ForEach<Self, Fut, F>
§fn for_each_concurrent<Fut, F>(
self,
limit: impl Into<Option<usize>>,
f: F,
) -> ForEachConcurrent<Self, Fut, F>
fn for_each_concurrent<Fut, F>( self, limit: impl Into<Option<usize>>, f: F, ) -> ForEachConcurrent<Self, Fut, F>
alloc
only.§fn take(self, n: usize) -> Take<Self>where
Self: Sized,
fn take(self, n: usize) -> Take<Self>where
Self: Sized,
n
items of the underlying stream. Read more§fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
n
items of the underlying stream. Read more§fn catch_unwind(self) -> CatchUnwind<Self>where
Self: Sized + UnwindSafe,
fn catch_unwind(self) -> CatchUnwind<Self>where
Self: Sized + UnwindSafe,
std
only.§fn boxed<'a>(self) -> Pin<Box<dyn Stream<Item = Self::Item> + Send + 'a>>
fn boxed<'a>(self) -> Pin<Box<dyn Stream<Item = Self::Item> + Send + 'a>>
alloc
only.§fn boxed_local<'a>(self) -> Pin<Box<dyn Stream<Item = Self::Item> + 'a>>where
Self: Sized + 'a,
fn boxed_local<'a>(self) -> Pin<Box<dyn Stream<Item = Self::Item> + 'a>>where
Self: Sized + 'a,
alloc
only.§fn buffered(self, n: usize) -> Buffered<Self>
fn buffered(self, n: usize) -> Buffered<Self>
alloc
only.§fn buffer_unordered(self, n: usize) -> BufferUnordered<Self>
fn buffer_unordered(self, n: usize) -> BufferUnordered<Self>
alloc
only.§fn zip<St>(self, other: St) -> Zip<Self, St>where
St: Stream,
Self: Sized,
fn zip<St>(self, other: St) -> Zip<Self, St>where
St: Stream,
Self: Sized,
§fn chain<St>(self, other: St) -> Chain<Self, St>where
St: Stream<Item = Self::Item>,
Self: Sized,
fn chain<St>(self, other: St) -> Chain<Self, St>where
St: Stream<Item = Self::Item>,
Self: Sized,
§fn peekable(self) -> Peekable<Self>where
Self: Sized,
fn peekable(self) -> Peekable<Self>where
Self: Sized,
peek
method. Read more§fn chunks(self, capacity: usize) -> Chunks<Self>where
Self: Sized,
fn chunks(self, capacity: usize) -> Chunks<Self>where
Self: Sized,
alloc
only.§fn ready_chunks(self, capacity: usize) -> ReadyChunks<Self>where
Self: Sized,
fn ready_chunks(self, capacity: usize) -> ReadyChunks<Self>where
Self: Sized,
alloc
only.§fn forward<S>(self, sink: S) -> Forward<Self, S>where
S: Sink<Self::Ok, Error = Self::Error>,
Self: Sized + TryStream,
fn forward<S>(self, sink: S) -> Forward<Self, S>where
S: Sink<Self::Ok, Error = Self::Error>,
Self: Sized + TryStream,
sink
only.§fn split<Item>(self) -> (SplitSink<Self, Item>, SplitStream<Self>)where
Self: Sized + Sink<Item>,
fn split<Item>(self) -> (SplitSink<Self, Item>, SplitStream<Self>)where
Self: Sized + Sink<Item>,
sink
and alloc
only.§fn inspect<F>(self, f: F) -> Inspect<Self, F>
fn inspect<F>(self, f: F) -> Inspect<Self, F>
§fn left_stream<B>(self) -> Either<Self, B> ⓘwhere
B: Stream<Item = Self::Item>,
Self: Sized,
fn left_stream<B>(self) -> Either<Self, B> ⓘwhere
B: Stream<Item = Self::Item>,
Self: Sized,
§fn right_stream<B>(self) -> Either<B, Self> ⓘwhere
B: Stream<Item = Self::Item>,
Self: Sized,
fn right_stream<B>(self) -> Either<B, Self> ⓘwhere
B: Stream<Item = Self::Item>,
Self: Sized,
§fn poll_next_unpin(&mut self, cx: &mut Context<'_>) -> Poll<Option<Self::Item>>where
Self: Unpin,
fn poll_next_unpin(&mut self, cx: &mut Context<'_>) -> Poll<Option<Self::Item>>where
Self: Unpin,
Stream::poll_next
] on Unpin
stream types.§fn select_next_some(&mut self) -> SelectNextSome<'_, Self>where
Self: Unpin + FusedStream,
fn select_next_some(&mut self) -> SelectNextSome<'_, Self>where
Self: Unpin + FusedStream,
§impl<T> Tap for T
impl<T> Tap for T
§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 more§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 more§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 more§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 more§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 more§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 more§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.§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.§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.§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.§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.§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.§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.§impl<T> TryConv for T
impl<T> TryConv for T
§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeDebug for Twhere
T: Debug,
impl<T> MaybeSendSync for T
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: 528 bytes