Skip to main content

TipFeeManager

Struct TipFeeManager 

pub struct TipFeeManager {
    pub validator_tokens: <Mapping<Address, Address> as StorableType>::Handler,
    pub user_tokens: <Mapping<Address, Address> as StorableType>::Handler,
    pub collected_fees: <Mapping<Address, Mapping<Address, Uint<256, 4>>> as StorableType>::Handler,
    pub pools: <Mapping<FixedBytes<32>, Pool> as StorableType>::Handler,
    pub total_supply: <Mapping<FixedBytes<32>, Uint<256, 4>> as StorableType>::Handler,
    pub liquidity_balances: <Mapping<FixedBytes<32>, Mapping<Address, Uint<256, 4>>> as StorableType>::Handler,
    pub pending_fee_swap_reservation: <Mapping<FixedBytes<32>, u128> as StorableType>::Handler,
    pub two_hop_intermediate: <Address as StorableType>::Handler,
    address: Address,
    storage: StorageCtx,
}

Fields§

§validator_tokens: <Mapping<Address, Address> as StorableType>::Handler§user_tokens: <Mapping<Address, Address> as StorableType>::Handler§collected_fees: <Mapping<Address, Mapping<Address, Uint<256, 4>>> as StorableType>::Handler§pools: <Mapping<FixedBytes<32>, Pool> as StorableType>::Handler§total_supply: <Mapping<FixedBytes<32>, Uint<256, 4>> as StorableType>::Handler§liquidity_balances: <Mapping<FixedBytes<32>, Mapping<Address, Uint<256, 4>>> as StorableType>::Handler§pending_fee_swap_reservation: <Mapping<FixedBytes<32>, u128> as StorableType>::Handler§two_hop_intermediate: <Address as StorableType>::Handler§address: Address§storage: StorageCtx

Implementations§

§

impl TipFeeManager

pub fn pool_id( &self, user_token: Address, validator_token: Address, ) -> FixedBytes<32>

Returns the deterministic pool ID for a directional token pair. Note that the pool id is order-dependent: (A, B) produces a different ID than (B, A).

pub fn get_pool(&self, call: getPoolCall) -> Result<Pool, TempoPrecompileError>

Returns the [Pool] reserves for the given user/validator token pair.

pub fn reserve_pool_liquidity( &mut self, pool_id: FixedBytes<32>, amount: u128, ) -> Result<(), TempoPrecompileError>

Reserves pool liquidity in transient storage for a pending fee swap.

pub fn rebalance_swap( &mut self, msg_sender: Address, user_token: Address, validator_token: Address, amount_out: Uint<256, 4>, to: Address, ) -> Result<Uint<256, 4>, TempoPrecompileError>

Executes a rebalance swap: sells amount_out of user-token from the pool in exchange for validator-token at the rebalance rate (N / SCALE). Used by arbitrageurs to rebalance reserves.

§Errors
  • InvalidAmountamount_out is zero or exceeds u128
  • InsufficientReserves — adding amount_in overflows the validator reserve
  • InsufficientLiquidity — remaining reserve would violate the pending reservation (T1C+)
  • UnderOverflow — arithmetic overflow computing amount_in

pub fn mint( &mut self, msg_sender: Address, user_token: Address, validator_token: Address, amount_validator_token: Uint<256, 4>, to: Address, ) -> Result<Uint<256, 4>, TempoPrecompileError>

Mints LP tokens by depositing validator-token into a pool.

On first deposit the pool is initialized with equal reserves and [MIN_LIQUIDITY] is permanently locked. Subsequent deposits mint pro-rata to existing supply. Both tokens must be distinct, USD-denominated TIP-20s.

NOTE: Validators who also provide liquidity have an information advantage over non-validator LPs. Because validators choose their preferred fee token and control transaction inclusion order as block producers, a validator-LP can predict which pool will receive fee-swap revenue and position liquidity accordingly.

