pub struct EpochCommittees {
non_epoch_committee: NonEpochCommittee,
state: HashMap<EpochNumber, EpochCommittee>,
all_validators: BTreeMap<EpochNumber, RegisteredValidatorMap>,
randomized_committees: BTreeMap<EpochNumber, RandomizedCommittee<StakeTableEntry<PubKey>>>,
da_committees: BTreeMap<u64, DaCommittee>,
first_epoch: Option<EpochNumber>,
epoch_height: u64,
fixed_block_reward: Option<RewardAmount>,
fetcher: Arc<Fetcher>,
}Expand description
Type to describe DA and Stake memberships
Fields§
§non_epoch_committee: NonEpochCommitteeCommittee used when we’re in pre-epoch state
state: HashMap<EpochNumber, EpochCommittee>Holds Stake table and da stake
all_validators: BTreeMap<EpochNumber, RegisteredValidatorMap>holds the full validator candidate sets temporarily, until we store them
randomized_committees: BTreeMap<EpochNumber, RandomizedCommittee<StakeTableEntry<PubKey>>>Randomized committees, filled when we receive the DrbResult
da_committees: BTreeMap<u64, DaCommittee>DA committees, indexed by the first epoch in which they apply
first_epoch: Option<EpochNumber>§epoch_height: u64§fixed_block_reward: Option<RewardAmount>Fixed block reward (used only in V3). starting from V4, block reward is dynamic
fetcher: Arc<Fetcher>Implementations§
Source§impl EpochCommittees
impl EpochCommittees
pub fn first_epoch(&self) -> Option<EpochNumber>
pub fn fetcher(&self) -> &Fetcher
pub fn fixed_block_reward(&self) -> Option<RewardAmount>
Sourceasync fn fetch_and_update_fixed_block_reward(
membership: Arc<RwLock<Self>>,
epoch: EpochNumber,
) -> Result<RewardAmount>
async fn fetch_and_update_fixed_block_reward( membership: Arc<RwLock<Self>>, epoch: EpochNumber, ) -> Result<RewardAmount>
Fetch the fixed block reward and update it if its None. We used a fixed block reward for version v3 Version v4 uses the dynamic block reward Assumes the stake table contract proxy address does not change
pub fn compute_block_reward( epoch: &EpochNumber, total_supply: U256, total_stake: U256, avg_block_time_ms: u64, ) -> Result<RewardAmount>
Sourcepub async fn fetch_and_calculate_block_reward(
current_epoch: EpochNumber,
coordinator: EpochMembershipCoordinator<SeqTypes>,
) -> Result<RewardAmount>
pub async fn fetch_and_calculate_block_reward( current_epoch: EpochNumber, coordinator: EpochMembershipCoordinator<SeqTypes>, ) -> Result<RewardAmount>
returns the block reward for the given epoch.
Reward depends on the epoch root header version: V3: Returns the fixed block reward as V3 only supports fixed reward
= V4 : Returns the dynamic block reward
It also attempts catchup for the root header if not present in the committee, and also for the stake table of the previous epoch before computing the dynamic block reward
Sourceasync fn calculate_dynamic_block_reward(
&self,
epoch: &EpochNumber,
header: &Header,
validators: &AuthenticatedValidatorMap,
) -> Result<Option<RewardAmount>>
async fn calculate_dynamic_block_reward( &self, epoch: &EpochNumber, header: &Header, validators: &AuthenticatedValidatorMap, ) -> Result<Option<RewardAmount>>
Calculates the dynamic block reward for a given block header within an epoch.
The reward is based on a dynamic inflation rate computed from the current stake ratio (p),
where p = total_stake / total_supply. The inflation function R(p) is defined piecewise:
- If
p <= 0.01: R(p) = 0.03 / sqrt(2 * 0.01) - Else: R(p) = 0.03 / sqrt(2 * p)
Sourcepub fn epoch_block_reward(&self, epoch: EpochNumber) -> Option<RewardAmount>
pub fn epoch_block_reward(&self, epoch: EpochNumber) -> Option<RewardAmount>
This function just returns the stored block reward in epoch committee
Sourcefn insert_committee(
&mut self,
epoch: EpochNumber,
validators: AuthenticatedValidatorMap,
block_reward: Option<RewardAmount>,
hash: Option<StakeTableHash>,
header: Option<Header>,
)
fn insert_committee( &mut self, epoch: EpochNumber, validators: AuthenticatedValidatorMap, block_reward: Option<RewardAmount>, hash: Option<StakeTableHash>, header: Option<Header>, )
Updates Self.stake_table with stake_table for
Self.contract_address at l1_block_height. This is intended
to be called before calling self.stake() so that
Self.stake_table only needs to be updated once in a given
life-cycle but may be read from many times.
pub fn active_validators( &self, epoch: &EpochNumber, ) -> Result<AuthenticatedValidatorMap>
pub fn address( &self, epoch: &EpochNumber, bls_key: BLSPubKey, ) -> Result<Address>
pub fn get_validator_config( &self, epoch: &EpochNumber, key: BLSPubKey, ) -> Result<AuthenticatedValidator<BLSPubKey>>
pub fn new_stake( committee_members: Vec<PeerConfig<SeqTypes>>, da_members: Vec<PeerConfig<SeqTypes>>, fixed_block_reward: Option<RewardAmount>, fetcher: Fetcher, epoch_height: u64, ) -> Self
pub async fn reload_stake(&mut self, limit: u64)
fn get_stake_table( &self, epoch: &Option<EpochNumber>, ) -> Option<Vec<PeerConfig<SeqTypes>>>
fn get_da_committee(&self, epoch: Option<EpochNumber>) -> DaCommittee
Sourcefn get_header(&self, epoch: EpochNumber) -> Option<&Header>
fn get_header(&self, epoch: EpochNumber) -> Option<&Header>
Get root leaf header for a given epoch
Trait Implementations§
Source§impl Clone for EpochCommittees
impl Clone for EpochCommittees
Source§fn clone(&self) -> EpochCommittees
fn clone(&self) -> EpochCommittees
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for EpochCommittees
impl Debug for EpochCommittees
Source§impl Membership<SeqTypes> for EpochCommittees
impl Membership<SeqTypes> for EpochCommittees
Source§fn stake_table(&self, epoch: Option<EpochNumber>) -> HSStakeTable<SeqTypes>
fn stake_table(&self, epoch: Option<EpochNumber>) -> HSStakeTable<SeqTypes>
Get the stake table for the current view
Source§fn da_stake_table(&self, epoch: Option<EpochNumber>) -> HSStakeTable<SeqTypes>
fn da_stake_table(&self, epoch: Option<EpochNumber>) -> HSStakeTable<SeqTypes>
Get the stake table for the current view
Source§fn committee_members(
&self,
_view_number: ViewNumber,
epoch: Option<EpochNumber>,
) -> BTreeSet<PubKey>
fn committee_members( &self, _view_number: ViewNumber, epoch: Option<EpochNumber>, ) -> BTreeSet<PubKey>
Get all members of the committee for the current view
Source§fn da_committee_members(
&self,
_view_number: ViewNumber,
epoch: Option<EpochNumber>,
) -> BTreeSet<PubKey>
fn da_committee_members( &self, _view_number: ViewNumber, epoch: Option<EpochNumber>, ) -> BTreeSet<PubKey>
Get all members of the committee for the current view
Source§fn stake(
&self,
pub_key: &PubKey,
epoch: Option<EpochNumber>,
) -> Option<PeerConfig<SeqTypes>>
fn stake( &self, pub_key: &PubKey, epoch: Option<EpochNumber>, ) -> Option<PeerConfig<SeqTypes>>
Get the stake table entry for a public key
Source§fn da_stake(
&self,
pub_key: &PubKey,
epoch: Option<EpochNumber>,
) -> Option<PeerConfig<SeqTypes>>
fn da_stake( &self, pub_key: &PubKey, epoch: Option<EpochNumber>, ) -> Option<PeerConfig<SeqTypes>>
Get the DA stake table entry for a public key
Source§fn has_stake(&self, pub_key: &PubKey, epoch: Option<EpochNumber>) -> bool
fn has_stake(&self, pub_key: &PubKey, epoch: Option<EpochNumber>) -> bool
Check if a node has stake in the committee
Source§fn has_da_stake(&self, pub_key: &PubKey, epoch: Option<EpochNumber>) -> bool
fn has_da_stake(&self, pub_key: &PubKey, epoch: Option<EpochNumber>) -> bool
Check if a node has stake in the committee
Source§fn lookup_leader(
&self,
view_number: ViewNumber,
epoch: Option<EpochNumber>,
) -> Result<PubKey, Self::Error>
fn lookup_leader( &self, view_number: ViewNumber, epoch: Option<EpochNumber>, ) -> Result<PubKey, Self::Error>
Returns the leader’s public key for a given view number and epoch.
If an epoch is provided and a randomized committee exists for that epoch, the leader is selected from the randomized committee. Otherwise, the leader is selected from the non-epoch committee.
§Arguments
view_number- The view number to index into the committee.epoch- The epoch for which to determine the leader. IfNone, uses the non-epoch committee.
§Errors
Returns LeaderLookupError if the epoch is before the first epoch or if the committee is missing.
Source§fn total_nodes(&self, epoch: Option<EpochNumber>) -> usize
fn total_nodes(&self, epoch: Option<EpochNumber>) -> usize
Get the total number of nodes in the committee
Source§fn da_total_nodes(&self, epoch: Option<EpochNumber>) -> usize
fn da_total_nodes(&self, epoch: Option<EpochNumber>) -> usize
Get the total number of DA nodes in the committee
Source§async fn add_epoch_root(
membership: Arc<RwLock<Self>>,
block_header: Header,
) -> Result<()>
async fn add_epoch_root( membership: Arc<RwLock<Self>>, block_header: Header, ) -> Result<()>
Adds the epoch committee and block reward for a given epoch, either by fetching from L1 or using local state if available. It also calculates and stores the block reward based on header version.
Source§fn has_randomized_stake_table(&self, epoch: EpochNumber) -> Result<bool>
fn has_randomized_stake_table(&self, epoch: EpochNumber) -> Result<bool>
Checks if the randomized stake table is available for the given epoch.
Returns Ok(true) if a randomized committee exists for the specified epoch and
the epoch is not before the first epoch. Returns an error if first_epoch is None
or if the provided epoch is before the first epoch.
§Arguments
epoch- The epoch for which to check the presence of a randomized stake table.
§Errors
Returns an error if first_epoch is None or if epoch is before first_epoch.
Source§type Error = LeaderLookupError
type Error = LeaderLookupError
lookup_leader.type StakeTableHash = StakeTableState
Source§fn new<I: NodeImplementation<SeqTypes>>(
_committee_members: Vec<PeerConfig<SeqTypes>>,
_da_members: Vec<PeerConfig<SeqTypes>>,
_storage: Self::Storage,
_network: Arc<<I as NodeImplementation<SeqTypes>>::Network>,
_public_key: <SeqTypes as NodeType>::SignatureKey,
_epoch_height: u64,
) -> Self
fn new<I: NodeImplementation<SeqTypes>>( _committee_members: Vec<PeerConfig<SeqTypes>>, _da_members: Vec<PeerConfig<SeqTypes>>, _storage: Self::Storage, _network: Arc<<I as NodeImplementation<SeqTypes>>::Network>, _public_key: <SeqTypes as NodeType>::SignatureKey, _epoch_height: u64, ) -> Self
Source§fn has_stake_table(&self, epoch: EpochNumber) -> bool
fn has_stake_table(&self, epoch: EpochNumber) -> bool
Source§async fn get_epoch_root(
membership: Arc<RwLock<Self>>,
epoch: EpochNumber,
) -> Result<Leaf2>
async fn get_epoch_root( membership: Arc<RwLock<Self>>, epoch: EpochNumber, ) -> Result<Leaf2>
Source§async fn get_epoch_drb(
membership: Arc<RwLock<Self>>,
epoch: EpochNumber,
) -> Result<DrbResult>
async fn get_epoch_drb( membership: Arc<RwLock<Self>>, epoch: EpochNumber, ) -> Result<DrbResult>
Source§fn add_drb_result(&mut self, epoch: EpochNumber, drb: DrbResult)
fn add_drb_result(&mut self, epoch: EpochNumber, drb: DrbResult)
Source§fn set_first_epoch(&mut self, epoch: EpochNumber, initial_drb_result: DrbResult)
fn set_first_epoch(&mut self, epoch: EpochNumber, initial_drb_result: DrbResult)
Source§fn first_epoch(&self) -> Option<EpochNumber>
fn first_epoch(&self) -> Option<EpochNumber>
None otherwiseSource§fn stake_table_hash(&self, epoch: EpochNumber) -> Option<StakeTableHash>
fn stake_table_hash(&self, epoch: EpochNumber) -> Option<StakeTableHash>
fn add_da_committee( &mut self, first_epoch: u64, committee: Vec<PeerConfig<SeqTypes>>, )
fn set_external_channel( &mut self, _external_channel: Receiver<Event<TYPES>>, ) -> impl Future<Output = ()> + Send
fn total_stake(&self, epoch: Option<EpochNumber>) -> Uint<256, 4>
fn total_da_stake(&self, epoch: Option<EpochNumber>) -> Uint<256, 4>
Source§fn leader(
&self,
view: ViewNumber,
epoch: Option<EpochNumber>,
) -> Result<<TYPES as NodeType>::SignatureKey, Error>
fn leader( &self, view: ViewNumber, epoch: Option<EpochNumber>, ) -> Result<<TYPES as NodeType>::SignatureKey, Error>
Source§fn success_threshold(&self, epoch: Option<EpochNumber>) -> Uint<256, 4>
fn success_threshold(&self, epoch: Option<EpochNumber>) -> Uint<256, 4>
Membership implementationSource§fn da_success_threshold(&self, epoch: Option<EpochNumber>) -> Uint<256, 4>
fn da_success_threshold(&self, epoch: Option<EpochNumber>) -> Uint<256, 4>
Membership implementationSource§fn failure_threshold(&self, epoch: Option<EpochNumber>) -> Uint<256, 4>
fn failure_threshold(&self, epoch: Option<EpochNumber>) -> Uint<256, 4>
Membership implementationSource§fn upgrade_threshold(&self, epoch: Option<EpochNumber>) -> Uint<256, 4>
fn upgrade_threshold(&self, epoch: Option<EpochNumber>) -> Uint<256, 4>
Auto Trait Implementations§
impl Freeze for EpochCommittees
impl !RefUnwindSafe for EpochCommittees
impl Send for EpochCommittees
impl Sync for EpochCommittees
impl Unpin for EpochCommittees
impl !UnwindSafe for EpochCommittees
Blanket Implementations§
§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
type ArchivedMetadata = ()
§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
§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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
§fn deserialize(
&self,
deserializer: &mut D,
) -> Result<With<T, W>, <D as Fallible>::Error>
fn deserialize( &self, deserializer: &mut D, ) -> Result<With<T, W>, <D as Fallible>::Error>
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> 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 more§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling [Attribute] value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi [Quirk] value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the [Condition] value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.