pub struct AccountKeychain {
pub keys: <Mapping<Address, Mapping<Address, AuthorizedKey>> as StorableType>::Handler,
pub spending_limits: <Mapping<B256, Mapping<Address, U256>> as StorableType>::Handler,
pub transaction_key: <Address as StorableType>::Handler,
pub tx_origin: <Address as StorableType>::Handler,
address: Address,
storage: StorageCtx,
}Fields§
§keys: <Mapping<Address, Mapping<Address, AuthorizedKey>> as StorableType>::Handler§spending_limits: <Mapping<B256, Mapping<Address, U256>> as StorableType>::Handler§transaction_key: <Address as StorableType>::Handler§tx_origin: <Address as StorableType>::Handler§address: Address§storage: StorageCtxImplementations§
Source§impl AccountKeychain
impl AccountKeychain
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates an instance of the precompile.
Caution: This does not initialize the account, see Self::initialize.
fn __new(address: Address) -> Self
fn __initialize(&mut self) -> Result<()>
fn emit_event(&mut self, event: impl IntoLogData) -> Result<()>
pub fn emitted_events(&self) -> &Vec<LogData>
test-utils only.pub fn clear_emitted_events(&mut self)
test-utils only.pub fn assert_emitted_events(&self, expected: Vec<impl IntoLogData>)
test-utils only.Source§impl AccountKeychain
impl AccountKeychain
Sourcepub fn spending_limit_key(account: Address, key_id: Address) -> B256
pub fn spending_limit_key(account: Address, key_id: Address) -> B256
Create a hash key for spending limits mapping from account and keyId.
This is used to access spending_limits[key][token] where key is the result
of this function. The hash combines account and key_id to avoid triple nesting.
Sourcepub fn initialize(&mut self) -> Result<()>
pub fn initialize(&mut self) -> Result<()>
Initializes the account keychain precompile.
Registers a new access key with signature type, expiry, and optional per-token spending limits. Only callable with the account’s main key (not a session key).
§Errors
UnauthorizedCaller— only the main key can authorize/revoke and, for contract callers on T2+,msg.sendermust matchtx.originZeroPublicKey—keyIdcannot be the zero addressExpiryInPast— expiry must be in the future (enforced since T0)KeyAlreadyExists— a key with this ID is already registeredKeyAlreadyRevoked— revoked keys cannot be re-authorizedInvalidSignatureType— must be Secp256k1, P256, or WebAuthn
Sourcepub fn revoke_key(
&mut self,
msg_sender: Address,
call: revokeKeyCall,
) -> Result<()>
pub fn revoke_key( &mut self, msg_sender: Address, call: revokeKeyCall, ) -> Result<()>
Permanently revokes an access key. Once revoked, a key ID can never be re-authorized for
this account, preventing replay of old KeyAuthorization signatures.
§Errors
UnauthorizedCaller— only the main key can authorize/revoke and, for contract callers on T2+,msg.sendermust matchtx.originKeyNotFound— no key registered with this ID
Sourcepub fn update_spending_limit(
&mut self,
msg_sender: Address,
call: updateSpendingLimitCall,
) -> Result<()>
pub fn update_spending_limit( &mut self, msg_sender: Address, call: updateSpendingLimitCall, ) -> Result<()>
Updates the spending limit for a key-token pair. Can also convert an unlimited key into a
limited one. Delegates to load_active_key for existence/revocation checks.
§Errors
UnauthorizedCaller— the transaction wasn’t signed by the main key, or on T2+ contract callers wheremsg.sender != tx.originKeyAlreadyRevoked— the target key has been permanently revokedKeyNotFound— no key is registered under the givenkeyIdKeyExpired— the key’s expiry is at or before the current block timestamp
Sourcepub fn get_key(&self, call: getKeyCall) -> Result<KeyInfo>
pub fn get_key(&self, call: getKeyCall) -> Result<KeyInfo>
Returns key info for the given account-key pair, or a blank entry if inexistent or revoked.
Sourcepub fn get_remaining_limit(&self, call: getRemainingLimitCall) -> Result<U256>
pub fn get_remaining_limit(&self, call: getRemainingLimitCall) -> Result<U256>
Returns the remaining spending limit for a key-token pair, or a blank entry if inexistent or revoked (T2+).
Sourcepub fn get_transaction_key(
&self,
_call: getTransactionKeyCall,
_msg_sender: Address,
) -> Result<Address>
pub fn get_transaction_key( &self, _call: getTransactionKeyCall, _msg_sender: Address, ) -> Result<Address>
Returns the access key used to authorize the current transaction (Address::ZERO = root key).
Sourcepub fn set_transaction_key(&mut self, key_id: Address) -> Result<()>
pub fn set_transaction_key(&mut self, key_id: Address) -> Result<()>
Internal: Set the transaction key (called during transaction validation)
SECURITY CRITICAL: This must be called by the transaction validation logic BEFORE the transaction is executed, to store which key authorized the transaction.
- If key_id is Address::ZERO (main key), this should store Address::ZERO
- If key_id is a specific key address, this should store that key
This creates a secure channel between validation and the precompile to ensure only the main key can authorize/revoke other keys. Uses transient storage, so the key is automatically cleared after the transaction.
Sourcepub fn set_tx_origin(&mut self, origin: Address) -> Result<()>
pub fn set_tx_origin(&mut self, origin: Address) -> Result<()>
Sets the transaction origin (tx.origin) for the current transaction.
Called by the handler before transaction execution. Uses transient storage, so it’s automatically cleared after the transaction.
Sourcefn ensure_admin_caller(&self, msg_sender: Address) -> Result<()>
fn ensure_admin_caller(&self, msg_sender: Address) -> Result<()>
Ensures admin operations are authorized for this caller.
Rules:
- transaction must be signed by the main key (
transaction_key == Address::ZERO) - T2+: caller must match tx.origin
§Errors
UnauthorizedCallerwhen called via an access keyUnauthorizedCalleron T2+ whenmsg.sender != tx.origin- storage read errors from transient key/origin or account metadata lookups
The T2 check prevents transaction-global root-key status from being reused by intermediate contracts (confused-deputy self-administration).
tx_origin is seeded by the handler before validation/execution on in-repo flows.
The zero-origin fallback here exists for out-of-tree integrations that bypass
handler setup.
Sourcefn load_active_key(
&self,
account: Address,
key_id: Address,
) -> Result<AuthorizedKey>
fn load_active_key( &self, account: Address, key_id: Address, ) -> Result<AuthorizedKey>
Load and validate a key exists and is not revoked.
Returns the key if valid, or an error if:
- Key doesn’t exist (expiry == 0)
- Key has been revoked
Note: This does NOT check expiry against current timestamp. Callers should check expiry separately if needed.
Validate keychain authorization (existence, revocation, expiry, and optionally signature type).
§Arguments
account- The account that owns the keykey_id- The key identifier to validatecurrent_timestamp- Current block timestamp for expiry checkexpected_sig_type- The signature type from the actual signature (0=Secp256k1, 1=P256, 2=WebAuthn). PassNoneto skip validation (for backward compatibility pre-T1).
§Errors
KeyAlreadyRevoked— the key has been permanently revokedKeyNotFound— no key is registered under the givenkey_idKeyExpired—current_timestampis at or past the key’s expirySignatureTypeMismatch— the key’s stored type differs fromexpected_sig_type
Sourcepub fn verify_and_update_spending(
&mut self,
account: Address,
key_id: Address,
token: Address,
amount: U256,
) -> Result<()>
pub fn verify_and_update_spending( &mut self, account: Address, key_id: Address, token: Address, amount: U256, ) -> Result<()>
Deducts amount from the key’s remaining spending limit for token, failing if exceeded.
§Errors
KeyAlreadyRevoked— the key has been permanently revokedKeyNotFound— no key is registered under the givenkey_idSpendingLimitExceeded—amountexceeds the key’s remaining limit fortoken
Sourcepub fn refund_spending_limit(
&mut self,
account: Address,
token: Address,
amount: U256,
) -> Result<()>
pub fn refund_spending_limit( &mut self, account: Address, token: Address, amount: U256, ) -> Result<()>
Refund spending limit after a fee refund.
Restores the spending limit by the refunded amount, clamped so it never exceeds the limit that was set when the key was authorized. Should be called after a fee refund to avoid permanently reducing the spending limit.
Authorize a token transfer with access key spending limits.
This method checks if the transaction is using an access key, and if so, verifies and updates the spending limits for that key. Should be called before executing a transfer.
§Errors
KeyAlreadyRevoked— the session key has been permanently revokedKeyNotFound— no key is registered for the current transaction keySpendingLimitExceeded—amountexceeds the key’s remaining limit fortoken
Authorize a token approval with access key spending limits.
This method checks if the transaction is using an access key, and if so, verifies and updates the spending limits for that key. Should be called before executing an approval.
§Errors
KeyAlreadyRevoked— the session key has been permanently revokedKeyNotFound— no key is registered for the current transaction keySpendingLimitExceeded— the approval increase exceeds the remaining limit fortoken
Source§impl AccountKeychain
impl AccountKeychain
Sourcepub fn create_precompile(cfg: &CfgEnv<TempoHardfork>) -> DynPrecompile
pub fn create_precompile(cfg: &CfgEnv<TempoHardfork>) -> DynPrecompile
Creates the EVM precompile for this type.
Trait Implementations§
Source§impl ContractStorage for AccountKeychain
impl ContractStorage for AccountKeychain
Source§fn storage(&self) -> &StorageCtx
fn storage(&self) -> &StorageCtx
Source§fn storage_mut(&mut self) -> &mut StorageCtx
fn storage_mut(&mut self) -> &mut StorageCtx
Source§fn is_initialized(&self) -> Result<bool>
fn is_initialized(&self) -> Result<bool>
Source§impl Default for AccountKeychain
impl Default for AccountKeychain
Source§impl Precompile for AccountKeychain
impl Precompile for AccountKeychain
Auto Trait Implementations§
impl !Freeze for AccountKeychain
impl !RefUnwindSafe for AccountKeychain
impl Send for AccountKeychain
impl !Sync for AccountKeychain
impl Unpin for AccountKeychain
impl UnsafeUnpin for AccountKeychain
impl UnwindSafe for AccountKeychain
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<TxEnv, T> FromRecoveredTx<&T> for TxEnvwhere
TxEnv: FromRecoveredTx<T>,
impl<TxEnv, T> FromRecoveredTx<&T> for TxEnvwhere
TxEnv: FromRecoveredTx<T>,
§fn from_recovered_tx(tx: &&T, sender: Address) -> TxEnv
fn from_recovered_tx(tx: &&T, sender: Address) -> TxEnv
TxEnv] from a transaction and a sender address.§impl<TxEnv, T> FromTxWithEncoded<&T> for TxEnvwhere
TxEnv: FromTxWithEncoded<T>,
impl<TxEnv, T> FromTxWithEncoded<&T> for TxEnvwhere
TxEnv: FromTxWithEncoded<T>,
§fn from_encoded_tx(tx: &&T, sender: Address, encoded: Bytes) -> TxEnv
fn from_encoded_tx(tx: &&T, sender: Address, encoded: Bytes) -> TxEnv
TxEnv] from a transaction, its sender, and encoded transaction bytes.§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].§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<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> ServiceExt for T
impl<T> ServiceExt for T
§fn propagate_header(self, header: HeaderName) -> PropagateHeader<Self>where
Self: Sized,
fn propagate_header(self, header: HeaderName) -> PropagateHeader<Self>where
Self: Sized,
propagate-header only.§fn add_extension<T>(self, value: T) -> AddExtension<Self, T>where
Self: Sized,
fn add_extension<T>(self, value: T) -> AddExtension<Self, T>where
Self: Sized,
add-extension only.§fn map_request_body<F>(self, f: F) -> MapRequestBody<Self, F>where
Self: Sized,
fn map_request_body<F>(self, f: F) -> MapRequestBody<Self, F>where
Self: Sized,
map-request-body only.§fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
map-response-body only.§fn compression(self) -> Compression<Self>where
Self: Sized,
fn compression(self) -> Compression<Self>where
Self: Sized,
compression-br or compression-deflate or compression-gzip or compression-zstd only.§fn decompression(self) -> Decompression<Self>where
Self: Sized,
fn decompression(self) -> Decompression<Self>where
Self: Sized,
decompression-br or decompression-deflate or decompression-gzip or decompression-zstd only.§fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
trace only.§fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
trace only.§fn follow_redirects(self) -> FollowRedirect<Self>where
Self: Sized,
fn follow_redirects(self) -> FollowRedirect<Self>where
Self: Sized,
follow-redirect only.§fn sensitive_headers(
self,
headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveRequestHeaders<SetSensitiveResponseHeaders<Self>>where
Self: Sized,
fn sensitive_headers(
self,
headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveRequestHeaders<SetSensitiveResponseHeaders<Self>>where
Self: Sized,
sensitive-headers only.§fn sensitive_request_headers(
self,
headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveRequestHeaders<Self>where
Self: Sized,
fn sensitive_request_headers(
self,
headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveRequestHeaders<Self>where
Self: Sized,
sensitive-headers only.§fn sensitive_response_headers(
self,
headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveResponseHeaders<Self>where
Self: Sized,
fn sensitive_response_headers(
self,
headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveResponseHeaders<Self>where
Self: Sized,
sensitive-headers only.§fn override_request_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetRequestHeader<Self, M>where
Self: Sized,
fn override_request_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetRequestHeader<Self, M>where
Self: Sized,
set-header only.§fn append_request_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetRequestHeader<Self, M>where
Self: Sized,
fn append_request_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetRequestHeader<Self, M>where
Self: Sized,
set-header only.§fn insert_request_header_if_not_present<M>(
self,
header_name: HeaderName,
make: M,
) -> SetRequestHeader<Self, M>where
Self: Sized,
fn insert_request_header_if_not_present<M>(
self,
header_name: HeaderName,
make: M,
) -> SetRequestHeader<Self, M>where
Self: Sized,
set-header only.§fn override_response_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetResponseHeader<Self, M>where
Self: Sized,
fn override_response_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetResponseHeader<Self, M>where
Self: Sized,
set-header only.§fn append_response_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetResponseHeader<Self, M>where
Self: Sized,
fn append_response_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetResponseHeader<Self, M>where
Self: Sized,
set-header only.§fn insert_response_header_if_not_present<M>(
self,
header_name: HeaderName,
make: M,
) -> SetResponseHeader<Self, M>where
Self: Sized,
fn insert_response_header_if_not_present<M>(
self,
header_name: HeaderName,
make: M,
) -> SetResponseHeader<Self, M>where
Self: Sized,
set-header only.§fn set_request_id<M>(
self,
header_name: HeaderName,
make_request_id: M,
) -> SetRequestId<Self, M>where
Self: Sized,
M: MakeRequestId,
fn set_request_id<M>(
self,
header_name: HeaderName,
make_request_id: M,
) -> SetRequestId<Self, M>where
Self: Sized,
M: MakeRequestId,
request-id only.§fn set_x_request_id<M>(self, make_request_id: M) -> SetRequestId<Self, M>where
Self: Sized,
M: MakeRequestId,
fn set_x_request_id<M>(self, make_request_id: M) -> SetRequestId<Self, M>where
Self: Sized,
M: MakeRequestId,
request-id only.x-request-id as the header name. Read more§fn propagate_request_id(
self,
header_name: HeaderName,
) -> PropagateRequestId<Self>where
Self: Sized,
fn propagate_request_id(
self,
header_name: HeaderName,
) -> PropagateRequestId<Self>where
Self: Sized,
request-id only.§fn propagate_x_request_id(self) -> PropagateRequestId<Self>where
Self: Sized,
fn propagate_x_request_id(self) -> PropagateRequestId<Self>where
Self: Sized,
request-id only.x-request-id as the header name. Read more§fn catch_panic(self) -> CatchPanic<Self, DefaultResponseForPanic>where
Self: Sized,
fn catch_panic(self) -> CatchPanic<Self, DefaultResponseForPanic>where
Self: Sized,
catch-panic only.500 Internal Server responses. Read more§fn request_body_limit(self, limit: usize) -> RequestBodyLimit<Self>where
Self: Sized,
fn request_body_limit(self, limit: usize) -> RequestBodyLimit<Self>where
Self: Sized,
limit only.413 Payload Too Large responses. Read more§fn trim_trailing_slash(self) -> NormalizePath<Self>where
Self: Sized,
fn trim_trailing_slash(self) -> NormalizePath<Self>where
Self: Sized,
normalize-path only.§fn append_trailing_slash(self) -> NormalizePath<Self>where
Self: Sized,
fn append_trailing_slash(self) -> NormalizePath<Self>where
Self: Sized,
normalize-path only.§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,
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: 376 bytes