clementine_core::operator

Struct Operator

Source
pub struct Operator<C: CitreaClientT> {
    pub rpc: ExtendedBitcoinRpc,
    pub db: Database,
    pub signer: Actor,
    pub config: BridgeConfig,
    pub collateral_funding_outpoint: OutPoint,
    pub(crate) reimburse_addr: Address,
    pub tx_sender: TxSenderClient,
    pub header_chain_prover: HeaderChainProver,
    pub citrea_client: C,
}

Fields§

§rpc: ExtendedBitcoinRpc§db: Database§signer: Actor§config: BridgeConfig§collateral_funding_outpoint: OutPoint§reimburse_addr: Address§tx_sender: TxSenderClient§header_chain_prover: HeaderChainProver§citrea_client: C

Implementations§

Source§

impl<C> Operator<C>
where C: CitreaClientT,

Source

pub async fn create_assert_commitment_txs( &self, assert_data: TransactionRequestData, commit_data: Vec<Vec<Vec<u8>>>, dbtx: Option<DatabaseTransaction<'_, '_>>, ) -> Result<Vec<(TransactionType, Transaction)>, BridgeError>

Creates and signs all the assert commitment transactions for a single kickoff of an operator.

§Arguments
  • assert_data - Data to identify the deposit and kickoff.
  • commit_data - BitVM assertions for the kickoff, for each assert tx.
§Returns

A vector of tuples: 1. TransactionType: MiniAssert(idx) for idx’th assert commitment 2. Transaction: Signed assert commitment transaction

Source

pub async fn create_latest_blockhash_tx( &self, assert_data: TransactionRequestData, block_hash: BlockHash, dbtx: Option<DatabaseTransaction<'_, '_>>, ) -> Result<(TransactionType, Transaction), BridgeError>

Creates and signs the latest blockhash transaction for a single kickoff of an operator.

§Arguments
  • assert_data - Data to identify the deposit and kickoff.
  • block_hash - Block hash to commit using winternitz signatures.
§Returns

A tuple of: 1. TransactionType: LatestBlockhash 2. Transaction: Signed latest blockhash transaction

Source§

impl<C> Operator<C>
where C: CitreaClientT,

Source

pub async fn new(config: BridgeConfig) -> Result<Self, BridgeError>

Creates a new Operator.

Source

pub async fn send_initial_round_tx( &self, round_tx: &Transaction, ) -> Result<(), BridgeError>

Source

pub async fn get_params( &self, ) -> Result<(Receiver<PublicKey>, Receiver<Signature>), BridgeError>

Returns an operator’s winternitz public keys and challenge ackpreimages & hashes.

§Returns
  • [mpsc::Receiver]: A [tokio] data channel with a type of [winternitz::PublicKey] and size of operator’s winternitz public keys count
  • [mpsc::Receiver]: A [tokio] data channel with a type of PublicHash and size of operator’s challenge ack preimages & hashes count
Source

pub async fn deposit_sign( &self, deposit_data: DepositData, ) -> Result<Receiver<Signature>, BridgeError>

Source

pub async fn track_rounds(&self) -> Result<(), BridgeError>

Creates the round state machine by adding a system event to the database

Source

fn is_profitable( input_amount: Amount, withdrawal_amount: Amount, bridge_amount_sats: Amount, operator_withdrawal_fee_sats: Amount, ) -> bool

Checks if the withdrawal amount is within the acceptable range.

Source

pub async fn withdraw( &self, withdrawal_index: u32, in_signature: Signature, in_outpoint: OutPoint, out_script_pubkey: ScriptBuf, out_amount: Amount, ) -> Result<Transaction, BridgeError>

Prepares a withdrawal by:

  1. Checking if the withdrawal has been made on Citrea
  2. Verifying the given signature
  3. Checking if the withdrawal is profitable or not
  4. Funding the withdrawal transaction using TxSender RBF option
§Parameters
  • withdrawal_idx: Citrea withdrawal UTXO index
  • in_signature: User’s signature that is going to be used for signing withdrawal transaction input
  • in_outpoint: User’s input for the payout transaction
  • out_script_pubkey: User’s script pubkey which will be used in the payout transaction’s output
  • out_amount: Payout transaction output’s value
§Returns
  • Ok(()) if the withdrawal checks are successful and a payout transaction is added to the TxSender
  • Err(BridgeError) if the withdrawal checks fail
Source

pub fn generate_assert_winternitz_pubkeys( &self, deposit_outpoint: OutPoint, ) -> Result<Vec<PublicKey>, BridgeError>

Generates Winternitz public keys for every BitVM assert tx for a deposit.

§Returns
Source

pub fn generate_kickoff_winternitz_pubkeys( &self, ) -> Result<Vec<PublicKey>, BridgeError>

Generates Winternitz public keys for every blockhash commit to be used in kickoff utxos. Unique for each kickoff utxo of operator.

§Returns
Source

pub fn generate_unspent_kickoff_sigs( &self, kickoff_wpks: &KickoffWinternitzKeys, ) -> Result<Vec<Signature>, BridgeError>

