Skip to main content

AA2dPool

Struct AA2dPool 

Source
pub struct AA2dPool {
    submission_id: u64,
    independent_transactions: HashMap<AASequenceId, PendingTransaction<CoinbaseTipOrdering<TempoPooledTransaction>>>,
    by_id: BTreeMap<AA2dTransactionId, Arc<AA2dInternalTransaction>>,
    by_hash: HashMap<TxHash, Arc<ValidPoolTransaction<TempoPooledTransaction>>>,
    expiring_nonce_txs: HashMap<B256, PendingTransaction<CoinbaseTipOrdering<TempoPooledTransaction>>>,
    slot_to_seq_id: U256Map<AASequenceId>,
    seq_id_to_slot: HashMap<AASequenceId, U256>,
    config: AA2dPoolConfig,
    metrics: AA2dPoolMetrics,
    by_eviction_order: BTreeSet<EvictionKey>,
    txs_by_sender: AddressMap<usize>,
}
Expand description

A sub-pool that keeps track of 2D nonce transactions.

It maintains both pending and queued transactions.

A 2d nonce transaction is pending if it dosn’t have a nonce gap for its nonce key, and is queued if its nonce key set has nonce gaps.

This pool relies on state changes to track the nonces.

§Limitations

  • We assume new AA transactions either create a new nonce key (nonce 0) or use an existing nonce key. To keep track of the known keys by accounts this pool relies on state changes to promote transactions to pending.

Fields§

§submission_id: u64

Keeps track of transactions inserted in the pool.

This way we can determine when transactions were submitted to the pool.

§independent_transactions: HashMap<AASequenceId, PendingTransaction<CoinbaseTipOrdering<TempoPooledTransaction>>>

independent, pending, executable transactions, one per sequence id.

§by_id: BTreeMap<AA2dTransactionId, Arc<AA2dInternalTransaction>>

All transactions that are currently inside the pool grouped by their unique identifier.

§by_hash: HashMap<TxHash, Arc<ValidPoolTransaction<TempoPooledTransaction>>>

All transactions by hash.

§expiring_nonce_txs: HashMap<B256, PendingTransaction<CoinbaseTipOrdering<TempoPooledTransaction>>>

Expiring nonce transactions, keyed by expiring nonce hash (always pending/independent). These use expiring nonce replay protection instead of sequential nonces.

§slot_to_seq_id: U256Map<AASequenceId>

Reverse index for the storage slot of an account’s nonce

 mapping(address => mapping(uint256 => uint64)) public nonces

This identifies the account and nonce key based on the slot in the NonceManager.

§seq_id_to_slot: HashMap<AASequenceId, U256>

Reverse index for cleaning up slots_to_seq_id.

§config: AA2dPoolConfig

Settings for this sub-pool.

§metrics: AA2dPoolMetrics

Metrics for tracking pool statistics

§by_eviction_order: BTreeSet<EvictionKey>

All transactions ordered by eviction priority (lowest priority first).

Since Tempo has a constant base fee, priority never changes after insertion, so we can maintain this ordering incrementally. At eviction time, we scan this set checking is_pending to find queued or pending transactions.

§txs_by_sender: AddressMap<usize>

Tracks the number of transactions per sender for DoS protection.

Bounded by pool size (max unique senders = pending_limit + queued_limit). Entries are removed when count reaches 0 via decrement_sender_count.

Implementations§

Source§

impl AA2dPool

Source

fn expiring_nonce_hash( transaction: &Arc<ValidPoolTransaction<TempoPooledTransaction>>, ) -> B256

Source

pub fn new(config: AA2dPoolConfig) -> Self

Creates a new instance with the givenconfig and nonce keys

Source

fn update_metrics(&self)

Updates all metrics to reflect the current state of the pool

Source

pub(crate) fn add_transaction( &mut self, transaction: Arc<ValidPoolTransaction<TempoPooledTransaction>>, on_chain_nonce: u64, hardfork: TempoHardfork, ) -> PoolResult<AddedTransaction<TempoPooledTransaction>>

Entrypoint for adding a 2d AA transaction.

on_chain_nonce is expected to be the nonce of the sender at the time of validation. If transaction is using 2D nonces, this is expected to be the nonce corresponding to the transaction’s nonce key.

