pub struct SymbolicExecutor {
pub(crate) config: SymbolicConfig,
pub(crate) cx: SymCx,
pub(crate) solver: Box<dyn SymbolicSolver>,
pub(crate) deferred_incomplete: Option<DeferredIncomplete>,
pub(crate) deadline: Option<Instant>,
}Expand description
SMT-LIB-backed symbolic executor.
This executor is intentionally separate from the concrete revm executor used by
Foundry. It consumes bytecode and state from an existing [Executor], explores
symbolic branches, and returns either a proof result, a counterexample candidate,
or an incomplete result.
Fields§
§config: SymbolicConfig§cx: SymCx§solver: Box<dyn SymbolicSolver>§deferred_incomplete: Option<DeferredIncomplete>§deadline: Option<Instant>Implementations§
Source§impl SymbolicExecutor
impl SymbolicExecutor
pub(super) fn call( &mut self, executor: &Executor<impl FoundryEvmNetwork>, state: &mut PathState, worklist: &mut VecDeque<PathState>, completed_paths: &mut usize, kind: CallKind, ) -> Result<StepOutcome, SymbolicError>
pub(super) fn branch_symbolic_call_value_if_needed( &mut self, state: &mut PathState, worklist: &mut VecDeque<PathState>, pre_call_state: &PathState, call_pc: usize, to: Address, code_address: Address, value: &SymExpr, gas: &SymExpr, call_input: &SymBytes, ) -> Result<bool, SymbolicError>
pub(super) fn branch_symbolic_function_mock_if_needed( &mut self, state: &mut PathState, worklist: &mut VecDeque<PathState>, pre_call_state: &PathState, call_pc: usize, callee: Address, calldata: &SymBytes, ) -> Result<bool, SymbolicError>
pub(super) fn observe_expected_call( &mut self, state: &mut PathState, callee: Address, value: Option<U256>, gas: &SymExpr, calldata: &SymBytes, ) -> Result<bool, SymbolicError>
pub(super) fn branch_symbolic_call_match_if_needed( &mut self, state: &mut PathState, worklist: &mut VecDeque<PathState>, pre_call_state: &PathState, call_pc: usize, callee: Address, code_address: Address, value: Option<U256>, gas: &SymExpr, calldata: &SymBytes, ) -> Result<bool, SymbolicError>
pub(super) fn take_call_mock( &mut self, state: &mut PathState, callee: Address, value: Option<U256>, calldata: &SymBytes, ) -> Result<Option<CallMockOutcome>, SymbolicError>
pub(super) fn branch_symbolic_match_condition_if_needed( &mut self, state: &mut PathState, worklist: &mut VecDeque<PathState>, pre_call_state: &PathState, call_pc: usize, condition: SymBoolExpr, ) -> Result<bool, SymbolicError>
pub(super) fn function_mock_target( &mut self, state: &mut PathState, callee: Address, calldata: &SymBytes, ) -> Result<Option<Address>, SymbolicError>
pub(super) fn expected_call_match_constraints( &mut self, state: &PathState, expected: &ExpectedCall, callee: Address, value: Option<U256>, gas: &SymExpr, calldata: &SymBytes, ) -> Result<Option<Vec<SymBoolExpr>>, SymbolicError>
pub(super) fn call_mock_match_constraints( &mut self, state: &PathState, mock: &CallMock, callee: Address, value: Option<U256>, calldata: &SymBytes, ) -> Result<Option<Vec<SymBoolExpr>>, SymbolicError>
Sourcepub(super) fn expected_revert_matches(
&mut self,
state: &mut PathState,
expected: &ExpectedRevert,
reverter: Address,
return_data: &SymReturnData,
) -> Result<bool, SymbolicError>
pub(super) fn expected_revert_matches( &mut self, state: &mut PathState, expected: &ExpectedRevert, reverter: Address, return_data: &SymReturnData, ) -> Result<bool, SymbolicError>
Returns whether expected_revert_matches holds.
pub(super) fn assume_no_revert_rejects( &mut self, state: &mut PathState, assumption: &AssumeNoRevert, reverter: Address, return_data: &SymReturnData, ) -> Result<bool, SymbolicError>
pub(super) fn constraints_for_condition( &mut self, state: &PathState, condition: SymBoolExpr, ) -> Result<Option<Vec<SymBoolExpr>>, SymbolicError>
pub(super) fn constraints_with_condition( &mut self, state: &PathState, condition: SymBoolExpr, ) -> Result<(Vec<SymBoolExpr>, bool), SymbolicError>
pub(super) fn take_loop_jump( &self, state: &mut PathState, source_pc: usize, dest: usize, ) -> bool
pub(super) fn handle_log( &mut self, state: &mut PathState, log: SymbolicLog, ) -> Result<StepOutcome, SymbolicError>
Sourcepub(super) fn expected_emit_matches(
&mut self,
state: &mut PathState,
expected: &ExpectedEmit,
template: &SymbolicLog,
actual: &SymbolicLog,
) -> Result<bool, SymbolicError>
pub(super) fn expected_emit_matches( &mut self, state: &mut PathState, expected: &ExpectedEmit, template: &SymbolicLog, actual: &SymbolicLog, ) -> Result<bool, SymbolicError>
Returns whether expected_emit_matches holds.
pub(super) fn call_concrete_target<FEN: FoundryEvmNetwork>( &mut self, executor: &Executor<FEN>, state: &mut PathState, worklist: &mut VecDeque<PathState>, completed_paths: &mut usize, kind: CallKind, to: Address, target_word: Option<SymExpr>, value: SymExpr, gas: SymExpr, in_offset: SymExpr, in_size: BoundedCopySize, out_offset: SymExpr, out_size: BoundedCopySize, ) -> Result<StepOutcome, SymbolicError>
fn execute_kzg_precompile_call<FEN: FoundryEvmNetwork>( &mut self, executor: &Executor<FEN>, state: &mut PathState, worklist: &mut VecDeque<PathState>, kind: CallKind, to: Address, value: SymExpr, out_offset: SymExpr, out_size: &BoundedCopySize, input: Vec<SymExpr>, input_len: SymExpr, ) -> Result<StepOutcome, SymbolicError>
Sourcefn apply_precompile_outcome<FEN: FoundryEvmNetwork>(
&mut self,
executor: &Executor<FEN>,
state: &mut PathState,
kind: CallKind,
to: Address,
value: SymExpr,
out_offset: SymExpr,
out_size: &BoundedCopySize,
outcome: Option<SymReturnData>,
) -> Result<(), SymbolicError>
fn apply_precompile_outcome<FEN: FoundryEvmNetwork>( &mut self, executor: &Executor<FEN>, state: &mut PathState, kind: CallKind, to: Address, value: SymExpr, out_offset: SymExpr, out_size: &BoundedCopySize, outcome: Option<SymReturnData>, ) -> Result<(), SymbolicError>
Applies a precompile call result to the current symbolic state.
pub(super) fn prepare_value_transfer<FEN: FoundryEvmNetwork>( &mut self, executor: &Executor<FEN>, state: &mut PathState, worklist: &mut VecDeque<PathState>, value: SymExpr, out_offset: SymExpr, out_size: &BoundedCopySize, ) -> Result<bool, SymbolicError>
pub(super) fn prepare_create_value_transfer<FEN: FoundryEvmNetwork>( &mut self, executor: &Executor<FEN>, state: &mut PathState, worklist: &mut VecDeque<PathState>, value: SymExpr, ) -> Result<bool, SymbolicError>
pub(super) fn call_symbolic_target<FEN: FoundryEvmNetwork>( &mut self, executor: &Executor<FEN>, state: &mut PathState, worklist: &mut VecDeque<PathState>, completed_paths: &mut usize, kind: CallKind, target: SymExpr, value: SymExpr, gas: SymExpr, in_offset: SymExpr, in_size: BoundedCopySize, out_offset: SymExpr, out_size: BoundedCopySize, ) -> Result<StepOutcome, SymbolicError>
Source§impl SymbolicExecutor
impl SymbolicExecutor
pub(super) fn handle_assertion( &mut self, state: &mut PathState, pass: SymBoolExpr, ) -> Result<CheatcodeOutcome, SymbolicError>
pub(super) fn set_expected_revert( &mut self, state: &mut PathState, data: ExpectedRevertData, reverter: Option<SymExpr>, remaining: u64, ) -> CheatcodeOutcome
pub(super) fn set_expected_emit( &mut self, state: &mut PathState, checks: ExpectedEmitChecks, emitter: Option<SymExpr>, remaining: u64, ) -> CheatcodeOutcome
pub(super) fn set_expected_call( &mut self, state: &mut PathState, callee: SymExpr, value: Option<U256>, gas: Option<u64>, min_gas: Option<u64>, data: SymBytes, count: Option<u64>, ) -> CheatcodeOutcome
pub(super) fn set_expected_create( &mut self, state: &mut PathState, bytecode: Vec<u8>, deployer: SymExpr, kind: CreateKind, ) -> CheatcodeOutcome
pub(super) fn deploy_code_cheatcode_if_needed<FEN: FoundryEvmNetwork>( &mut self, executor: &Executor<FEN>, state: &mut PathState, worklist: &mut VecDeque<PathState>, completed_paths: &mut usize, selector: [u8; 4], in_offset: usize, out_offset: SymExpr, out_size: &BoundedCopySize, ) -> Result<Option<StepOutcome>, SymbolicError>
pub(super) fn deploy_code_cheatcode_call<FEN: FoundryEvmNetwork>( &mut self, executor: &Executor<FEN>, state: &mut PathState, worklist: &mut VecDeque<PathState>, completed_paths: &mut usize, artifact: String, constructor_args: Vec<u8>, out_offset: SymExpr, out_size: &BoundedCopySize, ) -> Result<StepOutcome, SymbolicError>
pub(super) fn observe_expected_create( &mut self, state: &mut PathState, deployer: Address, kind: CreateKind, runtime: &SymReturnData, ) -> Result<(), SymbolicError>
pub(super) fn branch_accesses_cheatcode_if_needed( &mut self, state: &mut PathState, worklist: &mut VecDeque<PathState>, selector: [u8; 4], in_offset: usize, out_offset: SymExpr, out_size: &BoundedCopySize, ) -> Result<Option<StepOutcome>, SymbolicError>
pub(super) fn accesses_return_data_for_target( &mut self, state: &mut PathState, target: SymExpr, ) -> Result<SymReturnData, SymbolicError>
pub(super) fn add_call_mock( &mut self, state: &mut PathState, callee: SymExpr, value: Option<U256>, data: SymBytes, returns: Vec<SymReturnData>, reverts: bool, ) -> CheatcodeOutcome
pub(super) fn set_function_mock( &mut self, state: &mut PathState, callee: SymExpr, target: Address, data: SymBytes, ) -> CheatcodeOutcome
pub(super) fn handle_foundry_cheatcode<FEN: FoundryEvmNetwork>( &mut self, executor: &Executor<FEN>, state: &mut PathState, selector: [u8; 4], in_offset: usize, in_size: usize, ) -> Result<CheatcodeOutcome, SymbolicError>
pub(super) fn handle_symbolic_vm_cheatcode( &mut self, state: &mut PathState, selector: [u8; 4], in_offset: usize, ) -> Result<SymReturnData, SymbolicError>
Source§impl SymbolicExecutor
impl SymbolicExecutor
pub(super) fn handle_assume( &mut self, state: &mut PathState, condition_offset: usize, ) -> Result<CheatcodeOutcome, SymbolicError>
pub(super) fn handle_skip( &mut self, state: &mut PathState, condition_offset: usize, ) -> Result<CheatcodeOutcome, SymbolicError>
pub(super) fn assume_condition( &mut self, state: &mut PathState, condition: SymBoolExpr, ) -> Result<CheatcodeOutcome, SymbolicError>
pub(super) fn solver_upper_bound_usize( &mut self, state: &PathState, expr: &SymExpr, max: usize, reason: &'static str, ) -> Result<usize, SymbolicError>
pub(super) fn assume_expr_at_least( &mut self, state: &mut PathState, expr: &SymExpr, min: usize, ) -> Result<bool, SymbolicError>
Sourcepub(super) fn validate_symbolic_integer_bits(
bits: U256,
context: &'static str,
) -> Result<(), SymbolicError>
pub(super) fn validate_symbolic_integer_bits( bits: U256, context: &'static str, ) -> Result<(), SymbolicError>
Rejects symbolic integer bit widths outside the EVM word size.
pub(super) fn handle_bound_uint( &mut self, state: &mut PathState, args_offset: usize, ) -> Result<CheatcodeOutcome, SymbolicError>
pub(super) fn handle_bound_int( &mut self, state: &mut PathState, args_offset: usize, ) -> Result<CheatcodeOutcome, SymbolicError>
Source§impl SymbolicExecutor
impl SymbolicExecutor
pub(super) fn create<FEN: FoundryEvmNetwork>( &mut self, executor: &Executor<FEN>, state: &mut PathState, worklist: &mut VecDeque<PathState>, completed_paths: &mut usize, kind: CreateKind, ) -> Result<StepOutcome, SymbolicError>
pub(super) fn execute_external_call<FEN: FoundryEvmNetwork>( &mut self, executor: &Executor<FEN>, initial: PathState, code: &SymCode, completed_paths: &mut usize, ) -> Result<Vec<ExternalCallOutcome>, SymbolicError>
Source§impl SymbolicExecutor
impl SymbolicExecutor
pub(super) fn execute_invariant_check<FEN: FoundryEvmNetwork>( &mut self, executor: &Executor<FEN>, state: PathState, invariant_address: Address, sender: Address, invariant: &Function, after_invariant: Option<&Function>, completed_paths: &mut usize, ) -> Result<Vec<InvariantCheckOutcome>, SymbolicError>
pub(super) fn invariant_return_failed( &mut self, invariant: &Function, return_data: &SymReturnData, state: &mut PathState, ) -> Result<bool, SymbolicError>
pub(super) fn execute_sequence_call<FEN: FoundryEvmNetwork>( &mut self, executor: &Executor<FEN>, state: PathState, target: Address, sender: Address, _function: &Function, calldata: SymCalldata, constraints: Vec<SymBoolExpr>, completed_paths: &mut usize, ) -> Result<Vec<TopLevelCallOutcome>, SymbolicError>
pub(super) fn materialize_sequence( &mut self, steps: &[SequenceStepTemplate], state: &PathState, ) -> Result<(Vec<SymbolicInvariantStep>, Vec<SymbolicStorageAssignment>), SymbolicError>
Source§impl SymbolicExecutor
impl SymbolicExecutor
fn push_comparison_result( &mut self, state: &mut PathState, op_pc: usize, opcode: u8, condition: SymBoolExpr, ) -> Result<StepOutcome, SymbolicError>
fn apply_branch_target_constraint( &mut self, state: &mut PathState, op_pc: usize, opcode: u8, condition: &SymBoolExpr, ) -> Result<bool, SymbolicError>
pub(super) fn step<FEN: FoundryEvmNetwork>( &mut self, executor: &Executor<FEN>, code: &SymCode, jumpdests: &JumpTable, state: &mut PathState, worklist: &mut VecDeque<PathState>, completed_paths: &mut usize, op: u8, ) -> Result<StepOutcome, SymbolicError>
pub(super) fn assume_returndata_copy_in_bounds( &mut self, state: &mut PathState, offset: SymExpr, size: SymExpr, ) -> Result<bool, SymbolicError>
pub(super) fn return_or_revert( &mut self, state: &mut PathState, is_revert: bool, ) -> Result<StepOutcome, SymbolicError>
pub(super) fn classify_revert( &mut self, state: &PathState, offset: SymExpr, size: usize, ) -> StepOutcome
Source§impl SymbolicExecutor
impl SymbolicExecutor
Sourcepub fn new(config: SymbolicConfig) -> Self
pub fn new(config: SymbolicConfig) -> Self
Creates a symbolic executor from Foundry’s symbolic configuration.
The configured solver command is not executed here. Solver availability is
checked by Self::run so construction remains cheap and side-effect free.
The executor owns an isolated solver backend and symbolic world overlay. Create a fresh executor when a caller needs independent solver query accounting.
fn reset_run_state(&mut self, use_wall_clock_deadline: bool)
pub(super) fn check_timeout(&self) -> Result<(), SymbolicError>
Sourcepub(super) fn defer_incomplete(&mut self, reason: &'static str)
pub(super) fn defer_incomplete(&mut self, reason: &'static str)
Defers an incomplete result until all counterexample-producing modeled paths are explored.
Sourcepub(super) fn defer_solver_unknown(&mut self)
pub(super) fn defer_solver_unknown(&mut self)
Defers a solver-unknown result while continuing with decidable sibling paths.
Sourcepub(super) fn branch_is_sat_or_defer(
&mut self,
constraints: &[SymBoolExpr],
) -> Result<bool, SymbolicError>
pub(super) fn branch_is_sat_or_defer( &mut self, constraints: &[SymBoolExpr], ) -> Result<bool, SymbolicError>
Checks branch feasibility, recording solver-unknown as an incomplete proof path.
Sourcefn take_deferred_incomplete(&mut self) -> Option<(SymbolicStopReason, String)>
fn take_deferred_incomplete(&mut self) -> Option<(SymbolicStopReason, String)>
Returns and clears any deferred incomplete reason.
Sourcepub fn portfolio_diagnostics(&self) -> Option<PortfolioDiagnostics>
pub fn portfolio_diagnostics(&self) -> Option<PortfolioDiagnostics>
Returns staged solver portfolio diagnostics collected by this executor.
Sourcepub fn capture_diagnostics(&mut self)
pub fn capture_diagnostics(&mut self)
Defers verbose solver diagnostics until the caller explicitly takes them.
Sourcepub fn take_diagnostics(&mut self) -> Option<String>
pub fn take_diagnostics(&mut self) -> Option<String>
Returns and clears deferred verbose solver diagnostics.
Sourcepub fn set_query_observer(
&mut self,
observer: impl Fn(usize) + Send + Sync + 'static,
)
pub fn set_query_observer( &mut self, observer: impl Fn(usize) + Send + Sync + 'static, )
Registers a callback invoked after each solver query for live progress rendering.
Sourcepub fn run<FEN: FoundryEvmNetwork>(
&mut self,
input: SymbolicRunInput<'_, FEN>,
) -> SymbolicRunResult
pub fn run<FEN: FoundryEvmNetwork>( &mut self, input: SymbolicRunInput<'_, FEN>, ) -> SymbolicRunResult
Executes one function symbolically against an already-deployed test contract.
The input executor supplies the deployed bytecode, storage backend, caller, and
target address established by the normal forge test setup flow. This method
does not mutate the concrete executor and does not replay failures itself; when
it returns SymbolicRunResult::Counterexample, callers should replay the
returned arguments through the concrete executor before reporting the failure.
Unsupported opcodes, unsupported ABI types, missing solver support, and resource
limit exhaustion are reported as SymbolicRunResult::Incomplete.
Ordinary Solidity require reverts prune the current path. Assertion failures,
forge-std assertion reverts, and DSTest failure signals are reported as
counterexample candidates when the failing path is satisfiable.
Sourcepub fn modeled_corpus_seed_indexes(
config: &SymbolicConfig,
function: &Function,
corpus_seeds: &[SymbolicConcreteInput],
) -> Result<Vec<usize>, SymbolicError>
pub fn modeled_corpus_seed_indexes( config: &SymbolicConfig, function: &Function, corpus_seeds: &[SymbolicConcreteInput], ) -> Result<Vec<usize>, SymbolicError>
Returns corpus seed indexes that can be modeled by at least one symbolic calldata variant.
Sourcepub fn run_invariant<FEN: FoundryEvmNetwork>(
&mut self,
input: SymbolicInvariantRunInput<'_, FEN>,
) -> SymbolicInvariantRunResult
pub fn run_invariant<FEN: FoundryEvmNetwork>( &mut self, input: SymbolicInvariantRunInput<'_, FEN>, ) -> SymbolicInvariantRunResult
Executes a bounded symbolic invariant call sequence.
Each sequence step chooses from the concrete target functions and senders supplied by Foundry’s invariant target discovery. Arguments are generated through the same symbolic ABI model used by stateless symbolic tests, and the symbolic world state is preserved between steps. Returned counterexamples must still be replayed by the caller before reporting.
The configured invariant depth limits the number of target calls explored before the invariant is checked. A depth of zero checks only the invariant against setup state.
pub(super) fn run_inner<FEN: FoundryEvmNetwork>( &mut self, input: SymbolicRunInput<'_, FEN>, ) -> Result<SymbolicRunResult, SymbolicError>
fn materialize_stateless_counterexample_if_branch_target_satisfied( &mut self, calldata: &SymbolicCalldata, function: &Function, state: &PathState, ) -> Result<Option<(Vec<DynSolValue>, Bytes)>, SymbolicError>
pub(super) fn materialize_stateless_counterexample( &mut self, calldata: &SymbolicCalldata, function: &Function, state: &PathState, ) -> Result<(Vec<DynSolValue>, Bytes), SymbolicError>
Sourcepub(super) fn materialize_stateless_input(
&mut self,
calldata: &SymbolicCalldata,
function: &Function,
state: &PathState,
) -> Result<SymbolicConcreteInput, SymbolicError>
pub(super) fn materialize_stateless_input( &mut self, calldata: &SymbolicCalldata, function: &Function, state: &PathState, ) -> Result<SymbolicConcreteInput, SymbolicError>
Runs the materialize_stateless_input symbolic executor helper.
pub(super) fn run_invariant_inner<FEN: FoundryEvmNetwork>( &mut self, input: SymbolicInvariantRunInput<'_, FEN>, ) -> Result<SymbolicInvariantRunResult, SymbolicError>
pub(super) fn stats_with_paths(&self, paths: usize) -> SymbolicStats
Sourcefn heuristic_witnesses_used_since(&self, baseline: usize) -> bool
fn heuristic_witnesses_used_since(&self, baseline: usize) -> bool
Returns whether this run used a hard-arithmetic heuristic witness.
Sourcefn hard_arith_heuristic_incomplete_reason() -> String
fn hard_arith_heuristic_incomplete_reason() -> String
Returns the incomplete reason used when heuristic witnesses cannot certify safety.
Source§impl SymbolicExecutor
impl SymbolicExecutor
pub(crate) fn pop_next_path( &self, paths: &mut VecDeque<PathState>, ) -> Option<PathState>
pub(crate) fn pop_next_feasible_path( &mut self, paths: &mut VecDeque<PathState>, ) -> Result<Option<PathState>, SymbolicError>
Auto Trait Implementations§
impl !Freeze for SymbolicExecutor
impl !RefUnwindSafe for SymbolicExecutor
impl !Send for SymbolicExecutor
impl !Sync for SymbolicExecutor
impl !UnwindSafe for SymbolicExecutor
impl Unpin for SymbolicExecutor
impl UnsafeUnpin for SymbolicExecutor
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> ErasedDestructor for Twhere
T: 'static,
§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> 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> 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> 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: 672 bytes