foundry_cheatcodes::inspector

Struct Cheatcodes

Source
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, AddressHashMap<LogCountMap>)>, 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, AddressHashMap<LogCountMap>)>

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 deals.

§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

Source

pub fn new(config: Arc<CheatsConfig>) -> Self

Creates a new Cheatcodes with the given settings.

Source

pub fn wallets(&mut self) -> &Wallets

Returns the configured wallets if available, else creates a new instance.

Source

pub fn set_wallets(&mut self, wallets: Wallets)

Sets the unlocked wallets.

Source

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.

Source

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.

Source

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.

Source

fn create_common<Input>( &mut self, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, input: Input, ) -> Option<CreateOutcome>
where Input: CommonCreateInput,

Source

fn create_end_common( &mut self, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, outcome: CreateOutcome, ) -> CreateOutcome

Source

pub fn call_with_executor( &mut self, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, call: &mut CallInputs, executor: &mut impl CheatcodesExecutor, ) -> Option<CallOutcome>

Source

pub fn rng(&mut self) -> &mut impl Rng

Source

pub fn test_runner(&mut self) -> &mut TestRunner

Source

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.

Source

pub fn has_arbitrary_storage(&self, address: &Address) -> bool

Whether the given address has arbitrary storage.

Source

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

Source

fn meter_gas(&mut self, interpreter: &mut Interpreter)

Source

fn meter_gas_record( &mut self, interpreter: &mut Interpreter, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, )

Source

fn meter_gas_end(&mut self, interpreter: &mut Interpreter)

Source

fn meter_gas_reset(&mut self, interpreter: &mut Interpreter)

Source

fn meter_gas_check(&mut self, interpreter: &mut Interpreter)

Source

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.
Source

fn record_accesses(&mut self, interpreter: &mut Interpreter)

Records storage slots reads and writes.

Source

fn record_state_diffs( &mut self, interpreter: &mut Interpreter, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, )

Source

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

Source§

fn clone(&self) -> Cheatcodes

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Cheatcodes

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Cheatcodes

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Inspector<&mut dyn DatabaseExt<Error = DatabaseError>> for Cheatcodes

Source§

fn initialize_interp( &mut self, interpreter: &mut Interpreter, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, )

Called before the interpreter is initialized. Read more
Source§

fn step( &mut self, interpreter: &mut Interpreter, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, )

Called on each step of the interpreter. Read more
Source§

fn step_end( &mut self, interpreter: &mut Interpreter, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, )

Called after step when the instruction has been executed. Read more
Source§

fn log( &mut self, interpreter: &mut Interpreter, _ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, log: &Log, )

Called when a log is emitted.
Source§

fn call( &mut self, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, inputs: &mut CallInputs, ) -> Option<CallOutcome>

Called whenever a call to a contract is about to start. Read more
Source§

fn call_end( &mut self, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, call: &CallInputs, outcome: CallOutcome, ) -> CallOutcome

Called when a call to a contract has concluded. Read more
Source§

fn create( &mut self, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, call: &mut CreateInputs, ) -> Option<CreateOutcome>

Called when a contract is about to be created. Read more
Source§

fn create_end( &mut self, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, _call: &CreateInputs, outcome: CreateOutcome, ) -> CreateOutcome

Called when a contract has been created. Read more
Source§

fn eofcreate( &mut self, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, call: &mut EOFCreateInputs, ) -> Option<CreateOutcome>

Called when EOF creating is called. Read more
Source§

fn eofcreate_end( &mut self, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, _call: &EOFCreateInputs, outcome: CreateOutcome, ) -> CreateOutcome

Called when eof creating has ended.
§

fn selfdestruct( &mut self, contract: Address, target: Address, value: Uint<256, 4>, )

Called when a contract has been self-destructed with funds transferred to target.
Source§

impl InspectorExt for Cheatcodes

Source§

fn should_use_create2_factory( &mut self, ecx: &'_ mut EvmContext<&'_ mut (dyn DatabaseExt + '_)>, inputs: &mut CreateInputs, ) -> bool

Determines whether the DEFAULT_CREATE2_DEPLOYER should be used for a CREATE2 frame. Read more
Source§

fn create2_deployer(&self) -> Address

Returns the CREATE2 deployer address.
§

fn console_log(&mut self, _input: String)

Simulates console.log invocation.
§

fn is_odyssey(&self) -> bool

Returns true if the current network is Odyssey.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
§

impl<T, R> CollectAndApply<T, R> for T

§

fn collect_and_apply<I, F>(iter: I, f: F) -> R
where I: Iterator<Item = T>, F: FnOnce(&[T]) -> R,

Equivalent to f(&iter.collect::<Vec<_>>()).

§

type Output = R

§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> DynClone for T
where T: Clone,

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FromRef<T> for T
where T: Clone,

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

impl<DB, INSP> GetInspector<DB> for INSP
where DB: Database, INSP: Inspector<DB>,

§

fn get_inspector(&mut self) -> &mut impl Inspector<DB>

Returns the associated Inspector.
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
§

impl<T> Paint for T
where T: ?Sized,

§

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 primary(&self) -> Painted<&T>

Returns self with the fg() set to [Color::Primary].

§Example
println!("{}", value.primary());
§

fn fixed(&self, color: u8) -> Painted<&T>

Returns self with the fg() set to [Color::Fixed].

§Example
println!("{}", value.fixed(color));
§

fn rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the fg() set to [Color::Rgb].

§Example
println!("{}", value.rgb(r, g, b));
§

fn black(&self) -> Painted<&T>

Returns self with the fg() set to [Color::Black].

§Example
println!("{}", value.black());
§

fn red(&self) -> Painted<&T>

Returns self with the fg() set to [Color::Red].

§Example
println!("{}", value.red());
§

fn green(&self) -> Painted<&T>

Returns self with the fg() set to [Color::Green].

§Example
println!("{}", value.green());
§

fn yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color::Yellow].

§Example
println!("{}", value.yellow());
§

fn blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color::Blue].

