clementine_core::states::kickoff

Struct KickoffStateMachine

Source
pub struct KickoffStateMachine<T: Owner> {
    pub(crate) matchers: HashMap<Matcher, KickoffEvent>,
    pub(crate) dirty: bool,
    pub(crate) kickoff_data: KickoffData,
    pub(crate) deposit_data: DepositData,
    pub(crate) kickoff_height: u32,
    pub(crate) payout_blockhash: Witness,
    spent_watchtower_utxos: HashSet<usize>,
    latest_blockhash: Witness,
    watchtower_challenges: HashMap<usize, Transaction>,
    operator_asserts: HashMap<usize, Witness>,
    operator_challenge_acks: HashMap<usize, Witness>,
    phantom: PhantomData<T>,
}
Expand description

State machine for tracking a single kickoff process in the protocol.

§Purpose

The KickoffStateMachine manages the lifecycle of a single kickoff process, which is created after a kickoff transaction is detected on Bitcoin. It tracks the transactions related to the kickoff and the resulting data.

§States

  • kickoff_started: The initial state after a kickoff is detected. Waits for further events such as challenges, but still tracks any committed data on Bitcoin (like latest blockhash, operator asserts, watchtower challenges, etc)
  • challenged: Entered if the kickoff is challenged. Watchtower challenges are only sent if the kickoff is challenged.
  • closed: Terminal state indicating the kickoff process has ended, either by kickoff finalizer utxo or burn connector utxo being spent.

§Events

  • Challenged: The kickoff is challenged, transitioning to the challenged state.
  • WatchtowerChallengeSent: A watchtower challenge is detected on Bitcoin, stores the watchtower challenge transaction, and stores the watchtower utxo as spent.
  • OperatorAssertSent: An operator BitVM assert is detected, stores the witness of the assert utxo.
  • WatchtowerChallengeTimeoutSent: A watchtower challenge timeout is detected, stores watchtower utxo as spent.
  • OperatorChallengeAckSent: An operator challenge acknowledgment is detected, stores the witness of the challenge ack utxo, which holds the revealed preimage that can be used to disprove if the operator maliciously doesn’t include the watchtower challenge in the BitVM proof. After sending this transaction, the operator is forced to use the corresponding watchtower challenge in its BitVM proof, otherwise it can be disproven.
  • LatestBlockHashSent: The latest blockhash is committed on Bitcoin, stores the witness of the latest blockhash utxo, which holds the blockhash that should be used by the operator in its BitVM proof.
  • KickoffFinalizerSpent: The kickoff finalizer is spent, ending the kickoff process, transitions to the closed state.
  • BurnConnectorSpent: The burn connector is spent, ending the kickoff process, transitions to the closed state.
  • TimeToSendWatchtowerChallenge: Time to send a watchtower challenge (used in challenged state), this event notifies the owner to create and send a watchtower challenge tx. Verifiers wait after a kickoff to send a watchtower challenge so that the total work in the watchtower challenge is as high as possible.
  • SavedToDb: Indicates the state machine has been persisted and resets the dirty flag.

§Behavior

  • The state machine maintains a set of matchers to detect relevant Bitcoin transactions and trigger corresponding events.
  • It tracks the progress of the kickoff, including challenges, operator actions, and finalization.
  • When terminal events occur (e.g., finalizer or burn connector spent), the state machine transitions to closed and clears all matchers.
  • The state machine interacts with the owner to perform protocol duties (e.g., sending challenges, asserts, or disproves) as required by the protocol logic.

This design ensures that all protocol-critical events related to a kickoff are tracked and handled in a robust, stateful manner, supporting both normal and adversarial scenarios.

Fields§

§matchers: HashMap<Matcher, KickoffEvent>

Maps matchers to the resulting kickoff events.

§dirty: bool

Indicates if the state machine has unsaved changes that need to be persisted on db. dirty flag is set if any matcher matches the current block. the flag is set to true in on_transition and on_dispatch the flag is set to false after the state machine is saved to db and the event SavedToDb is dispatched

§kickoff_data: KickoffData

The kickoff data associated with the kickoff being tracked.

§deposit_data: DepositData

The deposit data that the kickoff tries to withdraw from.

§kickoff_height: u32

The block height at which the kickoff transaction was mined.

§payout_blockhash: Witness

The witness for the kickoff transactions input which is a winternitz signature that commits the payout blockhash.

§spent_watchtower_utxos: HashSet<usize>

Set of indices of watchtower UTXOs that have already been spent.

§latest_blockhash: Witness

The witness taken from the transaction spending the latest blockhash utxo.

§watchtower_challenges: HashMap<usize, Transaction>

Saves watchtower challenges with the watchtower index as the key. Watchtower challenges are encoded as the output of the watchtower challenge tx. (taproot addresses parsed as 32 bytes + OP_RETURN data), in total 144 bytes.

