StateManager

Struct StateManager 

Source
pub struct StateManager<DB> {
    cs: Arc<ChainStore<DB>>,
    cache: TipsetStateCache<StateOutputValue>,
    beacon: Arc<BeaconSchedule>,
    engine: Arc<MultiEngine>,
    receipt_event_cache_handler: Box<dyn TipsetReceiptEventCacheHandler>,
}
Expand description

State manager handles all interactions with the internal Filecoin actors state. This encapsulates the ChainStore functionality, which only handles chain data, to allow for interactions with the underlying state of the chain. The state manager not only allows interfacing with state, but also is used when performing state transitions.

Fields§

§cs: Arc<ChainStore<DB>>

Chain store

§cache: TipsetStateCache<StateOutputValue>

This is a cache which indexes tipsets to their calculated state output (state root, receipt root).

§beacon: Arc<BeaconSchedule>§engine: Arc<MultiEngine>§receipt_event_cache_handler: Box<dyn TipsetReceiptEventCacheHandler>

Handler for caching/retrieving tipset events and receipts.

Implementations§

Source§

impl<DB> StateManager<DB>
where DB: Blockstore,

Source

pub fn get_sectors_for_winning_post( &self, st: &Cid, nv: NetworkVersion, miner_address: &Address, rand: Randomness, ) -> Result<Vec<ExtendedSectorInfo>, Error>

Retrieves and generates a vector of sector info for the winning PoSt verification.

Source§

impl<DB> StateManager<DB>
where DB: Blockstore,

Source

pub fn new(cs: Arc<ChainStore<DB>>) -> Result<Self, Error>

Source

pub fn new_with_engine( cs: Arc<ChainStore<DB>>, engine: Arc<MultiEngine>, ) -> Result<Self, Error>

Source

pub fn heaviest_tipset(&self) -> Arc<Tipset>

Returns the currently tracked heaviest tipset.

Source

pub fn maybe_rewind_heaviest_tipset(&self) -> Result<()>

Returns the currently tracked heaviest tipset and rewind to a most recent valid one if necessary. A valid head has - state tree in the blockstore - actor bundle version in the state tree that matches chain configuration

Source

fn maybe_rewind_heaviest_tipset_once(&self) -> Result<bool>

Source

pub fn populate_cache(&self)

Source

pub fn beacon_schedule(&self) -> &Arc<BeaconSchedule>

Source

pub fn get_network_version(&self, epoch: i64) -> NetworkVersion

Returns network version for the given epoch.

Source

pub fn get_state_tree(&self, state_cid: &Cid) -> Result<StateTree<DB>>

Gets the state tree

Source

pub fn get_actor( &self, addr: &Address, state_cid: Cid, ) -> Result<Option<ActorState>>

Gets actor from given Cid, if it exists.

Source

pub fn get_actor_state<S: LoadActorStateFromBlockstore>( &self, ts: &Tipset, ) -> Result<S>

Gets actor state from implicit actor address

Source

pub fn get_actor_state_from_address<S: LoadActorStateFromBlockstore>( &self, ts: &Tipset, actor_address: &Address, ) -> Result<S>

Gets actor state from explicit actor address

Source

pub fn get_required_actor( &self, addr: &Address, state_cid: Cid, ) -> Result<ActorState>

Gets required actor from given Cid.

Source

pub fn blockstore(&self) -> &Arc<DB>

Returns a reference to the state manager’s Blockstore.

Source

pub fn blockstore_owned(&self) -> Arc<DB>

Source

pub fn chain_store(&self) -> &Arc<ChainStore<DB>>

Returns reference to the state manager’s ChainStore.

Source

pub fn chain_index(&self) -> &Arc<ChainIndex<Arc<DB>>>

Returns reference to the state manager’s ChainIndex.

Source

pub fn chain_config(&self) -> &Arc<ChainConfig>

Returns reference to the state manager’s ChainConfig.

Source

pub fn chain_rand(&self, tipset: Arc<Tipset>) -> ChainRand<DB>

Source

pub fn get_network_state_name(&self, state_cid: Cid) -> Result<StateNetworkName>

Returns the internal, protocol-level network chain from the state.

Source