hardfork indicates the active Tempo hardfork. When T1 or later, expiring nonce transactions (nonce_key == U256::MAX) are handled specially. Otherwise, they are treated as regular 2D nonce transactions.

Source

fn add_expiring_nonce_transaction( &mut self, transaction: Arc<ValidPoolTransaction<TempoPooledTransaction>>, hardfork: TempoHardfork, ) -> PoolResult<AddedTransaction<TempoPooledTransaction>>

Adds an expiring nonce transaction to the pool.

Expiring nonce transactions use the expiring nonce hash as their unique identifier instead of (sender, nonce_key, nonce). They are always immediately pending since they don’t have sequential nonce dependencies.

Source

pub(crate) fn pending_and_queued_txn_count(&self) -> (usize, usize)

Returns how many pending and queued transactions are in the pool.

Source

pub(crate) fn get_transactions_by_origin_iter( &self, origin: TransactionOrigin, ) -> impl Iterator<Item = Arc<ValidPoolTransaction<TempoPooledTransaction>>> + '_

Returns all transactions that where submitted with the given [TransactionOrigin]

Source

pub(crate) fn get_pending_transactions_by_origin_iter( &self, origin: TransactionOrigin, ) -> impl Iterator<Item = Arc<ValidPoolTransaction<TempoPooledTransaction>>> + '_

Returns all transactions that where submitted with the given [TransactionOrigin]

Source

pub(crate) fn get_transactions_by_sender_iter( &self, sender: Address, ) -> impl Iterator<Item = Arc<ValidPoolTransaction<TempoPooledTransaction>>> + '_

Returns all transactions of the address

Source

pub(crate) fn all_transaction_hashes_iter(&self) -> impl Iterator<Item = TxHash>

Returns an iterator over all transaction hashes in this pool

Source

pub(crate) fn queued_transactions( &self, ) -> impl Iterator<Item = Arc<ValidPoolTransaction<TempoPooledTransaction>>>

Returns all transactions from that are queued.

Source

pub(crate) fn pending_transactions( &self, ) -> impl Iterator<Item = Arc<ValidPoolTransaction<TempoPooledTransaction>>> + '_

Returns all transactions that are pending.

Source

pub(crate) fn best_transactions(&self) -> BestAA2dTransactions

Returns the best, executable transactions for this sub-pool

Source

pub(crate) fn get( &self, tx_hash: &TxHash, ) -> Option<Arc<ValidPoolTransaction<TempoPooledTransaction>>>

Returns the transaction by hash.

Source

pub(crate) fn get_all<'a, I>( &self, tx_hashes: I, ) -> Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>
where I: Iterator<Item = &'a TxHash> + 'a,

Returns the transaction by hash.

Source

pub(crate) fn append_pooled_transaction_elements<'a>( &self, tx_hashes: impl IntoIterator<Item = &'a TxHash>, limit: GetPooledTransactionLimit, accumulated_size: &mut usize, out: &mut Vec<<TempoPooledTransaction as PoolTransaction>::Pooled>, )

Returns pooled transaction elements for the given hashes while respecting the size limit.

This method collects transactions from the pool, converts them to pooled format, and tracks the accumulated size. It stops collecting when the limit is exceeded.

The accumulated_size is updated with the total encoded size of returned transactions.

Source

pub(crate) fn senders_iter(&self) -> impl Iterator<Item = &Address>

Returns an iterator over all senders in this pool.

Source

fn descendant_txs<'a, 'b: 'a>( &'a self, id: &'b AA2dTransactionId, ) -> impl Iterator<Item = (&'a AA2dTransactionId, &'a Arc<AA2dInternalTransaction>)> + 'a

Returns all transactions that follow after the given id but have the same sender.

NOTE: The range is inclusive: if the transaction that belongs to id it will be the first value.

Source

fn descendant_txs_exclusive<'a, 'b: 'a>( &'a self, id: &'b AA2dTransactionId, ) -> impl Iterator<Item = (&'a AA2dTransactionId, &'a Arc<AA2dInternalTransaction>)> + 'a

Returns all transactions that follow after the given id and have the same sender.

NOTE: The range is exclusive

Source