§operator_asserts: HashMap<usize, Witness>

Saves operator asserts with the index of the assert utxo as the key. Operator asserts are witnesses that spend the assert utxo’s and contain the winternitz signature of the BitVM assertion.

§operator_challenge_acks: HashMap<usize, Witness>

Saves operator challenge acks with the index of the challenge ack utxo as the key. Operator challenge acks are witnesses that spend the challenge ack utxo’s. The witness contains the revealed preimage that can be used to disprove if the operator maliciously doesn’t include the watchtower challenge in the BitVM proof.

§phantom: PhantomData<T>

Marker for the generic owner type (phantom data for type safety). This is used to ensure that the state machine is generic over the owner type.

Implementations§

Source§

impl<T: Owner> KickoffStateMachine<T>

Source

pub fn new( kickoff_data: KickoffData, kickoff_height: u32, deposit_data: DepositData, payout_blockhash: Witness, ) -> Self

Source§

impl<T: Owner> KickoffStateMachine<T>

Source

pub(crate) fn on_transition(&mut self, state_a: &State, state_b: &State)

Source

pub fn kickoff_meta(&self, method: &'static str) -> StateMachineError

Source

pub(crate) fn on_dispatch( &mut self, _state: StateOrSuperstate<'_, '_, Self>, evt: &KickoffEvent, )

Source

async fn create_matcher_for_latest_blockhash_if_ready( &mut self, context: &mut StateContext<T>, )

Checks if the latest blockhash is ready to be committed on Bitcoin. The check is done by checking if all watchtower challenge utxos are spent. If the check is successful, the a new matcher is created to send latest blockhash tx after finality depth blocks pass from current block height.

Source

async fn disprove_if_ready(&mut self, context: &mut StateContext<T>)

Checks if the disprove is ready to be sent on Bitcoin The check is done by checking if all operator asserts are received, latest blockhash is committed and all watchtower challenge utxos are spent If the check is successful, the disprove is sent on Bitcoin

Source

async fn send_operator_asserts_if_ready( &mut self, context: &mut StateContext<T>, )

Checks if the operator asserts are ready to be sent on Bitcoin The check is done by checking if all watchtower challenge utxos are spent and latest blockhash is committed If the check is successful, the operator asserts are sent on Bitcoin

Source

async fn send_watchtower_challenge(&mut self, context: &mut StateContext<T>)

Source

async fn send_disprove(&mut self, context: &mut StateContext<T>)

Source

async fn send_latest_blockhash(&mut self, context: &mut StateContext<T>)

Source

async fn unhandled_event( &mut self, context: &mut StateContext<T>, event: &KickoffEvent, )

Source

pub(crate) async fn on_challenged_entry( &mut self, context: &mut StateContext<T>, )

If the kickoff is challenged, the state machine will add corresponding matchers for sending watchtower challenges after some amount of blocks passes since the kickoff was included in Bitcoin. Sending watchtower challenges only happen if the kickoff is challenged. As sending latest blockhash commit and asserts depend on watchtower challenges/timeouts being sent, they will also not be sent if the kickoff is not challenged and kickoff finalizer is spent with ChallengeTimeout, which changes the state to “Closed”.

Source

pub(crate) async fn challenged( &mut self, event: &KickoffEvent, context: &mut StateContext<T>, ) -> Response<State>

State that is entered when the kickoff is challenged It only includes special handling for the TimeToSendWatchtowerChallenge event All other events are handled in the kickoff superstate

Source

async fn kickoff( &mut self, event: &KickoffEvent, context: &mut StateContext<T>, ) -> Response<State>

Source

pub(crate) async fn kickoff_started( &mut self, event: &KickoffEvent, context: &mut StateContext<T>, ) -> Response<State>

State that is entered when the kickoff is started It will transition to the “Challenged” state if the kickoff is challenged

Source

async fn add_default_kickoff_matchers( &mut self, context: &mut StateContext<T>, ) -> Result<(), BridgeError>

Adds the default matchers that will be used if the state is “challenged” or “kickoff_started”. These matchers are used to detect when various transactions in the contract are mined on Bitcoin.

Source

pub(crate) async fn on_kickoff_started_entry( &mut self, context: &mut StateContext<T>, )

Source

pub(crate) async fn on_closed_entry(&mut self, context: &mut StateContext<T>)

Clears all matchers when the state is “closed”. This means the state machine will not do any more actions anymore.

Source

pub(crate) async fn closed( &mut self, event: &KickoffEvent, context: &mut StateContext<T>, ) -> Response<State>

Trait Implementations§

Source§

impl<T: Owner> BlockMatcher for KickoffStateMachine<T>

Source§

impl<T: Clone + Owner> Clone for KickoffStateMachine<T>

Source§

fn clone(&self) -> KickoffStateMachine<T>

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<T: Debug + Owner> Debug for KickoffStateMachine<T>

Source§

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

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

impl<'de, T: Owner> Deserialize<'de> for KickoffStateMachine<T>

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl<T: Owner> IntoStateMachine for KickoffStateMachine<T>

Source§

const INITIAL: State

Initial state of the state machine.
Source§

const ON_TRANSITION: fn(_: &mut Self, _: &Self::State, _: &Self::State) = Self::on_transition

Method that is called after every transition.
Source§

const ON_DISPATCH: fn(_: &mut Self, _: StateOrSuperstate<'_, '_, Self>, _: &Self::Event<'_>) = Self::on_dispatch

Method that is called before an event is dispatched to a state or superstate handler.
Source§

type Event<'event> = KickoffEvent

Event that is processed by the state machine.
Source§

type Context<'context> = StateContext<T>

External context that can be passed in.
Source§

type State = State

Enumeration of the various states.
Source§

type Superstate<'sub> = Superstate

Enumeration of the various superstates.
Source§

impl<T: PartialEq + Owner> PartialEq for KickoffStateMachine<T>

Source§

fn eq(&self, other: &KickoffStateMachine<T>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<T: Owner> Serialize for KickoffStateMachine<T>

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl<T: Owner> State<KickoffStateMachine<T>> for State

Source§

fn call_handler<'fut>( &'fut mut self, shared_storage: &'fut mut KickoffStateMachine<T>, event: &'fut <KickoffStateMachine<T> as IntoStateMachine>::Event<'_>, context: &'fut mut <KickoffStateMachine<T> as IntoStateMachine>::Context<'_>, ) -> Pin<Box<dyn Future<Output = Response<Self>> + Send + 'fut>>

Call the handler for the current state and let it handle the given event.
Source§

fn call_entry_action<'fut>( &'fut mut self, shared_storage: &'fut mut KickoffStateMachine<T>, context: &'fut mut <KickoffStateMachine<T> as IntoStateMachine>::Context<'_>, ) -> Pin<Box<dyn Future<Output = ()> + Send + 'fut>>

Call the entry action for the current state.
Source§

fn call_exit_action<'fut>( &'fut mut self, shared_storage: &'fut mut KickoffStateMachine<T>, context: &'fut mut <KickoffStateMachine<T> as IntoStateMachine>::Context<'_>, ) -> Pin<Box<dyn Future<Output = ()> + Send + 'fut>>

Call the exit action for the current state.
Source§

fn superstate( &mut self, ) -> Option<<KickoffStateMachine<T> as IntoStateMachine>::Superstate<'_>>

Return the superstate of the current state, if there is one.
Source§

impl<'sub, T: Owner> Superstate<KickoffStateMachine<T>> for Superstate
where Self: 'sub,

Source§

fn call_handler<'fut>( &'fut mut self, shared_storage: &'fut mut KickoffStateMachine<T>, event: &'fut <KickoffStateMachine<T> as IntoStateMachine>::Event<'_>, context: &'fut mut <KickoffStateMachine<T> as IntoStateMachine>::Context<'_>, ) -> Pin<Box<dyn Future<Output = Response<<KickoffStateMachine<T> as IntoStateMachine>::State>> + Send + 'fut>>

Call the handler for the current superstate.
Source§

fn call_entry_action<'fut>( &'fut mut self, shared_storage: &'fut mut KickoffStateMachine<T>, context: &'fut mut <KickoffStateMachine<T> as IntoStateMachine>::Context<'_>, ) -> Pin<Box<dyn Future<Output = ()> + Send + 'fut>>

Call the entry action for the current superstate.
Source§

fn call_exit_action<'fut>( &'fut mut self, shared_storage: &'fut mut KickoffStateMachine<T>, context: &'fut mut <KickoffStateMachine<T> as IntoStateMachine>::Context<'_>, ) -> Pin<Box<dyn Future<Output = ()> + Send + 'fut>>

Call the exit action for the current superstate.
Source§

fn superstate( &mut self, ) -> Option<<KickoffStateMachine<T> as IntoStateMachine>::Superstate<'_>>

Return the superstate of the current superstate, if there is one.
Source§

impl<T: Eq + Owner> Eq for KickoffStateMachine<T>

Source§

impl<T: Owner> StructuralPartialEq for KickoffStateMachine<T>

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
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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
§

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
§

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<'de, T> BorrowedRpcObject<'de> for T
where T: RpcBorrow<'de> + RpcSend,

Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

§

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

§

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

§

impl<'de, T> RpcBorrow<'de> for T
where T: Deserialize<'de> + Debug + Send + Sync + Unpin,

§

impl<T> RpcObject for T
where T: RpcSend + RpcRecv,

§

impl<T> RpcRecv for T
where T: DeserializeOwned + Debug + Send + Sync + Unpin + 'static,

§

impl<T> RpcSend for T
where T: Serialize + Clone + Debug + Send + Sync + Unpin,