pub fn is_miner_slashed( &self, addr: &Address, state_cid: &Cid, ) -> Result<bool, Error>

Returns true if miner has been slashed or is considered invalid.

Source

pub fn get_miner_work_addr( &self, state_cid: Cid, addr: &Address, ) -> Result<Address, Error>

Returns raw work address of a miner given the state root.

Source

pub fn get_power( &self, state_cid: &Cid, addr: Option<&Address>, ) -> Result<Option<(Claim, Claim)>, Error>

Returns specified actor’s claimed power and total network power as a tuple.

Source

pub fn get_all_sectors( self: &Arc<Self>, addr: &Address, ts: &Tipset, ) -> Result<Vec<SectorOnChainInfo>>

Source§

impl<DB> StateManager<DB>
where DB: Blockstore + Send + Sync + 'static,

Source

pub async fn tipset_state( self: &Arc<Self>, tipset: &Arc<Tipset>, ) -> Result<(Cid, Cid)>

Returns the pair of (state root, message receipt root). This will either be cached or will be calculated and fill the cache. Tipset state for a given tipset is guaranteed not to be computed twice.

Source

pub async fn tipset_state_output( self: &Arc<Self>, tipset: &Arc<Tipset>, ) -> Result<StateOutput>

Source

fn update_cache_with_state_output( &self, key: &TipsetKey, state_output: &StateOutput, )

update the receipt and events caches

Source

pub async fn tipset_message_receipts( self: &Arc<Self>, tipset: &Arc<Tipset>, ) -> Result<Vec<Receipt>>

Source

pub async fn tipset_state_events( self: &Arc<Self>, tipset: &Arc<Tipset>, events_root: Option<&Cid>, ) -> Result<StateEvents>

Source

fn call_raw( self: &Arc<Self>, msg: &Message, rand: ChainRand<DB>, tipset: &Arc<Tipset>, ) -> Result<ApiInvocResult, Error>

Source

pub fn call( self: &Arc<Self>, message: &Message, tipset: Option<Arc<Tipset>>, ) -> Result<ApiInvocResult, Error>

runs the given message and returns its result without any persisted changes.

Source

pub async fn apply_on_state_with_gas( self: &Arc<Self>, tipset: Option<Arc<Tipset>>, msg: Message, ) -> Result<ApiInvocResult>

Source

pub async fn call_with_gas( self: &Arc<Self>, message: &mut ChainMessage, prior_messages: &[ChainMessage], tipset: Option<Arc<Tipset>>, trace_config: VMTrace, ) -> Result<(InvocResult, ApplyRet, Duration), Error>

Computes message on the given Tipset state, after applying other messages and returns the values computed in the VM.

Source

pub async fn replay( self: &Arc<Self>, ts: Arc<Tipset>, mcid: Cid, ) -> Result<ApiInvocResult, Error>

Replays the given message and returns the result of executing the indicated message, assuming it was executed in the indicated tipset.

Source

pub fn replay_blocking( self: &Arc<Self>, ts: Arc<Tipset>, mcid: Cid, ) -> Result<ApiInvocResult, Error>

Blocking version of replay

Source

pub fn eligible_to_mine( &self, address: &Address, base_tipset: &Tipset, lookback_tipset: &Tipset, ) -> Result<bool, Error>

Checks the eligibility of the miner. This is used in the validation that a block’s miner has the requirements to mine a block.

Source