Source

pub fn generate_challenge_ack_preimages_and_hashes( &self, deposit_data: &DepositData, ) -> Result<Vec<PublicHash>, BridgeError>

Source

pub async fn handle_finalized_payout<'a>( &'a self, dbtx: DatabaseTransaction<'a, '_>, deposit_outpoint: OutPoint, payout_tx_blockhash: BlockHash, ) -> Result<Txid, BridgeError>

Source

async fn start_first_round( &self, dbtx: DatabaseTransaction<'_, '_>, kickoff_wpks: KickoffWinternitzKeys, ) -> Result<(), BridgeError>

Source

pub async fn end_round<'a>( &'a self, dbtx: DatabaseTransaction<'a, '_>, ) -> Result<(), BridgeError>

Source

async fn send_asserts( &self, kickoff_data: KickoffData, deposit_data: DepositData, watchtower_challenges: HashMap<usize, Transaction>, _payout_blockhash: Witness, latest_blockhash: Witness, ) -> Result<(), BridgeError>

Source

fn data(&self) -> OperatorData

Source

async fn send_latest_blockhash( &self, kickoff_data: KickoffData, deposit_data: DepositData, latest_blockhash: BlockHash, ) -> Result<(), BridgeError>

Source

async fn validate_payer_is_operator( &self, dbtx: Option<DatabaseTransaction<'_, '_>>, deposit_id: u32, ) -> Result<(BlockHash, Txid), BridgeError>

For a deposit_id checks that the payer for that deposit is the operator, and the payout blockhash and kickoff txid are set.

Source

async fn get_next_txs_to_send( &self, dbtx: Option<DatabaseTransaction<'_, '_>>, deposit_data: &mut DepositData, payout_blockhash: BlockHash, kickoff_txid: Txid, current_round_idx: RoundIndex, ) -> Result<Vec<(TransactionType, Transaction)>, BridgeError>

Source

pub async fn get_reimbursement_txs( &self, deposit_outpoint: OutPoint, ) -> Result<Vec<(TransactionType, Transaction)>, BridgeError>

For a given deposit outpoint, get the txs that are needed to reimburse the deposit. To avoid operator getting slashed, this function only returns the next tx that needs to be sent This fn can track and enable sending of these transactions during a normal reimbursement process.

  • First, if the current round is less than the round of the kickoff assigned to the deposit by PayoutCheckerTask, it returns the Round TX.
  • After Round tx is sent, it returns the Kickoff tx.
  • After Kickoff tx is sent, it returns the challenge timeout tx.
  • After challenge timeout tx is sent, it returns BurnUnusedKickoffConnectors tx. If challenge timeout tx is not sent, and but challenge utxo was spent, it means the kickoff was challenged, thus the fn returns an error as it cannot handle the challenge process. Automation is required to answer the challenge.
  • After all kickoff utxos are spent, and for any live kickoff, all kickoff finalizers are spent, it returns the ReadyToReimburse tx.
  • After ReadyToReimburse tx is sent, it returns the next Round tx to generate reimbursement utxos.
  • Finally, after the next round tx is sent, it returns the Reimburse tx.
Source

async fn advance_round_manually( &self, dbtx: Option<DatabaseTransaction<'_, '_>>, round_idx: RoundIndex, ) -> Result<Vec<(TransactionType, Transaction)>, BridgeError>

Checks the current round status, and returns the next txs that are safe to send to be able to advance to the next round.

Source

async fn find_and_mark_unspent_kickoff_utxos( &self, dbtx: Option<DatabaseTransaction<'_, '_>>, round_idx: RoundIndex, round_txid: Txid, current_chain_height: u32, ) -> Result<(Vec<usize>, bool), BridgeError>

Finds unspent kickoff UTXOs and marks spent ones as used in the database. Returns the unspent kickoff utxos (doesn’t matter if finalized or unfinalized) and a boolean to mark if all utxos are spent and finalized

Source

async fn create_burn_unused_kickoff_connectors_tx( &self, round_idx: RoundIndex, unspent_kickoff_utxos: &[usize], ) -> Result<Vec<(TransactionType, Transaction)>, BridgeError>

Creates a transaction that burns unused kickoff connectors.

Source

async fn validate_all_kickoff_finalizers_spent( &self, dbtx: Option<DatabaseTransaction<'_, '_>>, round_idx: RoundIndex, current_chain_height: u32, ) -> Result<(), BridgeError>

Validates that all kickoff finalizers are spent for the given round.

Source

async fn send_next_round_tx( &self, dbtx: Option<DatabaseTransaction<'_, '_>>, round_idx: RoundIndex, ) -> Result<Vec<(TransactionType, Transaction)>, BridgeError>

Checks if the next round tx is on chain, if it is, updates the database, otherwise returns the round tx that needs to be sent.

Trait Implementations§

Source§

impl<C: Clone + CitreaClientT> Clone for Operator<C>

Source§

