pub struct Cheatcodes {Show 34 fields
pub block: Option<BlockEnv>,
pub active_delegation: Option<SignedAuthorization>,
pub gas_price: Option<U256>,
pub labels: AddressHashMap<String>,
pub prank: Option<Prank>,
pub expected_revert: Option<ExpectedRevert>,
pub assume_no_revert: Option<AssumeNoRevert>,
pub fork_revert_diagnostic: Option<RevertDiagnostic>,
pub accesses: Option<RecordAccess>,
pub recorded_account_diffs_stack: Option<Vec<Vec<AccountAccess>>>,
pub record_debug_steps_info: Option<RecordDebugStepInfo>,
pub recorded_logs: Option<Vec<Log>>,
pub mocked_calls: HashMap<Address, BTreeMap<MockCallDataContext, VecDeque<MockCallReturnData>>>,
pub mocked_functions: HashMap<Address, HashMap<Bytes, Address>>,
pub expected_calls: ExpectedCallTracker,
pub expected_emits: VecDeque<ExpectedEmit>,
pub allowed_mem_writes: HashMap<u64, Vec<Range<u64>>>,
pub broadcast: Option<Broadcast>,
pub broadcastable_transactions: BroadcastableTransactions,
pub config: Arc<CheatsConfig>,
pub context: Context,
pub fs_commit: bool,
pub serialized_jsons: BTreeMap<String, BTreeMap<String, Value>>,
pub eth_deals: Vec<DealRecord>,
pub gas_metering: GasMetering,
pub gas_snapshots: BTreeMap<String, BTreeMap<String, String>>,
pub mapping_slots: Option<AddressHashMap<MappingSlots>>,
pub pc: usize,
pub breakpoints: Breakpoints,
test_runner: Option<TestRunner>,
pub ignored_traces: IgnoredTraces,
pub arbitrary_storage: Option<ArbitraryStorage>,
pub deprecated: HashMap<&'static str, Option<&'static str>>,
pub wallets: Option<Wallets>,
}
Expand description
An EVM inspector that handles calls to various cheatcodes, each with their own behavior.
Cheatcodes can be called by contracts during execution to modify the VM environment, such as mocking addresses, signatures and altering call reverts.
Executing cheatcodes can be very powerful. Most cheatcodes are limited to evm internals, but
there are also cheatcodes like ffi
which can execute arbitrary commands or writeFile
and
readFile
which can manipulate files of the filesystem. Therefore, several restrictions are
implemented for these cheatcodes:
ffi
, and file cheatcodes are always opt-in (via foundry config) and never enabled by default: all respective cheatcode handlers implement the appropriate checks- File cheatcodes require explicit permissions which paths are allowed for which operation, see
Config.fs_permission
- Only permitted accounts are allowed to execute cheatcodes in forking mode, this ensures no contract deployed on the live network is able to execute cheatcodes by simply calling the cheatcode address: by default, the caller, test contract and newly deployed contracts are allowed to execute cheatcodes
Fields§
§block: Option<BlockEnv>
The block environment
Used in the cheatcode handler to overwrite the block environment separately from the execution block environment.
active_delegation: Option<SignedAuthorization>
Currently active EIP-7702 delegation that will be consumed when building the next
transaction. Set by vm.attachDelegation()
and consumed via .take()
during
transaction construction.
gas_price: Option<U256>
The gas price.
Used in the cheatcode handler to overwrite the gas price separately from the gas price in the execution environment.
labels: AddressHashMap<String>
Address labels
prank: Option<Prank>
Prank information
expected_revert: Option<ExpectedRevert>
Expected revert information
assume_no_revert: Option<AssumeNoRevert>
Assume next call can revert and discard fuzz run if it does.
fork_revert_diagnostic: Option<RevertDiagnostic>
Additional diagnostic for reverts
accesses: Option<RecordAccess>
Recorded storage reads and writes
recorded_account_diffs_stack: Option<Vec<Vec<AccountAccess>>>
Recorded account accesses (calls, creates) organized by relative call depth, where the topmost vector corresponds to accesses at the depth at which account access recording began. Each vector in the matrix represents a list of accesses at a specific call depth. Once that call context has ended, the last vector is removed from the matrix and merged into the previous vector.
record_debug_steps_info: Option<RecordDebugStepInfo>
The information of the debug step recording.
recorded_logs: Option<Vec<Log>>
Recorded logs
mocked_calls: HashMap<Address, BTreeMap<MockCallDataContext, VecDeque<MockCallReturnData>>>
Mocked calls
mocked_functions: HashMap<Address, HashMap<Bytes, Address>>
Mocked functions. Maps target address to be mocked to pair of (calldata, mock address).
expected_calls: ExpectedCallTracker
Expected calls
expected_emits: VecDeque<ExpectedEmit>
Expected emits
allowed_mem_writes: HashMap<u64, Vec<Range<u64>>>
Map of context depths to memory offset ranges that may be written to within the call depth.
broadcast: Option<Broadcast>
Current broadcasting information
broadcastable_transactions: BroadcastableTransactions
Scripting based transactions
config: Arc<CheatsConfig>
Additional, user configurable context this Inspector has access to when inspecting a call
context: Context
Test-scoped context holding data that needs to be reset every test run
fs_commit: bool
Whether to commit FS changes such as file creations, writes and deletes. Used to prevent duplicate changes file executing non-committing calls.
serialized_jsons: BTreeMap<String, BTreeMap<String, Value>>
Serialized JSON values.
eth_deals: Vec<DealRecord>
All recorded ETH deal
s.
gas_metering: GasMetering
Gas metering state.
gas_snapshots: BTreeMap<String, BTreeMap<String, String>>
Contains gas snapshots made over the course of a test suite.
mapping_slots: Option<AddressHashMap<MappingSlots>>
Mapping slots.
pc: usize
The current program counter.
breakpoints: Breakpoints
Breakpoints supplied by the breakpoint
cheatcode.
char -> (address, pc)
test_runner: Option<TestRunner>
Optional cheatcodes TestRunner
. Used for generating random values from uint and int
strategies.
ignored_traces: IgnoredTraces
Ignored traces.
arbitrary_storage: Option<ArbitraryStorage>
Addresses with arbitrary storage.
deprecated: HashMap<&'static str, Option<&'static str>>
Deprecated cheatcodes mapped to the reason. Used to report warnings on test results.
wallets: Option<Wallets>
Unlocked wallets used in scripts and testing of scripts.
Implementations§
Source§impl Cheatcodes
impl Cheatcodes
Sourcepub fn new(config: Arc<CheatsConfig>) -> Self
pub fn new(config: Arc<CheatsConfig>) -> Self
Creates a new Cheatcodes
with the given settings.
Sourcepub fn wallets(&mut self) -> &Wallets
pub fn wallets(&mut self) -> &Wallets
Returns the configured wallets if available, else creates a new instance.
Sourcepub fn set_wallets(&mut self, wallets: Wallets)
pub fn set_wallets(&mut self, wallets: Wallets)
Sets the unlocked wallets.
Sourcefn apply_cheatcode(
&mut self,
ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>,
call: &CallInputs,
executor: &mut dyn CheatcodesExecutor,
) -> Result
fn apply_cheatcode( &mut self, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, call: &CallInputs, executor: &mut dyn CheatcodesExecutor, ) -> Result
Decodes the input data and applies the cheatcode.
Sourcefn allow_cheatcodes_on_create(
&self,
ecx: &'_ mut InnerEvmContext<&'_ mut (dyn DatabaseExt + '_)>,
caller: Address,
created_address: Address,
)
fn allow_cheatcodes_on_create( &self, ecx: &'_ mut InnerEvmContext<&'_ mut (dyn DatabaseExt + '_)>, caller: Address, created_address: Address, )
Grants cheat code access for new contracts if the caller also has cheatcode access or the new contract is created in top most call.
There may be cheatcodes in the constructor of the new contract, in order to allow them automatically we need to determine the new address.
Sourcepub fn on_revert(
&mut self,
ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>,
)
pub fn on_revert( &mut self, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, )
Called when there was a revert.
Cleanup any previously applied cheatcodes that altered the state in such a way that revm’s revert would run into issues.
fn create_common<Input>(
&mut self,
ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>,
input: Input,
) -> Option<CreateOutcome>where
Input: CommonCreateInput,
fn create_end_common( &mut self, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, outcome: CreateOutcome, ) -> CreateOutcome
pub fn call_with_executor( &mut self, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, call: &mut CallInputs, executor: &mut impl CheatcodesExecutor, ) -> Option<CallOutcome>
pub fn rng(&mut self) -> &mut impl Rng
pub fn test_runner(&mut self) -> &mut TestRunner
Sourcepub fn arbitrary_storage(&mut self) -> &mut ArbitraryStorage
pub fn arbitrary_storage(&mut self) -> &mut ArbitraryStorage
Returns existing or set a default ArbitraryStorage
option.
Used by setArbitraryStorage
cheatcode to track addresses with arbitrary storage.
Sourcepub fn has_arbitrary_storage(&self, address: &Address) -> bool
pub fn has_arbitrary_storage(&self, address: &Address) -> bool
Whether the given address has arbitrary storage.
Sourcepub fn is_arbitrary_storage_copy(&self, address: &Address) -> bool
pub fn is_arbitrary_storage_copy(&self, address: &Address) -> bool
Whether the given address is a copy of an address with arbitrary storage.
Source§impl Cheatcodes
impl Cheatcodes
fn meter_gas(&mut self, interpreter: &mut Interpreter)
fn meter_gas_record( &mut self, interpreter: &mut Interpreter, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, )
fn meter_gas_end(&mut self, interpreter: &mut Interpreter)
fn meter_gas_reset(&mut self, interpreter: &mut Interpreter)
fn meter_gas_check(&mut self, interpreter: &mut Interpreter)
Sourcefn arbitrary_storage_end(
&mut self,
interpreter: &mut Interpreter,
ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>,
)
fn arbitrary_storage_end( &mut self, interpreter: &mut Interpreter, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, )
Generates or copies arbitrary values for storage slots.
Invoked in inspector step_end
(when the current opcode is not executed), if current opcode
to execute is SLOAD
and storage slot is cold.
Ensures that in next step (when SLOAD
opcode is executed) an arbitrary value is returned:
- copies the existing arbitrary storage value (or the new generated one if no value in cache) from mapped source address to the target address.
- generates arbitrary value and saves it in target address storage.
Sourcefn record_accesses(&mut self, interpreter: &mut Interpreter)
fn record_accesses(&mut self, interpreter: &mut Interpreter)
Records storage slots reads and writes.
fn record_state_diffs( &mut self, interpreter: &mut Interpreter, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, )
Sourcefn check_mem_opcodes(&self, interpreter: &mut Interpreter, depth: u64)
fn check_mem_opcodes(&self, interpreter: &mut Interpreter, depth: u64)
Checks to see if the current opcode can either mutate directly or expand memory.
If the opcode at the current program counter is a match, check if the modified memory lies within the allowed ranges. If not, revert and fail the test.
Trait Implementations§
Source§impl Clone for Cheatcodes
impl Clone for Cheatcodes
Source§fn clone(&self) -> Cheatcodes
fn clone(&self) -> Cheatcodes
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for Cheatcodes
impl Debug for Cheatcodes
Source§impl Default for Cheatcodes
impl Default for Cheatcodes
Source§impl Inspector<&mut dyn DatabaseExt<Error = DatabaseError>> for Cheatcodes
impl Inspector<&mut dyn DatabaseExt<Error = DatabaseError>> for Cheatcodes
Source§fn initialize_interp(
&mut self,
interpreter: &mut Interpreter,
ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>,
)
fn initialize_interp( &mut self, interpreter: &mut Interpreter, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, )
Source§fn step(
&mut self,
interpreter: &mut Interpreter,
ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>,
)
fn step( &mut self, interpreter: &mut Interpreter, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, )
Source§fn step_end(
&mut self,
interpreter: &mut Interpreter,
ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>,
)
fn step_end( &mut self, interpreter: &mut Interpreter, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, )
step
when the instruction has been executed. Read moreSource§fn log(
&mut self,
interpreter: &mut Interpreter,
_ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>,
log: &Log,
)
fn log( &mut self, interpreter: &mut Interpreter, _ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, log: &Log, )
Source§fn call(
&mut self,
ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>,
inputs: &mut CallInputs,
) -> Option<CallOutcome>
fn call( &mut self, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, inputs: &mut CallInputs, ) -> Option<CallOutcome>
Source§fn call_end(
&mut self,
ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>,
call: &CallInputs,
outcome: CallOutcome,
) -> CallOutcome
fn call_end( &mut self, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, call: &CallInputs, outcome: CallOutcome, ) -> CallOutcome
Source§fn create(
&mut self,
ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>,
call: &mut CreateInputs,
) -> Option<CreateOutcome>
fn create( &mut self, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, call: &mut CreateInputs, ) -> Option<CreateOutcome>
Source§fn create_end(
&mut self,
ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>,
_call: &CreateInputs,
outcome: CreateOutcome,
) -> CreateOutcome
fn create_end( &mut self, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, _call: &CreateInputs, outcome: CreateOutcome, ) -> CreateOutcome
Source§fn eofcreate(
&mut self,
ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>,
call: &mut EOFCreateInputs,
) -> Option<CreateOutcome>
fn eofcreate( &mut self, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, call: &mut EOFCreateInputs, ) -> Option<CreateOutcome>
Source§fn eofcreate_end(
&mut self,
ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>,
_call: &EOFCreateInputs,
outcome: CreateOutcome,
) -> CreateOutcome
fn eofcreate_end( &mut self, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, _call: &EOFCreateInputs, outcome: CreateOutcome, ) -> CreateOutcome
§fn selfdestruct(
&mut self,
contract: Address,
target: Address,
value: Uint<256, 4>,
)
fn selfdestruct( &mut self, contract: Address, target: Address, value: Uint<256, 4>, )
Source§impl InspectorExt for Cheatcodes
impl InspectorExt for Cheatcodes
Source§fn should_use_create2_factory(
&mut self,
ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>,
inputs: &mut CreateInputs,
) -> bool
fn should_use_create2_factory( &mut self, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, inputs: &mut CreateInputs, ) -> bool
DEFAULT_CREATE2_DEPLOYER
should be used for a CREATE2 frame. Read moreSource§fn console_log(&mut self, _input: String)
fn console_log(&mut self, _input: String)
console.log
invocation.Source§fn is_alphanet(&self) -> bool
fn is_alphanet(&self) -> bool
true
if the current network is Alphanet.Auto Trait Implementations§
impl Freeze for Cheatcodes
impl !RefUnwindSafe for Cheatcodes
impl Send for Cheatcodes
impl Sync for Cheatcodes
impl Unpin for Cheatcodes
impl !UnwindSafe for Cheatcodes
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
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<DB, INSP> GetInspector<DB> for INSPwhere
DB: Database,
INSP: Inspector<DB>,
impl<DB, INSP> GetInspector<DB> for INSPwhere
DB: Database,
INSP: Inspector<DB>,
§fn get_inspector(&mut self) -> &mut impl Inspector<DB>
fn get_inspector(&mut self) -> &mut impl Inspector<DB>
Inspector
.§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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request
§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>
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> 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>
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeSendSync for T
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: 2320 bytes