pub async fn compute_tipset_state( self: &Arc<Self>, tipset: Arc<Tipset>, callback: Option<impl FnMut(MessageCallbackCtx<'_>) -> Result<()> + Send + 'static>, enable_tracing: VMTrace, ) -> Result<StateOutput, Error>

Conceptually, a Tipset consists of blocks which share an epoch. Each block contains messages, which are executed by the Filecoin Virtual Machine.

VM message execution essentially looks like this:

state[N-900..N] * message = state[N+1]

The states above are stored in the IPLD Blockstore, and can be referred to by a Cid - the state root. The previous 900 states (configurable, see https://docs.filecoin.io/reference/general/glossary/#finality) can be queried when executing a message, so a store needs at least that many. (a snapshot typically contains 2000, for example).

Each message costs FIL to execute - this is gas. After execution, the message has a receipt, showing how much gas was spent. This is similarly a Cid into the block store.

For details, see the documentation for apply_block_messages.

Source

pub fn compute_tipset_state_blocking( &self, tipset: Arc<Tipset>, callback: Option<impl FnMut(MessageCallbackCtx<'_>) -> Result<()>>, enable_tracing: VMTrace, ) -> Result<StateOutput, Error>

Blocking version of compute_tipset_state

Source

pub async fn compute_state( self: &Arc<Self>, height: i64, messages: Vec<Message>, tipset: Arc<Tipset>, callback: Option<impl FnMut(MessageCallbackCtx<'_>) -> Result<()> + Send + 'static>, enable_tracing: VMTrace, ) -> Result<StateOutput, Error>

Source

pub fn compute_state_blocking( &self, height: i64, messages: Vec<Message>, tipset: Arc<Tipset>, callback: Option<impl FnMut(MessageCallbackCtx<'_>) -> Result<()>>, enable_tracing: VMTrace, ) -> Result<StateOutput, Error>

Blocking version of compute_state

Source

fn tipset_executed_message( &self, tipset: &Tipset, message: &ChainMessage, allow_replaced: bool, ) -> Result<Option<Receipt>, Error>

Check if tipset had executed the message, by loading the receipt based on the index of the message in the block.

Source

fn search_back_for_message( &self, current: Arc<Tipset>, message: &ChainMessage, look_back_limit: Option<i64>, allow_replaced: Option<bool>, ) -> Result<Option<(Arc<Tipset>, Receipt)>, Error>

Source

pub fn get_receipt( &self, tipset: Arc<Tipset>, msg: Cid, ) -> Result<Receipt, Error>

Returns a message receipt from a given tipset and message CID.

Source

pub async fn wait_for_message( self: &Arc<Self>, msg_cid: Cid, confidence: i64, look_back_limit: Option<i64>, allow_replaced: Option<bool>, ) -> Result<(Option<Arc<Tipset>>, Option<Receipt>), Error>

WaitForMessage blocks until a message appears on chain. It looks backwards in the chain to see if this has already happened. It guarantees that the message has been on chain for at least confidence epochs without being reverted before returning.

Source

pub async fn search_for_message( self: &Arc<Self>, from: Option<Arc<Tipset>>, msg_cid: Cid, look_back_limit: Option<i64>, allow_replaced: Option<bool>, ) -> Result<Option<(Arc<Tipset>, Receipt)>, Error>

Source

pub fn get_bls_public_key( db: &Arc<DB>, addr: &Address, state_cid: Cid, ) -> Result<BlsPublicKey, Error>

Returns a BLS public key from provided address

Source

pub fn lookup_id( &self, addr: &Address, ts: &Tipset, ) -> Result<Option<Address>, Error>

Looks up ID Address from the state at the given Tipset.

Source

pub fn lookup_required_id( &self, addr: &Address, ts: &Tipset, ) -> Result<Address, Error>

Looks up required ID Address from the state at the given Tipset.

Source

pub fn market_state(&self, ts: &Tipset) -> Result<State, Error>

Retrieves market state

Source

pub fn market_balance( &self, addr: &Address, ts: &Tipset, ) -> Result<MarketBalance, Error>

Retrieves market balance in escrow and locked tables.

Source

pub fn miner_info( &self, addr: &Address, ts: &Tipset, ) -> Result<MinerInfo, Error>

Retrieves miner info.

Source

pub fn miner_faults( &self, addr: &Address, ts: &Tipset, ) -> Result<BitField, Error>

Retrieves miner faults.

Source

pub fn miner_recoveries( &self, addr: &Address, ts: &Tipset, ) -> Result<BitField, Error>

Retrieves miner recoveries.

Source

fn all_partition_sectors( &self, addr: &Address, ts: &Tipset, get_sector: impl Fn(Partition<'_>) -> BitField, ) -> Result<BitField, Error>

Source

pub fn miner_power( &self, addr: &Address, ts: &Tipset, ) -> Result<MinerPower, Error>

Retrieves miner power.

Source

pub async fn resolve_to_key_addr( self: &Arc<Self>, addr: &Address, ts: &Arc<Tipset>, ) -> Result<Address, Error>

Similar to resolve_to_key_addr in the forest_vm crate::state_manager but does not allow Actor type of addresses. Uses ts to generate the VM state.

Source

pub async fn miner_get_base_info( self: &Arc<Self>, beacon_schedule: &BeaconSchedule, tipset: Arc<Tipset>, addr: Address, epoch: i64, ) -> Result<Option<MiningBaseInfo>>

Source

pub fn miner_has_min_power( &self, policy: &Policy, addr: &Address, ts: &Tipset, ) -> Result<bool>

Checks power actor state for if miner meets consensus minimum requirements.

Source

pub fn validate_range( self: &Arc<Self>, epochs: RangeInclusive<i64>, ) -> Result<()>

Validates all tipsets at epoch start..=end behind the heaviest tipset.

This spawns rayon::current_num_threads threads to do the compute-heavy work of tipset validation.

§What is validation?

Every state transition returns a new state root, which is typically retained in, e.g., snapshots. For “full” snapshots, all state roots are retained. For standard snapshots, the last 2000 or so state roots are retained.

receipts meanwhile, are typically ephemeral, but each tipset knows the receipt root (hash) of the previous tipset.

This function takes advantage of that fact to validate tipsets:

  • tipset[N] claims that receipt_root[N-1] should be 0xDEADBEEF
  • find tipset[N-1], and perform its state transition to get the actual receipt_root
  • assert that they match

See Self::compute_tipset_state_blocking for an explanation of state transitions.

§Known issues

This function is blocking, but we do observe threads waiting and synchronizing. This is suspected to be due something in the VM or its WASM runtime.

Source

pub fn validate_tipsets<T>(self: &Arc<Self>, tipsets: T) -> Result<()>
where T: Iterator<Item = Arc<Tipset>> + Send,

Source

pub fn get_verified_registry_actor_state(&self, ts: &Tipset) -> Result<State>

Source

pub fn get_claim( &self, addr: &Address, ts: &Tipset, claim_id: ClaimID, ) -> Result<Option<Claim>>

Source

pub fn get_all_claims(&self, ts: &Tipset) -> Result<HashMap<ClaimID, Claim>>

Source

pub fn get_allocation( &self, addr: &Address, ts: &Tipset, allocation_id: u64, ) -> Result<Option<Allocation>>

Source

pub fn get_all_allocations( &self, ts: &Tipset, ) -> Result<HashMap<u64, Allocation>>

Source

pub fn verified_client_status( &self, addr: &Address, ts: &Tipset, ) -> Result<Option<DataCap>>

Source

pub async fn resolve_to_deterministic_address( self: &Arc<Self>, address: Address, ts: Arc<Tipset>, ) -> Result<Address>

Source

pub fn execution_trace( &self, tipset: &Tipset, ) -> Result<(Cid, Vec<ApiInvocResult>)>

Source

fn try_lookup_state_from_next_tipset( &self, tipset: &Tipset, ) -> Option<StateOutputValue>

Attempts to lookup the state and receipt root of the next tipset. This is a performance optimization to avoid recomputing the state and receipt root by checking the blockstore. It only checks the immediate next epoch, as this is the most likely place to find a child.

Auto Trait Implementations§

§

impl<DB> Freeze for StateManager<DB>

§

impl<DB> !RefUnwindSafe for StateManager<DB>

§

impl<DB> Send for StateManager<DB>
where DB: Sync + Send,

§

impl<DB> Sync for StateManager<DB>
where DB: Sync + Send,

§

impl<DB> Unpin for StateManager<DB>

§

impl<DB> !UnwindSafe for StateManager<DB>

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<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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> Conv for T

Source§

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

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

impl<T> FmtForward for T

Source§

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

Source§

impl<T> Instrument for T

Source§

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

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

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

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

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

Source§

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Create a new Painted with a default Style. Read more
Source§

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

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

Source§

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

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

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

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

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

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

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

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

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

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

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

Initializes a with the given initializer. Read more
Source§

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

Dereferences the given pointer. Read more
Source§

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

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

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

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> Tap for T

Source§

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

Immutable access to a value. Read more
Source§

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

Mutable access to a value. Read more
Source§

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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> TryConv for T

Source§

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

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

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

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

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<T> MaybeSend for T
where T: Send,