anvil::eth::backend::mem

Struct Backend

Source
pub struct Backend {
Show 22 fields db: Arc<RwLock<Box<dyn Db>>>, blockchain: Blockchain, states: Arc<RwLock<InMemoryBlockStates>>, env: Arc<RwLock<EnvWithHandlerCfg>>, fork: Arc<RwLock<Option<ClientFork>>>, time: TimeManager, cheats: CheatsManager, fees: FeeManager, genesis: GenesisConfig, new_block_listeners: Arc<Mutex<Vec<UnboundedSender<NewBlockNotification>>>>, active_state_snapshots: Arc<Mutex<HashMap<U256, (u64, B256)>>>, enable_steps_tracing: bool, print_logs: bool, alphanet: bool, prune_state_history_config: PruneStateHistoryConfig, transaction_block_keeper: Option<usize>, node_config: Arc<RwLock<NodeConfig>>, slots_in_an_epoch: u64, precompile_factory: Option<Arc<dyn PrecompileFactory>>, mining: Arc<Mutex<()>>, capabilities: Arc<RwLock<WalletCapabilities>>, executor_wallet: Arc<RwLock<Option<EthereumWallet>>>,
}
Expand description

Gives access to the [revm::Database]

Fields§

§db: Arc<RwLock<Box<dyn Db>>>

Access to [revm::Database] abstraction.

This will be used in combination with [revm::Evm] and is responsible for feeding data to the evm during its execution.

At time of writing, there are two different types of Db:

  • MemDb: everything is stored in memory
  • ForkDb: forks off a remote client, missing data is retrieved via RPC-calls

In order to commit changes to the [revm::Database], the [revm::Evm] requires mutable access, which requires a write-lock from this db. In forking mode, the time during which the write-lock is active depends on whether the ForkDb can provide all requested data from memory or whether it has to retrieve it via RPC calls first. This means that it potentially blocks for some time, even taking into account the rate limits of RPC endpoints. Therefore the Db is guarded by a tokio::sync::RwLock here so calls that need to read from it, while it’s currently written to, don’t block. E.g. a new block is currently mined and a new Self::set_storage_at() request is being executed.

§blockchain: Blockchain

stores all block related data in memory.

§states: Arc<RwLock<InMemoryBlockStates>>

Historic states of previous blocks.

§env: Arc<RwLock<EnvWithHandlerCfg>>

Env data of the chain

§fork: Arc<RwLock<Option<ClientFork>>>

This is set if this is currently forked off another client.

§time: TimeManager

Provides time related info, like timestamp.

§cheats: CheatsManager

Contains state of custom overrides.

§fees: FeeManager

Contains fee data.

§genesis: GenesisConfig

Initialised genesis.

§new_block_listeners: Arc<Mutex<Vec<UnboundedSender<NewBlockNotification>>>>

Listeners for new blocks that get notified when a new block was imported.

§active_state_snapshots: Arc<Mutex<HashMap<U256, (u64, B256)>>>

Keeps track of active state snapshots at a specific block.

§enable_steps_tracing: bool§print_logs: bool§alphanet: bool§prune_state_history_config: PruneStateHistoryConfig

How to keep history state

§transaction_block_keeper: Option<usize>

max number of blocks with transactions in memory

§node_config: Arc<RwLock<NodeConfig>>§slots_in_an_epoch: u64

Slots in an epoch

§precompile_factory: Option<Arc<dyn PrecompileFactory>>

Precompiles to inject to the EVM.

§mining: Arc<Mutex<()>>

Prevent race conditions during mining

§capabilities: Arc<RwLock<WalletCapabilities>>§executor_wallet: Arc<RwLock<Option<EthereumWallet>>>

Implementations§

Source§

impl Backend

Source