fn remove_transaction_by_id( &mut self, id: &AA2dTransactionId, ) -> Option<Arc<ValidPoolTransaction<TempoPooledTransaction>>>

Removes the transaction with the given id from all sets.

This does not shift the independent transaction forward or mark descendants as pending.

Source

fn decrement_sender_count(&mut self, sender: Address)

Decrements the transaction count for a sender, removing the entry if it reaches zero.

Source

fn remove_independent( &mut self, id: &AA2dTransactionId, ) -> Option<PendingTransaction<CoinbaseTipOrdering<TempoPooledTransaction>>>

Removes the independent transaction if it matches the given id.

Source

pub(crate) fn remove_transactions<'a, I>( &mut self, tx_hashes: I, ) -> Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>
where I: Iterator<Item = &'a TxHash> + 'a,

Removes the transaction by its hash from all internal sets.

This batches demotion by seq_id to avoid O(N*N) complexity when removing many transactions from the same sequence.

Source

fn remove_transaction_by_hash( &mut self, tx_hash: &B256, ) -> Option<Arc<ValidPoolTransaction<TempoPooledTransaction>>>

Removes the transaction by its hash from all internal sets.

This does not shift the independent transaction forward but it does demote descendants to queued status since removing a transaction creates a nonce gap.

Source

fn remove_transaction_by_hash_no_demote( &mut self, tx_hash: &B256, ) -> Option<(Arc<ValidPoolTransaction<TempoPooledTransaction>>, Option<AA2dTransactionId>)>

Internal helper that removes a transaction without demoting descendants.

Returns the removed transaction and its AA2dTransactionId (if it was a 2D nonce tx).

Source

fn demote_descendants(&mut self, id: &AA2dTransactionId)

Demotes all descendants of the given transaction to queued status (is_pending = false).

This should be called after removing a transaction to ensure descendants don’t remain marked as pending when they’re no longer executable due to the nonce gap.

Source

fn demote_from_nonce(&self, seq_id: &AASequenceId, min_nonce: u64)

Demotes all transactions for a seq_id with nonce > min_nonce to queued status.

This is used both for single-tx removal (demote_descendants) and batch removal where we want to demote once per seq_id starting from the minimum removed nonce.

Source

pub(crate) fn remove_transactions_and_descendants<'a, I>( &mut self, hashes: I, ) -> Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>
where I: Iterator<Item = &'a TxHash> + 'a,

Removes and returns all matching transactions and their dependent transactions from the pool.

Source

pub(crate) fn remove_transactions_by_sender( &mut self, sender_id: Address, ) -> Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>

Removes all transactions from the given sender.

Source

fn remove_descendants( &mut self, tx: &AA2dTransactionId, removed: &mut Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>, )

Removes only the descendants of the given transaction from this pool.

All removed transactions are added to the removed vec.

Source

pub(crate) fn on_nonce_changes( &mut self, on_chain_ids: HashMap<AASequenceId, u64>, ) -> (Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>, Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>)

Updates the internal state based on the state changes of the NonceManager NONCE_PRECOMPILE_ADDRESS.

This takes a vec of changed AASequenceId with their current on chain nonce.

This will prune mined transactions and promote unblocked transactions if any, returns (promoted, mined)

Source

fn discard(&mut self) -> Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>

Removes lowest-priority transactions if the pool is above capacity.

This evicts transactions with the lowest priority (based on [CoinbaseTipOrdering]) to prevent DoS attacks where adversaries use vanity addresses with many leading zeroes to avoid eviction.

Evicts queued transactions first (up to queued_limit), then pending if needed. Counts are computed lazily by scanning the eviction set.

Note: Only max_txs is enforced here; max_size is intentionally not checked for 2D pools since the protocol pool already enforces size-based limits as a primary defense.

Source

fn evict_lowest_priority( &mut self, count: usize, evict_pending: bool, ) -> Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>

Evicts the lowest-priority transactions from the pool.

Scans the single eviction set (ordered by priority) and filters by is_pending to find queued or pending transactions to evict. This is a best-effort scan that checks a bool for each transaction.

Source

fn evict_one_pending( &mut self, ) -> Option<Arc<ValidPoolTransaction<TempoPooledTransaction>>>

Evicts one pending transaction, considering both regular 2D and expiring nonce txs. Evicts the transaction with lowest priority; ties broken by submission order (newer first).