fn clone(&self) -> Operator<C>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<C: Debug + CitreaClientT> Debug for Operator<C>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<C> From<Operator<C>> for OperatorParams
where C: CitreaClientT,

Source§

fn from(operator: Operator<C>) -> Self

Converts to this type from the input type.
Source§

impl<C> NamedEntity for Operator<C>
where C: CitreaClientT,

Source§

const ENTITY_NAME: &'static str = "operator"

A string identifier for this owner type used to distinguish between state machines with different owners in the database. Read more
Source§

const TX_SENDER_CONSUMER_ID: &'static str = "verifier_tx_sender"

Consumer ID for the tx sender task.
Source§

const FINALIZED_BLOCK_CONSUMER_ID_AUTOMATION: &'static str = "operator_finalized_block_fetcher_automation"

Consumer ID for the finalized block task with automation.
Source§

const FINALIZED_BLOCK_CONSUMER_ID_NO_AUTOMATION: &'static str = "operator_finalized_block_fetcher_no_automation"

Consumer ID for the finalized block task with no automation.
Source§

impl<C> Owner for Operator<C>
where C: CitreaClientT,

Source§

fn handle_duty<'life0, 'async_trait>( &'life0 self, duty: Duty, ) -> Pin<Box<dyn Future<Output = Result<DutyResult, BridgeError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Handle a protocol-related duty
Source§

fn create_txhandlers<'life0, 'async_trait>( &'life0 self, tx_type: TransactionType, contract_context: ContractContext, ) -> Pin<Box<dyn Future<Output = Result<BTreeMap<TransactionType, TxHandler>, BridgeError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Create the transactions for an instance of the L1 contract
Source§

fn handle_finalized_block<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, _dbtx: DatabaseTransaction<'life1, 'life2>, _block_id: u32, _block_height: u32, _block_cache: Arc<BlockCache>, _light_client_proof_wait_interval_secs: Option<u32>, ) -> Pin<Box<dyn Future<Output = Result<(), BridgeError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Handle a new finalized block

Auto Trait Implementations§

§

impl<C> Freeze for Operator<C>
where C: Freeze,

§

impl<C> !RefUnwindSafe for Operator<C>

§

impl<C> Send for Operator<C>

§

impl<C> Sync for Operator<C>

§

impl<C> Unpin for Operator<C>
where C: Unpin,

§

impl<C> !UnwindSafe for Operator<C>

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
§

impl<T> Conv for T

§

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

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

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

Convert 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)

Convert &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)

Convert &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
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> DynClone for T
where T: Clone,

§

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

§

fn exact_from(value: T) -> U

§

impl<T, U> ExactInto<U> for T
where U: ExactFrom<T>,

§

fn exact_into(self) -> U

§

impl<T> FmtForward for T

§

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FromRef<T> for T
where T: Clone,

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

impl<T> Instrument for T

§

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

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

fn in_current_span(self) -> Instrumented<Self>

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

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

Source§

fn into(self) -> U

Calls U::from(self).

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

Source§

impl<T> IntoEither for T

Source§

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

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

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

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

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

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

impl<T> L1SyncStatusProvider for T
where T: NamedEntity + Sync + Send + 'static,

Source§

fn get_l1_status<'life0, 'life1, 'async_trait>( db: &'life0 Database, rpc: &'life1 ExtendedBitcoinRpc, ) -> Pin<Box<dyn Future<Output = Result<L1SyncStatus, BridgeError>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait,

§

impl<T, U> OverflowingInto<U> for T
where U: OverflowingFrom<T>,

§

fn overflowing_into(self) -> (U, bool)

§

impl<D> OwoColorize for D

§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either [OwoColorize::fg] or a color-specific method, such as [OwoColorize::green], Read more
§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either [OwoColorize::bg] or a color-specific method, such as [OwoColorize::on_yellow], Read more
§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
§

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: 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: 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, U> RoundingInto<U> for T
where U: RoundingFrom<T>,

§

fn rounding_into(self, rm: RoundingMode) -> (U, Ordering)

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T, U> SaturatingInto<U> for T
where U: SaturatingFrom<T>,

§

fn saturating_into(self) -> U

§

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> ToDebugString for T
where T: Debug,

§

fn to_debug_string(&self) -> String

Returns the String produced by Ts Debug implementation.

§Examples
use malachite_base::strings::ToDebugString;

assert_eq!([1, 2, 3].to_debug_string(), "[1, 2, 3]");
assert_eq!(
    [vec![2, 3], vec![], vec![4]].to_debug_string(),
    "[[2, 3], [], [4]]"
);
assert_eq!(Some(5).to_debug_string(), "Some(5)");
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryClone for T
where T: Clone,

§

fn try_clone(&self) -> Result<T, Error>

Clones self, possibly returning an error.
§

impl<T> TryConv for T

§

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

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

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

Source§

type Error = Infallible

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

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

Performs the conversion.
Source§

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

Source§

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

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

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

Performs the conversion.
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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

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

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<T, U> WrappingInto<U> for T
where U: WrappingFrom<T>,

§

fn wrapping_into(self) -> U

§

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

§

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