pub async fn with_genesis( db: Arc<AsyncRwLock<Box<dyn Db>>>, env: Arc<RwLock<EnvWithHandlerCfg>>, genesis: GenesisConfig, fees: FeeManager, fork: Arc<RwLock<Option<ClientFork>>>, enable_steps_tracing: bool, print_logs: bool, alphanet: bool, prune_state_history_config: PruneStateHistoryConfig, max_persisted_states: Option<usize>, transaction_block_keeper: Option<usize>, automine_block_time: Option<Duration>, cache_path: Option<PathBuf>, node_config: Arc<AsyncRwLock<NodeConfig>>, ) -> Self

Initialises the balance of the given accounts

Source

pub async fn set_create2_deployer(&self, address: Address) -> DatabaseResult<()>

Writes the CREATE2 deployer code directly to the database at the address provided.

Source

pub(crate) fn get_capabilities(&self) -> WalletCapabilities

Get the capabilities of the wallet.

Currently the only capability is DelegationCapability.

Source

pub(crate) fn update_interval_mine_block_time(&self, block_time: Duration)

Updates memory limits that should be more strict when auto-mine is enabled

Source

pub(crate) fn executor_wallet(&self) -> Option<EthereumWallet>

Source

pub(crate) fn add_capability(&self, address: Address)

Adds an address to the [DelegationCapability] of the wallet.

Source

pub(crate) fn set_executor( &self, executor_pk: String, ) -> Result<Address, BlockchainError>

Source

async fn apply_genesis(&self) -> Result<(), DatabaseError>

Applies the configured genesis settings

This will fund, create the genesis accounts

Source

pub fn impersonate(&self, addr: Address) -> bool

Sets the account to impersonate

Returns true if the account is already impersonated

Source

pub fn stop_impersonating(&self, addr: Address)

Removes the account that from the impersonated set

If the impersonated addr is a contract then we also reset the code here

Source

pub fn auto_impersonate_account(&self, enabled: bool)

If set to true will make every account impersonated

Source

pub fn get_fork(&self) -> Option<ClientFork>

Returns the configured fork, if any

Source

pub fn get_db(&self) -> &Arc<AsyncRwLock<Box<dyn Db>>>

Returns the database

Source

pub async fn get_account(&self, address: Address) -> DatabaseResult<AccountInfo>

Returns the AccountInfo from the database

Source

pub fn is_fork(&self) -> bool

Whether we’re forked off some remote client

Source

pub fn precompiles(&self) -> Vec<Address>

Source

pub async fn reset_fork(&self, forking: Forking) -> Result<(), BlockchainError>

Resets the fork to a fresh state

Source

pub fn time(&self) -> &TimeManager

Returns the TimeManager responsible for timestamps

Source

pub fn cheats(&self) -> &CheatsManager

Returns the CheatsManager responsible for executing cheatcodes

Source

pub fn fees(&self) -> &FeeManager

Returns the FeeManager that manages fee/pricings

Source

pub fn env(&self) -> &Arc<RwLock<EnvWithHandlerCfg>>

The env data of the blockchain

Source

pub fn best_hash(&self) -> B256

Returns the current best hash of the chain

Source

pub fn best_number(&self) -> u64

Returns the current best number of the chain

Source

pub fn set_block_number(&self, number: U256)

Sets the block number

Source

pub fn coinbase(&self) -> Address

Returns the client coinbase address.

Source

pub fn chain_id(&self) -> U256

Returns the client coinbase address.

Source

pub fn set_chain_id(&self, chain_id: u64)

Source

pub async fn current_balance(&self, address: Address) -> DatabaseResult<U256>

Returns balance of the given account.

Source

pub async fn current_nonce(&self, address: Address) -> DatabaseResult<u64>

Returns balance of the given account.

Source

pub fn set_coinbase(&self, address: Address)

Sets the coinbase address

Source

pub async fn set_nonce( &self, address: Address, nonce: U256, ) -> DatabaseResult<()>

Sets the nonce of the given address

Source

pub async fn set_balance( &self, address: Address, balance: U256, ) -> DatabaseResult<()>

Sets the balance of the given address

Source

pub async fn set_code( &self, address: Address, code: Bytes, ) -> DatabaseResult<()>

Sets the code of the given address

Source