§Errors
  • IdenticalAddressesuser_token equals validator_token
  • InvalidAmountamount_validator_token is zero or exceeds u128
  • InvalidCurrency — either token is not USD-denominated
  • InsufficientLiquidity — initial deposit ≤ MIN_LIQUIDITY, or zero liquidity minted
  • InvalidSwapCalculation — pro-rata arithmetic fails
  • UnderOverflow — supply or balance overflow

pub fn burn( &mut self, msg_sender: Address, user_token: Address, validator_token: Address, liquidity: Uint<256, 4>, to: Address, ) -> Result<(Uint<256, 4>, Uint<256, 4>), TempoPrecompileError>

Burns LP tokens and returns the pro-rata share of both pool tokens to to.

On T1C+ the burn is rejected if the remaining validator-token reserve would fall below the pending fee-swap reservation set by TipFeeManager::reserve_pool_liquidity.

§Errors
  • IdenticalAddressesuser_token equals validator_token
  • InvalidAmountliquidity is zero or amounts exceed u128
  • InvalidCurrency — either token is not USD-denominated
  • InsufficientLiquidity — caller’s balance < liquidity, or remaining reserve would violate the pending reservation (T1C+)
  • InsufficientReserves — pool reserves underflow after withdrawal
  • UnderOverflow — supply or balance arithmetic overflows

pub fn plan_fee_route( &self, user_token: Address, validator_token: Address, max_amount: Uint<256, 4>, ) -> Result<(Option<FeeRoute>, Option<Address>, Vec<((Address, Address), u128)>), TempoPrecompileError>

Plans the AMM path needed to swap max_amount of user_token into validator_token under the active hardfork. Read-only; does not reserve.

On T5+ falls back to a two-hop path through userToken.quoteToken() as per TIP-1033. Returns (route, queried_intermediate, pools):

  • route is None when no path has sufficient liquidity.
  • queried_intermediate is Some(addr) whenever userToken.quoteToken() was read, regardless of whether the value is usable. Callers can cache it to skip the cold storage read on subsequent admissions.
  • pools lists every pool slot read during planning, paired with its observed reserve.
§Errors
  • InvalidTokenuser_token does not have a valid TIP-20 prefix
  • UnderOverflow — fee-amount arithmetic overflows

pub fn execute_fee_swap( &mut self, user_token: Address, validator_token: Address, amount_in: Uint<256, 4>, ) -> Result<Uint<256, 4>, TempoPrecompileError>

Executes a fee swap, converting user_token to validator_token at a fixed rate m = 0.997 Called internally by TipFeeManager::collect_fee_post_tx during post-tx fee collection.

§Errors
  • InsufficientLiquidity — pool validator-token reserve is below the required output
  • UnderOverflow — reserve arithmetic overflows or amounts exceed u128

pub fn get_total_supply( &self, pool_id: FixedBytes<32>, ) -> Result<Uint<256, 4>, TempoPrecompileError>

Returns the total supply of LP tokens for the given pool.

pub fn get_liquidity_balances( &self, pool_id: FixedBytes<32>, user: Address, ) -> Result<Uint<256, 4>, TempoPrecompileError>

Returns the LP token balance for user in the given pool.

§

impl TipFeeManager

pub fn new() -> TipFeeManager

Creates an instance of the precompile.

Caution: This does not initialize the account, see Self::initialize.

§

impl TipFeeManager

pub const FEE_BPS: u64 = 25

Swap fee in basis points (0.25%).

pub const BASIS_POINTS: u64 = 10000

Basis-point denominator (10 000 = 100%).

pub const MINIMUM_BALANCE: Uint<256, 4>

Minimum TIP-20 balance required for fee operations (1e9).

pub fn initialize(&mut self) -> Result<(), TempoPrecompileError>

Initializes the fee manager precompile.

pub fn get_validator_token( &self, beneficiary: Address, ) -> Result<Address, TempoPrecompileError>

Returns the validator’s preferred fee token, falling back to [DEFAULT_FEE_TOKEN].

pub fn set_validator_token( &mut self, sender: Address, call: setValidatorTokenCall, beneficiary: Address, ) -> Result<(), TempoPrecompileError>