Source

fn evict_2d_pending_tx( &mut self, id: &AA2dTransactionId, ) -> Option<Arc<ValidPoolTransaction<TempoPooledTransaction>>>

Evicts a regular 2D pending transaction by ID.

Source

fn evict_expiring_nonce_tx( &mut self, expiring_hash: &B256, ) -> Option<Arc<ValidPoolTransaction<TempoPooledTransaction>>>

Evicts an expiring nonce transaction by hash.

Source

pub fn metrics(&self) -> &AA2dPoolMetrics

Returns a reference to the metrics for this pool

Source

pub(crate) fn remove_included_expiring_nonce_txs<'a>( &mut self, tx_hashes: impl Iterator<Item = &'a TxHash>, ) -> Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>

Removes expiring nonce transactions that were included in a block.

This should be called with the transaction hashes from mined blocks to clean up expiring nonce transactions on inclusion, rather than waiting for expiry.

Source

pub(crate) fn contains(&self, tx_hash: &TxHash) -> bool

Returns true if the transaction with the given hash is already included in this pool.

Source

pub(crate) fn pooled_transactions_hashes_iter( &self, ) -> impl Iterator<Item = TxHash>

Returns hashes of transactions in the pool that can be propagated.

Source

pub(crate) fn pooled_transactions_iter( &self, ) -> impl Iterator<Item = Arc<ValidPoolTransaction<TempoPooledTransaction>>>

Returns transactions in the pool that can be propagated

Source

const fn next_id(&mut self) -> u64

Source

fn record_2d_slot(&mut self, transaction: &TempoPooledTransaction)

Caches the 2D nonce key slot for the given sender and nonce key.

Source

pub(crate) fn on_state_updates( &mut self, state: &AddressMap<BundleAccount>, ) -> (Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>, Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>)

Processes state updates and updates internal state accordingly.

Trait Implementations§

Source§

impl Debug for AA2dPool

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for AA2dPool

Source§

fn default() -> Self

Returns the “default value” for a type. 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
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<TxEnv, T> FromRecoveredTx<&T> for TxEnv
where TxEnv: FromRecoveredTx<T>,

§

fn from_recovered_tx(tx: &&T, sender: Address) -> TxEnv

Builds a [TxEnv] from a transaction and a sender address.
§

impl<TxEnv, T> FromTxWithEncoded<&T> for TxEnv
where TxEnv: FromTxWithEncoded<T>,

§

fn from_encoded_tx(tx: &&T, sender: Address, encoded: Bytes) -> TxEnv

Builds a [TxEnv] from a transaction, its sender, and encoded transaction bytes.
§

impl<T> FutureExt for T

§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
§

impl<T> Instrument for T

§

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

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

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

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

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in [Layered].
§

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

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows 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) -> R
where R: 'a,

Mutably borrows 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
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows 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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows 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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

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

§

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
§

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> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> ServiceExt for T

§

fn propagate_header(self, header: HeaderName) -> PropagateHeader<Self>
where Self: Sized,

Available on crate feature propagate-header only.
Propagate a header from the request to the response. Read more
§

fn add_extension<T>(self, value: T) -> AddExtension<Self, T>
where Self: Sized,

Available on crate feature add-extension only.
Add some shareable value to request extensions. Read more
§

fn map_request_body<F>(self, f: F) -> MapRequestBody<Self, F>
where Self: Sized,

Available on crate feature map-request-body only.
Apply a transformation to the request body. Read more
§

fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>
where Self: Sized,

Available on crate feature map-response-body only.
Apply a transformation to the response body. Read more
§

fn compression(self) -> Compression<Self>
where Self: Sized,

Available on crate features compression-br or compression-deflate or compression-gzip or compression-zstd only.
Compresses response bodies. Read more
§

fn decompression(self) -> Decompression<Self>
where Self: Sized,

Available on crate features decompression-br or decompression-deflate or decompression-gzip or decompression-zstd only.
Decompress response bodies. Read more
§

fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>
where Self: Sized,

Available on crate feature trace only.
High level tracing that classifies responses using HTTP status codes. Read more
§

fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>
where Self: Sized,

Available on crate feature trace only.
High level tracing that classifies responses using gRPC headers. Read more
§