pub async fn set_storage_at( &self, address: Address, slot: U256, val: B256, ) -> DatabaseResult<()>

Sets the value for the given slot of the given address

Source

pub fn spec_id(&self) -> SpecId

Returns the configured specid

Source

pub fn is_eip1559(&self) -> bool

Returns true for post London

Source

pub fn is_eip3675(&self) -> bool

Returns true for post Merge

Source

pub fn is_eip2930(&self) -> bool

Returns true for post Berlin

Source

pub fn is_eip4844(&self) -> bool

Returns true for post Cancun

Source

pub fn is_eip7702(&self) -> bool

Returns true for post Prague

Source

pub fn is_optimism(&self) -> bool

Returns true if op-stack deposits are active

Source

pub fn ensure_eip1559_active(&self) -> Result<(), BlockchainError>

Returns an error if EIP1559 is not active (pre Berlin)

Source

pub fn ensure_eip2930_active(&self) -> Result<(), BlockchainError>

Returns an error if EIP1559 is not active (pre muirGlacier)

Source

pub fn ensure_eip4844_active(&self) -> Result<(), BlockchainError>

Source

pub fn ensure_eip7702_active(&self) -> Result<(), BlockchainError>

Source

pub fn ensure_op_deposits_active(&self) -> Result<(), BlockchainError>

Returns an error if op-stack deposits are not active

Source

pub fn gas_limit(&self) -> u128

Returns the block gas limit

Source

pub fn set_gas_limit(&self, gas_limit: u128)

Sets the block gas limit

Source

pub fn base_fee(&self) -> u64

Returns the current base fee

Source

pub fn is_min_priority_fee_enforced(&self) -> bool

Returns whether the minimum suggested priority fee is enforced

Source

pub fn excess_blob_gas_and_price(&self) -> Option<BlobExcessGasAndPrice>

Source

pub fn set_base_fee(&self, basefee: u64)

Sets the current basefee

Source

pub fn set_gas_price(&self, price: u128)

Sets the gas price

Source

pub fn elasticity(&self) -> f64

Source

pub fn total_difficulty(&self) -> U256

Returns the total difficulty of the chain until this block

Note: this will always be 0 in memory mode In forking mode this will always be the total difficulty of the forked block

Source

pub async fn create_state_snapshot(&self) -> U256

Creates a new evm_snapshot at the current height.

Returns the id of the snapshot created.

Source

pub async fn revert_state_snapshot( &self, id: U256, ) -> Result<bool, BlockchainError>

Reverts the state to the state snapshot identified by the given id.

Source

pub fn list_state_snapshots(&self) -> BTreeMap<U256, (u64, B256)>

Source

pub async fn serialized_state( &self, preserve_historical_states: bool, ) -> Result<SerializableState, BlockchainError>

Get the current state.

Source

pub async fn dump_state( &self, preserve_historical_states: bool, ) -> Result<Bytes, BlockchainError>

Write all chain data to serialized bytes buffer

Source

pub async fn load_state( &self, state: SerializableState, ) -> Result<bool, BlockchainError>

Apply SerializableState data to the backend storage.

Source

pub async fn load_state_bytes( &self, buf: Bytes, ) -> Result<bool, BlockchainError>

Deserialize and add all chain data to the backend storage

Source

fn next_env(&self) -> EnvWithHandlerCfg

Returns the environment for the next block

Source

