struct Analyzer<'ctx, 's, 'c, 'gcx> {Show 16 fields
ctx: &'ctx LintContext<'s, 'c>,
gcx: Gcx<'gcx>,
emitted: HashSet<Span>,
emitted_balance: HashSet<Span>,
call_stack: Vec<FunctionId>,
inline_cache: HelperAnalysisCache<InlineCallKey, (FlowState, Vec<BalanceValue>)>,
recursive_cuts: HashMap<(FunctionId, BTreeSet<FunctionId>), Option<FunctionId>>,
direct_internal_calls: HashMap<FunctionId, Vec<FunctionId>>,
reentrancy_eth_enabled: bool,
reentrancy_no_eth_enabled: bool,
reentrancy_balance_enabled: bool,
balance_only_analysis: bool,
call_balance_values: HashMap<Span, Vec<BalanceValue>>,
return_collectors: Vec<(FunctionId, Vec<BalanceValue>)>,
active_balance_guards: Vec<VariableId>,
balance_reentry_lock: Option<VariableId>,
}Fields§
§ctx: &'ctx LintContext<'s, 'c>§gcx: Gcx<'gcx>§emitted: HashSet<Span>§emitted_balance: HashSet<Span>§call_stack: Vec<FunctionId>§inline_cache: HelperAnalysisCache<InlineCallKey, (FlowState, Vec<BalanceValue>)>§recursive_cuts: HashMap<(FunctionId, BTreeSet<FunctionId>), Option<FunctionId>>First function on the given call stack reachable again from a callee, per callee.
direct_internal_calls: HashMap<FunctionId, Vec<FunctionId>>§reentrancy_eth_enabled: bool§reentrancy_no_eth_enabled: bool§reentrancy_balance_enabled: bool§balance_only_analysis: boolSet while re-running code only to refine the balance analysis.
call_balance_values: HashMap<Span, Vec<BalanceValue>>Balance facts about the return values of each analysed internal call site.
return_collectors: Vec<(FunctionId, Vec<BalanceValue>)>Return-value accumulators of the internal calls currently being inlined.
active_balance_guards: Vec<VariableId>Reentrancy-guard locks held by the modifiers wrapping the code being analysed.
balance_reentry_lock: Option<VariableId>The lock guarding every entry point of each deployable contract, if any.
Implementations§
Source§impl<'ctx, 's, 'c, 'gcx> Analyzer<'ctx, 's, 'c, 'gcx>
impl<'ctx, 's, 'c, 'gcx> Analyzer<'ctx, 's, 'c, 'gcx>
fn new( ctx: &'ctx LintContext<'s, 'c>, gcx: Gcx<'gcx>, entry: &'gcx Function<'gcx>, ) -> Self
const fn has_enabled_lints(&self) -> bool
Sourcefn analyze_callable(
&mut self,
func: &'gcx Function<'gcx>,
body: Block<'gcx>,
state: &mut FlowState,
) -> bool
fn analyze_callable( &mut self, func: &'gcx Function<'gcx>, body: Block<'gcx>, state: &mut FlowState, ) -> bool
Analyses func (modifiers first, then body); returns whether it can fall through.
fn analyze_modifier_chain( &mut self, modifiers: &'gcx [Modifier<'gcx>], index: usize, body: Block<'gcx>, state: &mut FlowState, ) -> bool
Sourcefn analyze_iteration(
&mut self,
block: Block<'gcx>,
source: LoopSource<'gcx>,
placeholder: Option<(&'gcx [Modifier<'gcx>], usize, Block<'gcx>, Option<VariableId>)>,
state: &mut FlowState,
) -> bool
fn analyze_iteration( &mut self, block: Block<'gcx>, source: LoopSource<'gcx>, placeholder: Option<(&'gcx [Modifier<'gcx>], usize, Block<'gcx>, Option<VariableId>)>, state: &mut FlowState, ) -> bool
Analyzes one loop iteration: the body, then the for update if the body completes.
fn analyze_block( &mut self, block: Block<'gcx>, placeholder: Option<(&'gcx [Modifier<'gcx>], usize, Block<'gcx>, Option<VariableId>)>, state: &mut FlowState, ) -> bool
Sourcefn analyze_stmt(
&mut self,
stmt: &'gcx Stmt<'gcx>,
placeholder: Option<(&'gcx [Modifier<'gcx>], usize, Block<'gcx>, Option<VariableId>)>,
state: &mut FlowState,
) -> bool
fn analyze_stmt( &mut self, stmt: &'gcx Stmt<'gcx>, placeholder: Option<(&'gcx [Modifier<'gcx>], usize, Block<'gcx>, Option<VariableId>)>, state: &mut FlowState, ) -> bool
Analyses stmt; returns whether control can continue past it.
Sourcefn split_on(
&self,
cond: &'gcx Expr<'gcx>,
then_state: &mut FlowState,
else_state: &mut FlowState,
) -> (bool, bool)
fn split_on( &self, cond: &'gcx Expr<'gcx>, then_state: &mut FlowState, else_state: &mut FlowState, ) -> (bool, bool)
Constrains the branch states of a conditional on cond; returns whether each is reachable.
fn analyze_expr(&mut self, expr: &'gcx Expr<'gcx>, state: &mut FlowState)
Sourcefn analyze_lhs_indices(&mut self, expr: &'gcx Expr<'gcx>, state: &mut FlowState)
fn analyze_lhs_indices(&mut self, expr: &'gcx Expr<'gcx>, state: &mut FlowState)
Evaluates the index and slice operands of an lvalue; the written root itself is no read.
Sourcefn record_write(&mut self, lhs: &'gcx Expr<'gcx>, state: &mut FlowState)
fn record_write(&mut self, lhs: &'gcx Expr<'gcx>, state: &mut FlowState)
Handles a write to lhs: reports pending reentrant calls that read the written state,
invalidates written guard locks and forgets path facts about written locals.
fn analyze_internal_call( &mut self, func_id: FunctionId, args: &CallArgs<'gcx>, state: &mut FlowState, ) -> Vec<BalanceValue>
Sourcefn internal_callees(
&self,
callee: &'gcx Expr<'gcx>,
state: &FlowState,
) -> BTreeSet<FunctionId>
fn internal_callees( &self, callee: &'gcx Expr<'gcx>, state: &FlowState, ) -> BTreeSet<FunctionId>
Internal functions a call through callee may reach, following function-typed locals.
fn update_internal_function_target( &self, state: &mut FlowState, var_id: VariableId, value: &'gcx Expr<'gcx>, )
fn merge_call_balance_values(&mut self, span: Span, values: Vec<BalanceValue>)
fn analyze_with_only_balance<T>(&mut self, f: impl FnOnce(&mut Self) -> T) -> T
fn first_recursive_cut(&mut self, func_id: FunctionId) -> Option<FunctionId>
Sourcefn first_recursive_cut_from(
&mut self,
func_id: FunctionId,
active: &BTreeSet<FunctionId>,
seen: &mut HashSet<FunctionId>,
) -> Option<FunctionId>
fn first_recursive_cut_from( &mut self, func_id: FunctionId, active: &BTreeSet<FunctionId>, seen: &mut HashSet<FunctionId>, ) -> Option<FunctionId>
Depth-first search from func_id for the first callee that is currently active.
Sourcefn direct_internal_calls(&mut self, func_id: FunctionId) -> Vec<FunctionId>
fn direct_internal_calls(&mut self, func_id: FunctionId) -> Vec<FunctionId>
Internal functions and modifiers func_id invokes directly.
fn emit_pending_calls(&mut self, state: &FlowState, written_vars: &[VariableId])
Sourcefn emit_balance_calls(&mut self, guard: &'gcx Expr<'gcx>, state: &FlowState)
fn emit_balance_calls(&mut self, guard: &'gcx Expr<'gcx>, state: &FlowState)
Reports pending balance calls whose stale balance guard compares against.
Sourcefn guard_has_stale_balance_comparison(
&self,
expr: &'gcx Expr<'gcx>,
span: Span,
call: &BTreeSet<BTreeMap<PathPredicate, bool>>,
state: &FlowState,
) -> bool
fn guard_has_stale_balance_comparison( &self, expr: &'gcx Expr<'gcx>, span: Span, call: &BTreeSet<BTreeMap<PathPredicate, bool>>, state: &FlowState, ) -> bool
True if expr compares a balance read before the pending call against one read after.
Sourcefn bind_locals(
&mut self,
state: &mut FlowState,
targets: &[Option<VariableId>],
rhs: &'gcx Expr<'gcx>,
op: Option<BinOpKind>,
)
fn bind_locals( &mut self, state: &mut FlowState, targets: &[Option<VariableId>], rhs: &'gcx Expr<'gcx>, op: Option<BinOpKind>, )
Binds the components of rhs to the local targets they are assigned to.
fn set_self_address_paths( &self, state: &mut FlowState, var_id: VariableId, paths: BTreeSet<BTreeMap<PathPredicate, bool>>, )
Sourcefn set_balance_local(
&self,
state: &mut FlowState,
var_id: VariableId,
value: &BalanceValue,
op: Option<BinOpKind>,
)
fn set_balance_local( &self, state: &mut FlowState, var_id: VariableId, value: &BalanceValue, op: Option<BinOpKind>, )
Makes var_id hold value; a compound assignment also keeps what the local held before.
Sourcefn balance_values(
&self,
rhs: &'gcx Expr<'gcx>,
state: &FlowState,
) -> Vec<BalanceValue>
fn balance_values( &self, rhs: &'gcx Expr<'gcx>, state: &FlowState, ) -> Vec<BalanceValue>
Balance facts of each component of rhs, one per destructuring target.
fn balance_dependency( &self, expr: &'gcx Expr<'gcx>, state: &FlowState, ) -> BalanceValue
Sourcefn self_address_path(
&self,
expr: &Expr<'_>,
state: &FlowState,
) -> BTreeSet<BTreeMap<PathPredicate, bool>>
fn self_address_path( &self, expr: &Expr<'_>, state: &FlowState, ) -> BTreeSet<BTreeMap<PathPredicate, bool>>
Predicates under which expr evaluates to address(this).
Sourcefn self_balance_paths(
&self,
expr: &Expr<'_>,
state: &FlowState,
) -> BTreeSet<BTreeMap<PathPredicate, bool>>
fn self_balance_paths( &self, expr: &Expr<'_>, state: &FlowState, ) -> BTreeSet<BTreeMap<PathPredicate, bool>>
Predicates under which expr is <self address>.balance.
Sourcefn expr_balance_paths(
&self,
expr: &'gcx Expr<'gcx>,
state: &FlowState,
) -> BTreeSet<BTreeMap<PathPredicate, bool>>
fn expr_balance_paths( &self, expr: &'gcx Expr<'gcx>, state: &FlowState, ) -> BTreeSet<BTreeMap<PathPredicate, bool>>
Predicates under which expr derives from the contract’s own balance.
Sourcefn balance_operand_dependencies(
&self,
expr: &'gcx Expr<'gcx>,
state: &FlowState,
) -> BTreeSet<BalanceForm>
fn balance_operand_dependencies( &self, expr: &'gcx Expr<'gcx>, state: &FlowState, ) -> BTreeSet<BalanceForm>
Retains balance occurrences across comparison operands without assuming arithmetic identities.
Sourcefn balance_forms(
&self,
expr: &'gcx Expr<'gcx>,
state: &FlowState,
) -> BTreeSet<BalanceForm>
fn balance_forms( &self, expr: &'gcx Expr<'gcx>, state: &FlowState, ) -> BTreeSet<BalanceForm>
Preserves balance terms through addition/subtraction and value-preserving integer casts. Other operators may form independent offsets, but cannot transform balance terms. Unsupported expressions return no forms, rather than an independent offset.
Sourcefn seed_balance_parameters(
&mut self,
func_id: FunctionId,
args: &CallArgs<'gcx>,
state: &mut FlowState,
)
fn seed_balance_parameters( &mut self, func_id: FunctionId, args: &CallArgs<'gcx>, state: &mut FlowState, )
Binds the balance facts of the call arguments to the callee’s parameters.
fn clear_local(&self, state: &mut FlowState, var_id: VariableId)
Sourcefn record_return(&mut self, expr: Option<&'gcx Expr<'gcx>>, state: &FlowState)
fn record_return(&mut self, expr: Option<&'gcx Expr<'gcx>>, state: &FlowState)
Accumulates the values returned by return expr; (or the named return variables when
the function falls through) into the innermost return collector.
Sourcefn local_value(&self, var_id: VariableId, state: &FlowState) -> BalanceValue
fn local_value(&self, var_id: VariableId, state: &FlowState) -> BalanceValue
The balance facts currently recorded for the local var_id.
Sourcefn clear_function_locals(&self, func_id: FunctionId, state: &mut FlowState)
fn clear_function_locals(&self, func_id: FunctionId, state: &mut FlowState)
Drops every fact about locals of func_id once its inlined body is left.
fn reentrant_call_kind( &self, callee: &'gcx Expr<'gcx>, opts: Option<&CallOptions<'gcx>>, ) -> Option<ReentrantCallKind>
Sourcefn balance_guard_blocks_call(
&self,
state: &FlowState,
callee: &'gcx Expr<'gcx>,
) -> bool
fn balance_guard_blocks_call( &self, state: &FlowState, callee: &'gcx Expr<'gcx>, ) -> bool
True if the contract-wide reentrancy lock is held and intact around the call.
Auto Trait Implementations§
impl<'ctx, 's, 'c, 'gcx> !RefUnwindSafe for Analyzer<'ctx, 's, 'c, 'gcx>
impl<'ctx, 's, 'c, 'gcx> !Send for Analyzer<'ctx, 's, 'c, 'gcx>
impl<'ctx, 's, 'c, 'gcx> !Sync for Analyzer<'ctx, 's, 'c, 'gcx>
impl<'ctx, 's, 'c, 'gcx> !UnwindSafe for Analyzer<'ctx, 's, 'c, 'gcx>
impl<'ctx, 's, 'c, 'gcx> Freeze for Analyzer<'ctx, 's, 'c, 'gcx>
impl<'ctx, 's, 'c, 'gcx> Unpin for Analyzer<'ctx, 's, 'c, 'gcx>
impl<'ctx, 's, 'c, 'gcx> UnsafeUnpin for Analyzer<'ctx, 's, 'c, '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
§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: 472 bytes