fn follow_redirects(self) -> FollowRedirect<Self>
where Self: Sized,

Available on crate feature follow-redirect only.
Follow redirect resposes using the Standard policy. Read more
§

fn sensitive_headers( self, headers: impl IntoIterator<Item = HeaderName>, ) -> SetSensitiveRequestHeaders<SetSensitiveResponseHeaders<Self>>
where Self: Sized,

Available on crate feature sensitive-headers only.
Mark headers as sensitive on both requests and responses. Read more
§

fn sensitive_request_headers( self, headers: impl IntoIterator<Item = HeaderName>, ) -> SetSensitiveRequestHeaders<Self>
where Self: Sized,

Available on crate feature sensitive-headers only.
Mark headers as sensitive on requests. Read more
§

fn sensitive_response_headers( self, headers: impl IntoIterator<Item = HeaderName>, ) -> SetSensitiveResponseHeaders<Self>
where Self: Sized,

Available on crate feature sensitive-headers only.
Mark headers as sensitive on responses. Read more
§

fn override_request_header<M>( self, header_name: HeaderName, make: M, ) -> SetRequestHeader<Self, M>
where Self: Sized,

Available on crate feature set-header only.
Insert a header into the request. Read more
§

fn append_request_header<M>( self, header_name: HeaderName, make: M, ) -> SetRequestHeader<Self, M>
where Self: Sized,

Available on crate feature set-header only.
Append a header into the request. Read more
§

fn insert_request_header_if_not_present<M>( self, header_name: HeaderName, make: M, ) -> SetRequestHeader<Self, M>
where Self: Sized,

Available on crate feature set-header only.
Insert a header into the request, if the header is not already present. Read more
§

fn override_response_header<M>( self, header_name: HeaderName, make: M, ) -> SetResponseHeader<Self, M>
where Self: Sized,

Available on crate feature set-header only.
Insert a header into the response. Read more
§

fn append_response_header<M>( self, header_name: HeaderName, make: M, ) -> SetResponseHeader<Self, M>
where Self: Sized,

Available on crate feature set-header only.
Append a header into the response. Read more
§

fn insert_response_header_if_not_present<M>( self, header_name: HeaderName, make: M, ) -> SetResponseHeader<Self, M>
where Self: Sized,

Available on crate feature set-header only.
Insert a header into the response, if the header is not already present. Read more
§

fn set_request_id<M>( self, header_name: HeaderName, make_request_id: M, ) -> SetRequestId<Self, M>
where Self: Sized, M: MakeRequestId,

Available on crate feature request-id only.
Add request id header and extension. Read more
§

fn set_x_request_id<M>(self, make_request_id: M) -> SetRequestId<Self, M>
where Self: Sized, M: MakeRequestId,

Available on crate feature request-id only.
Add request id header and extension, using x-request-id as the header name. Read more
§

fn propagate_request_id( self, header_name: HeaderName, ) -> PropagateRequestId<Self>
where Self: Sized,

Available on crate feature request-id only.
Propgate request ids from requests to responses. Read more
§

fn propagate_x_request_id(self) -> PropagateRequestId<Self>
where Self: Sized,

Available on crate feature request-id only.
Propgate request ids from requests to responses, using x-request-id as the header name. Read more
§

fn catch_panic(self) -> CatchPanic<Self, DefaultResponseForPanic>
where Self: Sized,

Available on crate feature catch-panic only.
Catch panics and convert them into 500 Internal Server responses. Read more
§

fn request_body_limit(self, limit: usize) -> RequestBodyLimit<Self>
where Self: Sized,

Available on crate feature limit only.
Intercept requests with over-sized payloads and convert them into 413 Payload Too Large responses. Read more
§

fn trim_trailing_slash(self) -> NormalizePath<Self>
where Self: Sized,

Available on crate feature normalize-path only.
Remove trailing slashes from paths. Read more
§

fn append_trailing_slash(self) -> NormalizePath<Self>
where Self: Sized,

Available on crate feature normalize-path only.
Append trailing slash to paths. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .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
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .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
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. 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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
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
§

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

§

impl<T> MaybeDebug for T
where T: Debug,

§

impl<T> MaybeSend for T
where T: Send,

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: 512 bytes