§Example
println!("{}", value.blue());
§

fn magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color::Magenta].

§Example
println!("{}", value.magenta());
§

fn cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color::Cyan].

§Example
println!("{}", value.cyan());
§

fn white(&self) -> Painted<&T>

Returns self with the fg() set to [Color::White].

§Example
println!("{}", value.white());
§

fn bright_black(&self) -> Painted<&T>

Returns self with the fg() set to [Color::BrightBlack].

§Example
println!("{}", value.bright_black());
§

fn bright_red(&self) -> Painted<&T>

Returns self with the fg() set to [Color::BrightRed].

§Example
println!("{}", value.bright_red());
§

fn bright_green(&self) -> Painted<&T>

Returns self with the fg() set to [Color::BrightGreen].

§Example
println!("{}", value.bright_green());
§

fn bright_yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color::BrightYellow].

§Example
println!("{}", value.bright_yellow());
§

fn bright_blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color::BrightBlue].

§Example
println!("{}", value.bright_blue());
§

fn bright_magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color::BrightMagenta].

§Example
println!("{}", value.bright_magenta());
§

fn bright_cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color::BrightCyan].

§Example
println!("{}", value.bright_cyan());
§

fn bright_white(&self) -> Painted<&T>

Returns self with the fg() set to [Color::BrightWhite].

§Example
println!("{}", value.bright_white());
§

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>

Returns self with the bg() set to [Color::Primary].

§Example
println!("{}", value.on_primary());
§

fn on_fixed(&self, color: u8) -> Painted<&T>

Returns self with the bg() set to [Color::Fixed].

§Example
println!("{}", value.on_fixed(color));
§

fn on_rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the bg() set to [Color::Rgb].

§Example
println!("{}", value.on_rgb(r, g, b));
§

fn on_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color::Black].

§Example
println!("{}", value.on_black());
§

fn on_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color::Red].

§Example
println!("{}", value.on_red());
§

fn on_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color::Green].

§Example
println!("{}", value.on_green());
§

fn on_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color::Yellow].

§Example
println!("{}", value.on_yellow());
§

fn on_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color::Blue].

§Example
println!("{}", value.on_blue());
§

fn on_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color::Magenta].

§Example
println!("{}", value.on_magenta());
§

fn on_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color::Cyan].

§Example
println!("{}", value.on_cyan());
§

fn on_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color::White].

§Example
println!("{}", value.on_white());
§

fn on_bright_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color::BrightBlack].

§Example
println!("{}", value.on_bright_black());
§

fn on_bright_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color::BrightRed].

§Example
println!("{}", value.on_bright_red());
§

fn on_bright_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color::BrightGreen].

§Example
println!("{}", value.on_bright_green());
§

fn on_bright_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color::BrightYellow].

§Example
println!("{}", value.on_bright_yellow());
§

fn on_bright_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color::BrightBlue].

§Example
println!("{}", value.on_bright_blue());
§

fn on_bright_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color::BrightMagenta].

§Example
println!("{}", value.on_bright_magenta());
§

fn on_bright_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color::BrightCyan].

§Example
println!("{}", value.on_bright_cyan());
§

fn on_bright_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color::BrightWhite].

§Example
println!("{}", value.on_bright_white());
§

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 bold(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute::Bold].

§Example
println!("{}", value.bold());
§

fn dim(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute::Dim].

§Example
println!("{}", value.dim());
§

fn italic(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute::Italic].

§Example
println!("{}", value.italic());
§

fn underline(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute::Underline].

§Example
println!("{}", value.underline());

Returns self with the attr() set to [Attribute::Blink].

§Example
println!("{}", value.blink());

Returns self with the attr() set to [Attribute::RapidBlink].

§Example
println!("{}", value.rapid_blink());
§

fn invert(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute::Invert].

§Example
println!("{}", value.invert());
§

fn conceal(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute::Conceal].

§Example
println!("{}", value.conceal());
§

fn strike(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute::Strike].

§Example
println!("{}", value.strike());
§

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 mask(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk::Mask].

§Example
println!("{}", value.mask());
§

fn wrap(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk::Wrap].

§Example
println!("{}", value.wrap());
§

fn linger(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk::Linger].

§Example
println!("{}", value.linger());
§

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.

Returns self with the quirk() set to [Quirk::Clear].

§Example
println!("{}", value.clear());
§

fn resetting(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk::Resetting].

§Example
println!("{}", value.resetting());
§

fn bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk::Bright].

§Example
println!("{}", value.bright());
§

fn on_bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk::OnBright].

§Example
println!("{}", value.on_bright());
§

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);
§

fn new(self) -> Painted<Self>
where Self: Sized,

Create a new [Painted] with a default [Style]. Read more
§

fn paint<S>(&self, style: S) -> Painted<&Self>
where S: Into<Style>,

Apply a style wholesale to self. Any previous style is replaced. Read more
§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows 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) -> R
where R: 'a,

Mutably borrows 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
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows 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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows 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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .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
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .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
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryClone for T
where T: Clone,

§

fn try_clone(&self) -> Result<T, Error>

Clones self, possibly returning an error.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where 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: 2336 bytes