fn new_evm_with_inspector_ref<'i, 'db>( &self, db: &'db dyn DatabaseRef<Error = DatabaseError>, env: EnvWithHandlerCfg, inspector: &'i mut dyn Inspector<WrapDatabaseRef<&'db dyn DatabaseRef<Error = DatabaseError>>>, ) -> Evm<'_, &'i mut dyn Inspector<WrapDatabaseRef<&'db dyn DatabaseRef<Error = DatabaseError>>>, WrapDatabaseRef<&'db dyn DatabaseRef<Error = DatabaseError>>>

Creates an EVM instance with optionally injected precompiles.

Source

pub async fn inspect_tx( &self, tx: Arc<PoolTransaction>, ) -> Result<(InstructionResult, Option<Output>, u64, State, Vec<Log>), BlockchainError>

executes the transactions without writing to the underlying database

Source

pub async fn pending_block( &self, pool_transactions: Vec<Arc<PoolTransaction>>, ) -> BlockInfo

Creates the pending block

This will execute all transaction in the order they come but will not mine the block

Source

pub async fn with_pending_block<F, T>( &self, pool_transactions: Vec<Arc<PoolTransaction>>, f: F, ) -> T
where F: FnOnce(Box<dyn MaybeFullDatabase + '_>, BlockInfo) -> T,

Creates the pending block

This will execute all transaction in the order they come but will not mine the block

Source

pub async fn mine_block( &self, pool_transactions: Vec<Arc<PoolTransaction>>, ) -> MinedBlockOutcome

Mines a new block and stores it.

this will execute all transaction in the order they come in and return all the markers they provide.

Source

async fn do_mine_block( &self, pool_transactions: Vec<Arc<PoolTransaction>>, ) -> MinedBlockOutcome

Source

pub async fn call( &self, request: WithOtherFields<TransactionRequest>, fee_details: FeeDetails, block_request: Option<BlockRequest>, overrides: Option<StateOverride>, ) -> Result<(InstructionResult, Option<Output>, u128, State), BlockchainError>

Executes the [TransactionRequest] without writing to the DB

§Errors

Returns an error if the block_number is greater than the current height

Source

fn build_call_env( &self, request: WithOtherFields<TransactionRequest>, fee_details: FeeDetails, block_env: BlockEnv, ) -> EnvWithHandlerCfg

§EVM settings

This modifies certain EVM settings to mirror geth’s SkipAccountChecks when transacting requests, see also: https://github.com/ethereum/go-ethereum/blob/380688c636a654becc8f114438c2a5d93d2db032/core/state_transition.go#L145-L148:

  • disable_eip3607 is set to true
  • disable_base_fee is set to true
  • nonce is set to None
Source

fn build_inspector(&self) -> Inspector

Builds Inspector with the configured options

Source

pub fn call_with_state( &self, state: &dyn DatabaseRef<Error = DatabaseError>, request: WithOtherFields<TransactionRequest>, fee_details: FeeDetails, block_env: BlockEnv, ) -> Result<(InstructionResult, Option<Output>, u128, State), BlockchainError>

Source

pub async fn call_with_tracing( &self, request: WithOtherFields<TransactionRequest>, fee_details: FeeDetails, block_request: Option<BlockRequest>, opts: GethDebugTracingCallOptions, ) -> Result<GethTrace, BlockchainError>

Source

pub fn build_access_list_with_state( &self, state: &dyn DatabaseRef<Error = DatabaseError>, request: WithOtherFields<TransactionRequest>, fee_details: FeeDetails, block_env: BlockEnv, ) -> Result<(InstructionResult, Option<Output>, u64, AccessList), BlockchainError>

Source

fn get_receipts( &self, tx_hashes: impl IntoIterator<Item = TxHash>, ) -> Vec<TypedReceipt>

returns all receipts for the given transactions

Source

async fn logs_for_block( &self, filter: Filter, hash: B256, ) -> Result<Vec<Log>, BlockchainError>

Returns the logs of the block that match the filter

Source

fn mined_logs_for_block(&self, filter: Filter, block: Block) -> Vec<Log>

Returns all Logs mined by the node that were emitted in the block and match the Filter

Source

async fn logs_for_range( &self, filter: &Filter, from: u64, to: u64, ) -> Result<Vec<Log>, BlockchainError>

Returns the logs that match the filter in the given range of blocks

Source

pub async fn logs(&self, filter: Filter) -> Result<Vec<Log>, BlockchainError>

Returns the logs according to the filter

Source

pub async fn block_by_hash( &self, hash: B256, ) -> Result<Option<AnyRpcBlock>, BlockchainError>

Source

pub async fn block_by_hash_full( &self, hash: B256, ) -> Result<Option<AnyRpcBlock>, BlockchainError>

Source

fn mined_block_by_hash(&self, hash: B256) -> Option<AnyRpcBlock>

Source

pub(crate) async fn mined_transactions_by_block_number( &self, number: BlockNumber, ) -> Option<Vec<AnyRpcTransaction>>

Source

pub(crate) fn mined_transactions_in_block( &self, block: &Block, ) -> Option<Vec<AnyRpcTransaction>>

Returns all transactions given a block

Source

pub async fn block_by_number( &self, number: BlockNumber, ) -> Result<Option<AnyRpcBlock>, BlockchainError>

Source

pub async fn block_by_number_full( &self, number: BlockNumber, ) -> Result<Option<AnyRpcBlock>, BlockchainError>

Source

pub fn get_block(&self, id: impl Into<BlockId>) -> Option<Block>

Source

pub fn get_block_by_hash(&self, hash: B256) -> Option<Block>

Source

pub fn mined_block_by_number(&self, number: BlockNumber) -> Option<AnyRpcBlock>

Source

pub fn get_full_block(&self, id: impl Into<BlockId>) -> Option<AnyRpcBlock>

Source

pub fn convert_block(&self, block: Block) -> AnyRpcBlock

Takes a block as it’s stored internally and returns the eth api conform block format.

Source

pub async fn ensure_block_number<T: Into<BlockId>>( &self, block_id: Option<T>, ) -> Result<u64, BlockchainError>

Converts the BlockNumber into a numeric value

§Errors

returns an error if the requested number is larger than the current height

Source

pub fn convert_block_number(&self, block: Option<BlockNumber>) -> u64

Source

pub async fn with_database_at<F, T>( &self, block_request: Option<BlockRequest>, f: F, ) -> Result<T, BlockchainError>
where F: FnOnce(Box<dyn MaybeFullDatabase + '_>, BlockEnv) -> T,

Helper function to execute a closure with the database at a specific block

Source

pub async fn storage_at( &self, address: Address, index: U256, block_request: Option<BlockRequest>, ) -> Result<B256, BlockchainError>

Source

pub async fn get_code( &self, address: Address, block_request: Option<BlockRequest>, ) -> Result<Bytes, BlockchainError>

Returns the code of the address

If the code is not present and fork mode is enabled then this will try to fetch it from the forked client

Source

pub fn get_code_with_state( &self, state: &dyn DatabaseRef<Error = DatabaseError>, address: Address, ) -> Result<Bytes, BlockchainError>

Source

pub async fn get_balance( &self, address: Address, block_request: Option<BlockRequest>, ) -> Result<U256, BlockchainError>

Returns the balance of the address

If the requested number predates the fork then this will fetch it from the endpoint

Source

pub async fn get_account_at_block( &self, address: Address, block_request: Option<BlockRequest>, ) -> Result<Account, BlockchainError>

Source

pub fn get_balance_with_state<D>( &self, state: D, address: Address, ) -> Result<U256, BlockchainError>
where D: DatabaseRef<Error = DatabaseError>,

Source

pub async fn get_nonce( &self, address: Address, block_request: BlockRequest, ) -> Result<u64, BlockchainError>

Returns the nonce of the address

If the requested number predates the fork then this will fetch it from the endpoint

Source

pub async fn trace_transaction( &self, hash: B256, ) -> Result<Vec<LocalizedTransactionTrace>, BlockchainError>

Returns the traces for the given transaction

Source

pub(crate) fn mined_parity_trace_transaction( &self, hash: B256, ) -> Option<Vec<LocalizedTransactionTrace>>

Returns the traces for the given transaction

Source

pub(crate) fn mined_transaction(&self, hash: B256) -> Option<MinedTransaction>

Returns the traces for the given transaction

Source

pub(crate) fn mined_parity_trace_block( &self, block: u64, ) -> Option<Vec<LocalizedTransactionTrace>>

Returns the traces for the given block

Source

pub async fn debug_trace_transaction( &self, hash: B256, opts: GethDebugTracingOptions, ) -> Result<GethTrace, BlockchainError>

Returns the traces for the given transaction

Source

fn mined_geth_trace_transaction( &self, hash: B256, opts: GethDebugTracingOptions, ) -> Option<Result<GethTrace, BlockchainError>>

Source

pub async fn trace_block( &self, block: BlockNumber, ) -> Result<Vec<LocalizedTransactionTrace>, BlockchainError>

Returns the traces for the given block

Source

pub async fn transaction_receipt( &self, hash: B256, ) -> Result<Option<ReceiptResponse>, BlockchainError>

Source

pub async fn trace_filter( &self, filter: TraceFilter, ) -> Result<Vec<LocalizedTransactionTrace>, BlockchainError>

Source

pub fn mined_receipts(&self, hash: B256) -> Option<Vec<TypedReceipt>>

Returns all receipts of the block

Source

pub fn mined_block_receipts( &self, id: impl Into<BlockId>, ) -> Option<Vec<ReceiptResponse>>

Returns all transaction receipts of the block

Source

pub(crate) fn mined_transaction_receipt( &self, hash: B256, ) -> Option<MinedTransactionReceipt>

Returns the transaction receipt for the given hash

Source

pub async fn block_receipts( &self, number: BlockId, ) -> Result<Option<Vec<ReceiptResponse>>, BlockchainError>

Returns the blocks receipts for the given number

Source

pub async fn transaction_by_block_number_and_index( &self, number: BlockNumber, index: Index, ) -> Result<Option<AnyRpcTransaction>, BlockchainError>

Source

pub async fn transaction_by_block_hash_and_index( &self, hash: B256, index: Index, ) -> Result<Option<AnyRpcTransaction>, BlockchainError>

Source

pub fn mined_transaction_by_block_hash_and_index( &self, block_hash: B256, index: Index, ) -> Option<AnyRpcTransaction>

Source

pub async fn transaction_by_hash( &self, hash: B256, ) -> Result<Option<AnyRpcTransaction>, BlockchainError>

Source

pub fn mined_transaction_by_hash(&self, hash: B256) -> Option<AnyRpcTransaction>

Source

pub async fn prove_account_at( &self, address: Address, keys: Vec<B256>, block_request: Option<BlockRequest>, ) -> Result<AccountProof, BlockchainError>

Prove an account’s existence or nonexistence in the state trie.

Returns a merkle proof of the account’s trie node, account_key == keccak(address)

Source

pub fn new_block_notifications(&self) -> NewBlockNotifications

Returns a new block event stream

Source

fn notify_on_new_block(&self, header: Header, hash: B256)

Notifies all new_block_listeners about the new block

Source

pub async fn reorg( &self, depth: u64, tx_pairs: HashMap<u64, Vec<Arc<PoolTransaction>>>, common_block: Block, ) -> Result<(), BlockchainError>

Reorg the chain to a common height and execute blocks to build new chain.

The state of the chain is rewound using rewind to the common block, including the db, storage, and env.

Finally, do_mine_block is called to create the new chain.

Trait Implementations§

Source§

impl Clone for Backend

Source§

fn clone(&self) -> Backend

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 TransactionValidator for Backend

Source§

fn validate_pool_transaction<'life0, 'life1, 'async_trait>( &'life0 self, tx: &'life1 PendingTransaction, ) -> Pin<Box<dyn Future<Output = Result<(), BlockchainError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Validates the transaction’s validity when it comes to nonce, payment Read more
Source§

fn validate_pool_transaction_for( &self, pending: &PendingTransaction, account: &AccountInfo, env: &EnvWithHandlerCfg, ) -> Result<(), InvalidTransactionError>

Validates the transaction against a specific account before entering the pool
Source§

fn validate_for( &self, tx: &PendingTransaction, account: &AccountInfo, env: &EnvWithHandlerCfg, ) -> Result<(), InvalidTransactionError>

Validates the transaction against a specific account Read more

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<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: 1056 bytes