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,
impl<DB> StateManager<DB>where
DB: Blockstore,
Sourcepub fn get_sectors_for_winning_post(
&self,
st: &Cid,
nv: NetworkVersion,
miner_address: &Address,
rand: Randomness,
) -> Result<Vec<ExtendedSectorInfo>, Error>
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,
impl<DB> StateManager<DB>where
DB: Blockstore,
pub fn new(cs: Arc<ChainStore<DB>>) -> Result<Self, Error>
pub fn new_with_engine( cs: Arc<ChainStore<DB>>, engine: Arc<MultiEngine>, ) -> Result<Self, Error>
Sourcepub fn heaviest_tipset(&self) -> Arc<Tipset>
pub fn heaviest_tipset(&self) -> Arc<Tipset>
Returns the currently tracked heaviest tipset.
Sourcepub fn maybe_rewind_heaviest_tipset(&self) -> Result<()>
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
fn maybe_rewind_heaviest_tipset_once(&self) -> Result<bool>
pub fn populate_cache(&self)
pub fn beacon_schedule(&self) -> &Arc<BeaconSchedule>
Sourcepub fn get_network_version(&self, epoch: i64) -> NetworkVersion
pub fn get_network_version(&self, epoch: i64) -> NetworkVersion
Returns network version for the given epoch.
Sourcepub fn get_state_tree(&self, state_cid: &Cid) -> Result<StateTree<DB>>
pub fn get_state_tree(&self, state_cid: &Cid) -> Result<StateTree<DB>>
Gets the state tree
Sourcepub fn get_actor(
&self,
addr: &Address,
state_cid: Cid,
) -> Result<Option<ActorState>>
pub fn get_actor( &self, addr: &Address, state_cid: Cid, ) -> Result<Option<ActorState>>
Gets actor from given Cid, if it exists.
Sourcepub fn get_actor_state<S: LoadActorStateFromBlockstore>(
&self,
ts: &Tipset,
) -> Result<S>
pub fn get_actor_state<S: LoadActorStateFromBlockstore>( &self, ts: &Tipset, ) -> Result<S>
Gets actor state from implicit actor address
Sourcepub fn get_actor_state_from_address<S: LoadActorStateFromBlockstore>(
&self,
ts: &Tipset,
actor_address: &Address,
) -> Result<S>
pub fn get_actor_state_from_address<S: LoadActorStateFromBlockstore>( &self, ts: &Tipset, actor_address: &Address, ) -> Result<S>
Gets actor state from explicit actor address
Sourcepub fn get_required_actor(
&self,
addr: &Address,
state_cid: Cid,
) -> Result<ActorState>
pub fn get_required_actor( &self, addr: &Address, state_cid: Cid, ) -> Result<ActorState>
Gets required actor from given Cid.
Sourcepub fn blockstore(&self) -> &Arc<DB>
pub fn blockstore(&self) -> &Arc<DB>
Returns a reference to the state manager’s Blockstore.
pub fn blockstore_owned(&self) -> Arc<DB>
Sourcepub fn chain_store(&self) -> &Arc<ChainStore<DB>>
pub fn chain_store(&self) -> &Arc<ChainStore<DB>>
Returns reference to the state manager’s ChainStore.
Sourcepub fn chain_index(&self) -> &Arc<ChainIndex<Arc<DB>>>
pub fn chain_index(&self) -> &Arc<ChainIndex<Arc<DB>>>
Returns reference to the state manager’s ChainIndex.
Sourcepub fn chain_config(&self) -> &Arc<ChainConfig>
pub fn chain_config(&self) -> &Arc<ChainConfig>
Returns reference to the state manager’s ChainConfig.
pub fn chain_rand(&self, tipset: Arc<Tipset>) -> ChainRand<DB>
Sourcepub fn get_network_state_name(&self, state_cid: Cid) -> Result<StateNetworkName>
pub fn get_network_state_name(&self, state_cid: Cid) -> Result<StateNetworkName>
Returns the internal, protocol-level network chain from the state.
Sourcepub fn is_miner_slashed(
&self,
addr: &Address,
state_cid: &Cid,
) -> Result<bool, Error>
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.
Sourcepub fn get_miner_work_addr(
&self,
state_cid: Cid,
addr: &Address,
) -> Result<Address, Error>
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.
Sourcepub fn get_power(
&self,
state_cid: &Cid,
addr: Option<&Address>,
) -> Result<Option<(Claim, Claim)>, Error>
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.
pub fn get_all_sectors( self: &Arc<Self>, addr: &Address, ts: &Tipset, ) -> Result<Vec<SectorOnChainInfo>>
Source§impl<DB> StateManager<DB>
impl<DB> StateManager<DB>
Sourcepub async fn tipset_state(
self: &Arc<Self>,
tipset: &Arc<Tipset>,
) -> Result<(Cid, Cid)>
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.
pub async fn tipset_state_output( self: &Arc<Self>, tipset: &Arc<Tipset>, ) -> Result<StateOutput>
Sourcefn update_cache_with_state_output(
&self,
key: &TipsetKey,
state_output: &StateOutput,
)
fn update_cache_with_state_output( &self, key: &TipsetKey, state_output: &StateOutput, )
update the receipt and events caches
pub async fn tipset_message_receipts( self: &Arc<Self>, tipset: &Arc<Tipset>, ) -> Result<Vec<Receipt>>
pub async fn tipset_state_events( self: &Arc<Self>, tipset: &Arc<Tipset>, events_root: Option<&Cid>, ) -> Result<StateEvents>
fn call_raw( self: &Arc<Self>, msg: &Message, rand: ChainRand<DB>, tipset: &Arc<Tipset>, ) -> Result<ApiInvocResult, Error>
Sourcepub fn call(
self: &Arc<Self>,
message: &Message,
tipset: Option<Arc<Tipset>>,
) -> Result<ApiInvocResult, Error>
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.
pub async fn apply_on_state_with_gas( self: &Arc<Self>, tipset: Option<Arc<Tipset>>, msg: Message, ) -> Result<ApiInvocResult>
Sourcepub 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>
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.
Sourcepub async fn replay(
self: &Arc<Self>,
ts: Arc<Tipset>,
mcid: Cid,
) -> Result<ApiInvocResult, Error>
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.
Sourcepub fn replay_blocking(
self: &Arc<Self>,
ts: Arc<Tipset>,
mcid: Cid,
) -> Result<ApiInvocResult, Error>
pub fn replay_blocking( self: &Arc<Self>, ts: Arc<Tipset>, mcid: Cid, ) -> Result<ApiInvocResult, Error>
Blocking version of replay
Sourcepub fn eligible_to_mine(
&self,
address: &Address,
base_tipset: &Tipset,
lookback_tipset: &Tipset,
) -> Result<bool, Error>
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.
Sourcepub 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>
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.
Sourcepub fn compute_tipset_state_blocking(
&self,
tipset: Arc<Tipset>,
callback: Option<impl FnMut(MessageCallbackCtx<'_>) -> Result<()>>,
enable_tracing: VMTrace,
) -> Result<StateOutput, Error>
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
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>
Sourcepub 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>
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
Sourcefn tipset_executed_message(
&self,
tipset: &Tipset,
message: &ChainMessage,
allow_replaced: bool,
) -> Result<Option<Receipt>, Error>
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.
fn check_search( &self, current: Arc<Tipset>, message: &ChainMessage, look_back_limit: Option<i64>, allow_replaced: Option<bool>, ) -> Result<Option<(Arc<Tipset>, Receipt)>, Error>
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>
Sourcepub fn get_receipt(
&self,
tipset: Arc<Tipset>,
msg: Cid,
) -> Result<Receipt, Error>
pub fn get_receipt( &self, tipset: Arc<Tipset>, msg: Cid, ) -> Result<Receipt, Error>
Returns a message receipt from a given tipset and message CID.
Sourcepub 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>
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.
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>
Sourcepub fn get_bls_public_key(
db: &Arc<DB>,
addr: &Address,
state_cid: Cid,
) -> Result<BlsPublicKey, Error>
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
Sourcepub fn market_balance(
&self,
addr: &Address,
ts: &Tipset,
) -> Result<MarketBalance, Error>
pub fn market_balance( &self, addr: &Address, ts: &Tipset, ) -> Result<MarketBalance, Error>
Retrieves market balance in escrow and locked tables.
Sourcepub fn miner_info(
&self,
addr: &Address,
ts: &Tipset,
) -> Result<MinerInfo, Error>
pub fn miner_info( &self, addr: &Address, ts: &Tipset, ) -> Result<MinerInfo, Error>
Retrieves miner info.
Sourcepub fn miner_faults(
&self,
addr: &Address,
ts: &Tipset,
) -> Result<BitField, Error>
pub fn miner_faults( &self, addr: &Address, ts: &Tipset, ) -> Result<BitField, Error>
Retrieves miner faults.
Sourcepub fn miner_recoveries(
&self,
addr: &Address,
ts: &Tipset,
) -> Result<BitField, Error>
pub fn miner_recoveries( &self, addr: &Address, ts: &Tipset, ) -> Result<BitField, Error>
Retrieves miner recoveries.
fn all_partition_sectors( &self, addr: &Address, ts: &Tipset, get_sector: impl Fn(Partition<'_>) -> BitField, ) -> Result<BitField, Error>
Sourcepub fn miner_power(
&self,
addr: &Address,
ts: &Tipset,
) -> Result<MinerPower, Error>
pub fn miner_power( &self, addr: &Address, ts: &Tipset, ) -> Result<MinerPower, Error>
Retrieves miner power.
Sourcepub async fn resolve_to_key_addr(
self: &Arc<Self>,
addr: &Address,
ts: &Arc<Tipset>,
) -> Result<Address, Error>
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.
pub async fn miner_get_base_info( self: &Arc<Self>, beacon_schedule: &BeaconSchedule, tipset: Arc<Tipset>, addr: Address, epoch: i64, ) -> Result<Option<MiningBaseInfo>>
Sourcepub fn miner_has_min_power(
&self,
policy: &Policy,
addr: &Address,
ts: &Tipset,
) -> Result<bool>
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.
Sourcepub fn validate_range(
self: &Arc<Self>,
epochs: RangeInclusive<i64>,
) -> Result<()>
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 thatreceipt_root[N-1]should be0xDEADBEEF- find
tipset[N-1], and perform its state transition to get the actualreceipt_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.
pub fn validate_tipsets<T>(self: &Arc<Self>, tipsets: T) -> Result<()>
pub fn get_verified_registry_actor_state(&self, ts: &Tipset) -> Result<State>
pub fn get_claim( &self, addr: &Address, ts: &Tipset, claim_id: ClaimID, ) -> Result<Option<Claim>>
pub fn get_all_claims(&self, ts: &Tipset) -> Result<HashMap<ClaimID, Claim>>
pub fn get_allocation( &self, addr: &Address, ts: &Tipset, allocation_id: u64, ) -> Result<Option<Allocation>>
pub fn get_all_allocations( &self, ts: &Tipset, ) -> Result<HashMap<u64, Allocation>>
pub fn verified_client_status( &self, addr: &Address, ts: &Tipset, ) -> Result<Option<DataCap>>
pub async fn resolve_to_deterministic_address( self: &Arc<Self>, address: Address, ts: Arc<Tipset>, ) -> Result<Address>
pub fn execution_trace( &self, tipset: &Tipset, ) -> Result<(Cid, Vec<ApiInvocResult>)>
Sourcefn try_lookup_state_from_next_tipset(
&self,
tipset: &Tipset,
) -> Option<StateOutputValue>
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>
impl<DB> Sync for StateManager<DB>
impl<DB> Unpin for StateManager<DB>
impl<DB> !UnwindSafe for StateManager<DB>
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();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.
fn clear(&self) -> Painted<&T>
resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.