Sets the caller’s preferred fee token as a validator.

Rejects the call if sender is the current block’s beneficiary (prevents mid-block fee-token changes) or if the token is not a valid USD-denominated TIP-20 registered in [TIP20Factory].

§Errors
  • InvalidToken — token is not a deployed TIP-20 in [TIP20Factory]
  • CannotChangeWithinBlocksender equals the current block beneficiary
  • InvalidCurrency — token is not USD-denominated

pub fn set_user_token( &mut self, sender: Address, call: setUserTokenCall, ) -> Result<(), TempoPrecompileError>

Sets the caller’s preferred fee token as a user. Must be a valid USD-denominated TIP-20 registered in [TIP20Factory].

§Errors
  • InvalidToken — token is not a deployed TIP-20 in [TIP20Factory]
  • InvalidCurrency — token is not USD-denominated

pub fn collect_fee_pre_tx( &mut self, fee_payer: Address, user_token: Address, max_amount: Uint<256, 4>, beneficiary: Address, skip_liquidity_check: bool, ) -> Result<Address, TempoPrecompileError>

Collects fees from fee_payer before transaction execution.

Transfers max_amount of user_token to the fee manager via [TIP20Token] and, if the validator prefers a different token, verifies sufficient pool liquidity. Reserves liquidity on T1C+, with a two-hop fallback through userToken.quoteToken() on T5+. Returns the user’s fee token.

§Errors
  • InvalidTokenuser_token does not have a valid TIP-20 prefix
  • PolicyForbids — TIP-403 policy rejects the fee token transfer
  • InsufficientLiquidity — AMM pool lacks liquidity for the fee swap (T5+: with two-hop fallback)

pub fn collect_fee_post_tx( &mut self, fee_payer: Address, actual_spending: Uint<256, 4>, refund_amount: Uint<256, 4>, fee_token: Address, beneficiary: Address, ) -> Result<Uint<256, 4>, TempoPrecompileError>

Finalizes fee collection after transaction execution.

Refunds unused user_token to fee_payer via [TIP20Token], executes the fee swap through the AMM pool if tokens differ, and accumulates fees for the validator. Returns the validator-credited amount (post-feeAMM haircut, in the validator’s fee token), which is used by the payload builder to score blocks by actual proposer revenue.

§Errors
  • InvalidTokenfee_token does not have a valid TIP-20 prefix
  • InsufficientLiquidity — AMM pool lacks liquidity for the fee swap
  • UnderOverflow — collected-fee accumulator overflows

pub fn distribute_fees( &mut self, validator: Address, token: Address, ) -> Result<(), TempoPrecompileError>

Transfers a validator’s accumulated fee balance to their address via [TIP20Token] and zeroes the ledger. No-ops when the balance is zero.

§Errors
  • InvalidTokentoken does not have a valid TIP-20 prefix

pub fn user_tokens( &self, call: userTokensCall, ) -> Result<Address, TempoPrecompileError>

Reads the stored fee token preference for a user.

§

impl TipFeeManager

pub fn create_precompile(cfg: &CfgEnv<TempoHardfork>) -> DynPrecompile

Creates the EVM precompile for this type.

Trait Implementations§

§

impl ContractStorage for TipFeeManager

§

fn address(&self) -> Address

Contract address.
§

fn storage(&self) -> &StorageCtx

Contract storage accessor.
§

fn storage_mut(&mut self) -> &mut StorageCtx

Contract storage mutable accessor.
§

fn is_initialized(&self) -> Result<bool, TempoPrecompileError>

Returns true if the contract has been initialized (has bytecode deployed).
§

impl Default for TipFeeManager

§

fn default() -> TipFeeManager

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

impl Precompile for TipFeeManager

§

fn call( &mut self, calldata: &[u8], msg_sender: Address, ) -> Result<PrecompileOutput, PrecompileError>

Dispatches an EVM call to this precompile. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

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

§

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

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

§

type Output = R

§

impl<T> Conv for T

§

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

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

