struct Cx<'gcx> {
gcx: Gcx<'gcx>,
}Expand description
The analysis context.
Fields§
§gcx: Gcx<'gcx>Implementations§
Source§impl<'gcx> Cx<'gcx>
impl<'gcx> Cx<'gcx>
Sourcefn is_override_delegation_helper(self, function: &'gcx Function<'gcx>) -> bool
fn is_override_delegation_helper(self, function: &'gcx Function<'gcx>) -> bool
Whether an internal/private function is reached from a user _mint override of a
derived contract, making it part of the mint primitive rather than a call site.
Sourcefn function_reaches(
self,
function_id: FunctionId,
target: FunctionId,
seen: &mut Vec<FunctionId>,
) -> bool
fn function_reaches( self, function_id: FunctionId, target: FunctionId, seen: &mut Vec<FunctionId>, ) -> bool
Whether function_id calls target, directly or through internal functions.
Sourcefn unsafe_mint_target(
self,
function_id: FunctionId,
helper: bool,
seen: &mut Vec<FunctionId>,
) -> Option<UnsafeMintTarget>
fn unsafe_mint_target( self, function_id: FunctionId, helper: bool, seen: &mut Vec<FunctionId>, ) -> Option<UnsafeMintTarget>
Whether function_id is a _mint whose execution skips the receiver check: the
canonical OZ declaration (exact OZ contract name AND an OpenZeppelin source path, so a
local contract reusing a name like ERC721Consecutive stays out), or a user override
whose body calls a _mint that is itself unsafe (the capped/pausable pattern forwarding
through super._mint). An override whose successful paths prove the recipient code-less
or reject it after the delegation is a safe wrapper like canonical _safeMint. seen
cuts override cycles, which never reach the canonical declaration.
Sourcefn any_in_stmts(
self,
stmts: &'gcx [Stmt<'gcx>],
stmt_matches: impl FnMut(&'gcx Stmt<'gcx>) -> bool,
expr_matches: impl FnMut(&'gcx Expr<'gcx>) -> bool,
) -> bool
fn any_in_stmts( self, stmts: &'gcx [Stmt<'gcx>], stmt_matches: impl FnMut(&'gcx Stmt<'gcx>) -> bool, expr_matches: impl FnMut(&'gcx Expr<'gcx>) -> bool, ) -> bool
Runs stmt_matches/expr_matches over a subtree and reports whether either held.
fn any_in_expr( self, expr: &'gcx Expr<'gcx>, expr_matches: impl FnMut(&'gcx Expr<'gcx>) -> bool, ) -> bool
Sourcefn calls(
self,
stmts: &'gcx [Stmt<'gcx>],
) -> Vec<(FunctionId, &'gcx CallArgs<'gcx>, Span)>
fn calls( self, stmts: &'gcx [Stmt<'gcx>], ) -> Vec<(FunctionId, &'gcx CallArgs<'gcx>, Span)>
Every resolved call in a subtree, in source order.
Sourcefn resolved_callee(self, expr: &Expr<'_>) -> Option<FunctionId>
fn resolved_callee(self, expr: &Expr<'_>) -> Option<FunctionId>
The function a call expression dispatches to, as the type checker resolved it.
fn callee_fn(self, expr: &Expr<'_>) -> Option<&'gcx TyFn<'gcx>>
Sourcefn resolved_internal_callee(self, expr: &Expr<'_>) -> Option<FunctionId>
fn resolved_internal_callee(self, expr: &Expr<'_>) -> Option<FunctionId>
The declaration a call executes in the current EVM frame. A public function called by
name is internal here, while this.f() and other external calls run in another frame
whose assembly return cannot bypass the caller’s later statements.
Sourcefn is_unresolved_internal_pointer_call(self, expr: &Expr<'_>) -> bool
fn is_unresolved_internal_pointer_call(self, expr: &Expr<'_>) -> bool
Whether a call dispatches through an internal function-pointer variable whose target is not available from the callee type. Such a target may contain assembly that leaves the frame, so exit analysis must treat the call conservatively.
Sourcefn arg(
self,
function_id: FunctionId,
args: &'gcx CallArgs<'gcx>,
index: usize,
) -> Option<&'gcx Expr<'gcx>>
fn arg( self, function_id: FunctionId, args: &'gcx CallArgs<'gcx>, index: usize, ) -> Option<&'gcx Expr<'gcx>>
The argument a call binds to the callee’s parameter at index, positional or named.
Sourcefn is_receiver_hook(self, function_id: FunctionId) -> bool
fn is_receiver_hook(self, function_id: FunctionId) -> bool
Whether a resolved declaration is the ERC721 receiver hook: the exact name, the exact
(address, address, uint256, bytes) shape, and an externally callable declaration of a
non-library contract. A same-name function of an unrelated interface answers on a
different selector, and an attached library or free function runs in the minting
contract without any external call.
Sourcefn is_received_selector(self, expr: &Expr<'gcx>) -> bool
fn is_received_selector(self, expr: &Expr<'gcx>) -> bool
Whether an expression is the accepting answer, onERC721Received’s selector: the
literal, a conversion of it, a constant holding it, or a selector member resolving to
the receiver hook itself. The member is resolved rather than matched by name: spelled on
a same-name function of another shape, .selector is a different value. An immutable
or a state variable is unknown here and does not exempt.
Sourcefn selector_cast_preserves(self, cast: &Expr<'_>, inner: &Expr<'_>) -> bool
fn selector_cast_preserves(self, cast: &Expr<'_>, inner: &Expr<'_>) -> bool
Whether a cast preserves the recognized selector’s value and byte alignment. A recognized integer is exactly the positive selector, so any integer width of at least 32 bits keeps it. Fixed bytes are left-aligned while integers are right-aligned, so crossing between them is only trusted at the four-byte boundary.
Sourcefn branch_always_reverts(self, stmt: &'gcx Stmt<'gcx>) -> bool
fn branch_always_reverts(self, stmt: &'gcx Stmt<'gcx>) -> bool
Whether executing stmt always reverts, undoing everything the transaction did. Only a
revert counts, see Self::may_return for the escapes that leave the transaction
standing.
Sourcefn may_return(self, stmt: &'gcx Stmt<'gcx>) -> bool
fn may_return(self, stmt: &'gcx Stmt<'gcx>) -> bool
Whether a statement may leave the function while keeping what the transaction already
did: a return, or the EVM return/stop an assembly block can hold. Only statements
that provably cannot leave answer no.
Sourcefn contains_frame_ending_assembly(
self,
stmts: &'gcx [Stmt<'gcx>],
seen: &mut Vec<FunctionId>,
) -> bool
fn contains_frame_ending_assembly( self, stmts: &'gcx [Stmt<'gcx>], seen: &mut Vec<FunctionId>, ) -> bool
Whether a subtree can reach an assembly block in the same EVM frame, directly or through
an internal call. An assembly return leaves the frame without running a later revert or
what an outer modifier holds after its placeholder. Every assembly block is treated as
capable of doing so.
fn expr_contains_frame_ending_assembly(self, expr: &'gcx Expr<'gcx>) -> bool
fn call_leaves_frame(self, expr: &Expr<'_>, seen: &mut Vec<FunctionId>) -> bool
Sourcefn callable_contains_frame_ending_assembly(
self,
function_id: FunctionId,
seen: &mut Vec<FunctionId>,
) -> bool
fn callable_contains_frame_ending_assembly( self, function_id: FunctionId, seen: &mut Vec<FunctionId>, ) -> bool
Whether a same-frame callable or one of its applied modifiers can reach assembly. The recursion set is a path stack so independent calls are summarized independently.
Sourcefn mutates_var(self, stmt: &'gcx Stmt<'gcx>, var: VariableId) -> bool
fn mutates_var(self, stmt: &'gcx Stmt<'gcx>, var: VariableId) -> bool
Whether a statement assigns to var: var = x, var += x, var++, delete var, or
var as a component of a tuple assignment. An assembly block is treated as an opaque
assignment, since it can rewrite Solidity locals outside the HIR expression tree.
Identity is by variable, not by value, so a guard that checked var says nothing once
var is reassigned.
fn expr_mutates_var(self, expr: &'gcx Expr<'gcx>, var: VariableId) -> bool
Sourcefn stmts_may_change_account_code(
self,
stmts: &'gcx [Stmt<'gcx>],
delegations: &[FunctionId],
unstable_code_delegations: &[FunctionId],
seen: &mut Vec<FunctionId>,
) -> bool
fn stmts_may_change_account_code( self, stmts: &'gcx [Stmt<'gcx>], delegations: &[FunctionId], unstable_code_delegations: &[FunctionId], seen: &mut Vec<FunctionId>, ) -> bool
Whether a subtree may change the code installed at an account. Inline assembly is opaque and may deploy code even when it contains no HIR call expression.
fn expr_may_change_account_code( self, expr: &'gcx Expr<'gcx>, delegations: &[FunctionId], unstable_code_delegations: &[FunctionId], seen: &mut Vec<FunctionId>, ) -> bool
Sourcefn call_may_change_account_code(
self,
expr: &Expr<'_>,
delegations: &[FunctionId],
unstable_code_delegations: &[FunctionId],
seen: &mut Vec<FunctionId>,
) -> bool
fn call_may_change_account_code( self, expr: &Expr<'_>, delegations: &[FunctionId], unstable_code_delegations: &[FunctionId], seen: &mut Vec<FunctionId>, ) -> bool
Whether a call may change the code installed at an account. Pure and view calls are
stable (external ones execute through STATICCALL), while nonpayable/payable calls and
contract creation can run CREATE/CREATE2. Calls to the delegated mint itself are
excluded unless it is recursively unstable: the code-length proof is needed precisely
until that call begins.
Sourcefn callable_may_change_account_code(
self,
function_id: FunctionId,
seen: &mut Vec<FunctionId>,
) -> bool
fn callable_may_change_account_code( self, function_id: FunctionId, seen: &mut Vec<FunctionId>, ) -> bool
Whether a statically known same-frame callable can create code, directly, through an applied modifier, or through another internal call. Recursion cycles alone do not create code; any opaque, virtual, or external state-changing call reached remains conservative.
Sourcefn bound_guard_parameters(
self,
function_id: FunctionId,
args: &'gcx CallArgs<'gcx>,
recipient: VariableId,
token: VariableId,
) -> Option<(VariableId, VariableId)>
fn bound_guard_parameters( self, function_id: FunctionId, args: &'gcx CallArgs<'gcx>, recipient: VariableId, token: VariableId, ) -> Option<(VariableId, VariableId)>
The callee parameters that receive the caller’s recipient and token identities.
Sourcefn body_guards(
self,
function_id: FunctionId,
recipient: VariableId,
token: VariableId,
seen: &mut Vec<FunctionId>,
) -> GuardCoverage
fn body_guards( self, function_id: FunctionId, recipient: VariableId, token: VariableId, seen: &mut Vec<FunctionId>, ) -> GuardCoverage
Guard coverage a callee’s body establishes for the parameters the recipient and the token
landed on: the callee guards when a guard ran before any possible successful exit. seen
cuts recursion cycles.
Sourcefn modifier_coverage_at_body(
self,
function: &'gcx Function<'gcx>,
recipient: VariableId,
token: VariableId,
seed: GuardCoverage,
) -> GuardWalk
fn modifier_coverage_at_body( self, function: &'gcx Function<'gcx>, recipient: VariableId, token: VariableId, seed: GuardCoverage, ) -> GuardWalk
Coverage in effect when a function body starts after expanding its modifiers in declaration order. Prefixes are walked in execution order so calls in an inner modifier can retire an outer code-length snapshot. A proven tail guard is represented as stable callback coverage while walking the body: it runs after the body and can revert every mint the body made, unless assembly in the body or an inner modifier can bypass it.
Trait Implementations§
Auto Trait Implementations§
impl<'gcx> !RefUnwindSafe for Cx<'gcx>
impl<'gcx> !UnwindSafe for Cx<'gcx>
impl<'gcx> Freeze for Cx<'gcx>
impl<'gcx> Send for Cx<'gcx>
impl<'gcx> Sync for Cx<'gcx>
impl<'gcx> Unpin for Cx<'gcx>
impl<'gcx> UnsafeUnpin for Cx<'gcx>
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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for 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> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> 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> MaybeCompact for T
§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling [Attribute] value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi [Quirk] value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the [Condition] value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);§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> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
§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> Threaded<T> for T
impl<T> Threaded<T> for T
§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> ⓘ
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: 8 bytes