impl<T> ErasedDestructor for T
where T: 'static,

§

impl<T> FmtForward for T

§

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<TxEnv, T> FromRecoveredTx<&T> for TxEnv
where TxEnv: FromRecoveredTx<T>,

§

fn from_recovered_tx(tx: &&T, sender: Address) -> TxEnv

Builds a [TxEnv] from a transaction and a sender address.
§

impl<TxEnv, T> FromTxWithEncoded<&T> for TxEnv
where TxEnv: FromTxWithEncoded<T>,

§

fn from_encoded_tx(tx: &&T, sender: Address, encoded: Bytes) -> TxEnv

Builds a [TxEnv] from a transaction, its sender, and encoded transaction bytes.
§

impl<T> FutureExt for T

§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
§

impl<T> Instrument for T

§

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

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

fn in_current_span(self) -> Instrumented<Self>

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

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

Source§

fn into(self) -> U

Calls U::from(self).

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

Source§

impl<T> IntoEither for T

Source§

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

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

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

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

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

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

§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
§

impl<L> LayerExt<L> for L

§

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

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

§

fn fg(&self, value: Color) -> Painted<&T>

Returns a styled value derived from self with the foreground set to value.

This method should be used rarely. Instead, prefer to use color-specific builder methods like red() and green(), which have the same functionality but are pithier.

§Example

Set foreground color to white using fg():

use yansi::{Paint, Color};

painted.fg(Color::White);

Set foreground color to white using white().

use yansi::Paint;

painted.white();
§

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

fn bg(&self, value: Color) -> Painted<&T>

Returns a styled value derived from self with the background set to value.

This method should be used rarely. Instead, prefer to use color-specific builder methods like on_red() and on_green(), which have the same functionality but are pithier.

§Example

Set background color to red using fg():

use yansi::{Paint, Color};

painted.bg(Color::Red);

Set background color to red using on_red().

use yansi::Paint;

painted.on_red();
§

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

fn attr(&self, value: Attribute) -> Painted<&T>

Enables the styling [Attribute] value.

This method should be used rarely. Instead, prefer to use attribute-specific builder methods like bold() and underline(), which have the same functionality but are pithier.

§Example

Make text bold using attr():

use yansi::{Paint, Attribute};

painted.attr(Attribute::Bold);

Make text bold using using bold().

use yansi::Paint;

painted.bold();
§

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

fn quirk(&self, value: Quirk) -> Painted<&T>

Enables the yansi [Quirk] value.

This method should be used rarely. Instead, prefer to use quirk-specific builder methods like mask() and wrap(), which have the same functionality but are pithier.

§Example

Enable wrapping using .quirk():

use yansi::{Paint, Quirk};

painted.quirk(Quirk::Wrap);

Enable wrapping using wrap().

use yansi::Paint;

painted.wrap();
§

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

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

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

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

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

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

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

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

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

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

👎Deprecated since 1.0.1:

renamed to resetting() due to conflicts with Vec::clear(). The clear() method will be removed in a future release.

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

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

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

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

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

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

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

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

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

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

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

fn whenever(&self, value: Condition) -> Painted<&T>

Conditionally enable styling based on whether the [Condition] value applies. Replaces any previous condition.

See the crate level docs for more details.

§Example

Enable styling painted only when both stdout and stderr are TTYs:

use yansi::{Paint, Condition};

painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);
§

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

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

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

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

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

§

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

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

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

Borrows self and passes that borrow into the pipe function. Read more
§

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

Mutably borrows self and passes that borrow into the pipe function. Read more
§

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

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

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

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

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

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

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

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

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

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

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

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

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

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

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

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + 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
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + 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
§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> Tap for T

§

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

Immutable access to a value. Read more
§

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

Mutable access to a value. Read more
§

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

impl<T> TryConv for T

§

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

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

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

Source§

type Error = Infallible

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

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

Performs the conversion.
Source§

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

Source§

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

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

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

Performs the conversion.
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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

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

fn with_current_subscriber(self) -> WithDispatch<Self>

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

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 816 bytes