pub struct MultisigClient { /* private fields */ }Expand description
Main client for interacting with multisig accounts.
This client manages a single multisig account connected to a GUARDIAN server, providing a high-level API for creating and managing multisig accounts, proposals, and transactions.
§Example
use miden_multisig_client::MultisigClient;
use miden_client::rpc::Endpoint;
let mut client = MultisigClient::builder()
.miden_endpoint(Endpoint::new("http://localhost:57291"))
.guardian_endpoint("http://localhost:50051")
.data_dir("/tmp/multisig")
.generate_key()
.build()
.await?;
let account = client.create_account(2, vec![signer1, signer2]).await?;Implementations§
Source§impl MultisigClient
impl MultisigClient
Sourcepub async fn create_account(
&mut self,
threshold: u32,
signer_commitments: Vec<Word>,
) -> Result<&MultisigAccount>
pub async fn create_account( &mut self, threshold: u32, signer_commitments: Vec<Word>, ) -> Result<&MultisigAccount>
Creates a new multisig account.
§Arguments
threshold- Minimum number of signatures required (default threshold)signer_commitments- Public key commitments of all signers
For per-procedure thresholds, use create_account_with_proc_thresholds instead.
Sourcepub async fn create_account_with_proc_thresholds(
&mut self,
threshold: u32,
signer_commitments: Vec<Word>,
proc_threshold_overrides: Vec<ProcedureThreshold>,
) -> Result<&MultisigAccount>
pub async fn create_account_with_proc_thresholds( &mut self, threshold: u32, signer_commitments: Vec<Word>, proc_threshold_overrides: Vec<ProcedureThreshold>, ) -> Result<&MultisigAccount>
Creates a new multisig account with per-procedure threshold overrides.
§Arguments
threshold- Minimum number of signatures required (default threshold)signer_commitments- Public key commitments of all signersproc_threshold_overrides- Per-procedure threshold overrides using named procedures.
§Example
use miden_multisig_client::{ProcedureThreshold, ProcedureName};
let thresholds = vec![
ProcedureThreshold::new(ProcedureName::ReceiveAsset, 1),
ProcedureThreshold::new(ProcedureName::UpdateSigners, 3),
];
let account = client.create_account_with_proc_thresholds(
2, // default 2-of-3
signer_commitments,
thresholds,
).await?;Sourcepub async fn pull_account(
&mut self,
account_id: AccountId,
) -> Result<&MultisigAccount>
pub async fn pull_account( &mut self, account_id: AccountId, ) -> Result<&MultisigAccount>
Pulls an account from GUARDIAN and loads it locally.
Use this when joining an existing multisig as a cosigner.
Sourcepub async fn push_account(&mut self) -> Result<()>
pub async fn push_account(&mut self) -> Result<()>
Pushes the current account to GUARDIAN for initial registration.
Sourcepub async fn sync_network_only(&mut self) -> Result<()>
pub async fn sync_network_only(&mut self) -> Result<()>
Syncs only with the Miden network and refreshes local cached account state.
Sourcepub async fn sync_from_guardian(&mut self) -> Result<()>
pub async fn sync_from_guardian(&mut self) -> Result<()>
Syncs account state from GUARDIAN into the local miden-client store.
Sourcepub async fn verify_state_commitment(&self) -> Result<StateVerificationResult>
pub async fn verify_state_commitment(&self) -> Result<StateVerificationResult>
Explicitly verifies that local account state commitment matches on-chain commitment.
Sourcepub async fn get_deltas(&mut self) -> Result<()>
pub async fn get_deltas(&mut self) -> Result<()>
Fetches deltas from GUARDIAN since the current local nonce and applies them to the local account.
Sourcepub async fn register_on_guardian(&mut self) -> Result<()>
pub async fn register_on_guardian(&mut self) -> Result<()>
Sourcepub async fn set_guardian_endpoint(
&mut self,
new_endpoint: &str,
register: bool,
) -> Result<()>
pub async fn set_guardian_endpoint( &mut self, new_endpoint: &str, register: bool, ) -> Result<()>
Changes the GUARDIAN endpoint and optionally registers the account on the new server.
§Arguments
new_endpoint- The new GUARDIAN server endpoint URLregister- If true, registers the current account on the new GUARDIAN server
§Example
// GUARDIAN server moved to new URL (same keys, no on-chain change needed)
client.set_guardian_endpoint("http://new-guardian:50051", true).await?;Source§impl MultisigClient
impl MultisigClient
Sourcepub async fn reset_miden_client(&mut self) -> Result<()>
pub async fn reset_miden_client(&mut self) -> Result<()>
Resets the miden-client by creating a new instance with a fresh database.
Source§impl MultisigClient
impl MultisigClient
Sourcepub async fn export_proposal_to_string(
&mut self,
proposal_id: &str,
) -> Result<String>
pub async fn export_proposal_to_string( &mut self, proposal_id: &str, ) -> Result<String>
Sourcepub async fn import_proposal(&mut self, path: &Path) -> Result<ExportedProposal>
pub async fn import_proposal(&mut self, path: &Path) -> Result<ExportedProposal>
Sourcepub async fn import_proposal_from_string(
&mut self,
json: &str,
) -> Result<ExportedProposal>
pub async fn import_proposal_from_string( &mut self, json: &str, ) -> Result<ExportedProposal>
Source§impl MultisigClient
impl MultisigClient
Sourcepub async fn list_consumable_notes(&mut self) -> Result<Vec<ConsumableNote>>
pub async fn list_consumable_notes(&mut self) -> Result<Vec<ConsumableNote>>
Lists notes that can be consumed by the current account.
Returns a list of notes that are committed on-chain and can be consumed immediately by the multisig account.
Sourcepub async fn list_notes_with_status(
&mut self,
) -> Result<Vec<(ConsumableNote, Vec<(AccountId, String)>)>>
pub async fn list_notes_with_status( &mut self, ) -> Result<Vec<(ConsumableNote, Vec<(AccountId, String)>)>>
Returns a list of all notes with their consumption status
Sourcepub async fn list_committed_notes(&mut self) -> Result<Vec<ConsumableNote>>
pub async fn list_committed_notes(&mut self) -> Result<Vec<ConsumableNote>>
Returns a list of all committed notes (not just consumable).
Sourcepub async fn list_consumable_notes_filtered(
&mut self,
filter: NoteFilter,
) -> Result<Vec<ConsumableNote>>
pub async fn list_consumable_notes_filtered( &mut self, filter: NoteFilter, ) -> Result<Vec<ConsumableNote>>
Lists consumable notes filtered by the given criteria.
This is a convenience method that combines list_consumable_notes with
filtering. Use this to find notes from a specific faucet or above a
minimum amount.
§Example
use miden_multisig_client::NoteFilter;
// Find notes from a specific faucet with at least 1000 tokens
let filter = NoteFilter {
faucet_id: Some(my_faucet_id),
min_amount: Some(1000),
};
let notes = client.list_consumable_notes_filtered(filter).await?;Source§impl MultisigClient
impl MultisigClient
Sourcepub async fn create_proposal_offline(
&mut self,
transaction_type: TransactionType,
) -> Result<ExportedProposal>
pub async fn create_proposal_offline( &mut self, transaction_type: TransactionType, ) -> Result<ExportedProposal>
Creates a proposal offline without pushing to GUARDIAN.
Only SwitchGuardian transactions can be executed fully offline because
all other transaction types require a GUARDIAN acknowledgment signature.
This returns an ExportedProposal that can be serialized to JSON and
shared with cosigners.
The proposer’s signature is automatically included in the exported proposal.
§Example
use miden_multisig_client::TransactionType;
// Create proposal offline
let exported = client.create_proposal_offline(
TransactionType::SwitchGuardian { new_endpoint, new_commitment }
).await?;
// Save to file for sharing
std::fs::write("proposal.json", exported.to_json()?)?;Sourcepub async fn sign_imported_proposal(
&mut self,
proposal: &mut ExportedProposal,
) -> Result<()>
pub async fn sign_imported_proposal( &mut self, proposal: &mut ExportedProposal, ) -> Result<()>
Signs an imported proposal locally (without GUARDIAN).
The signature is added directly to the proposal. After signing, export the proposal again to share with other cosigners.
Only SwitchGuardian proposals are supported in this mode.
§Example
let mut proposal = client.import_proposal("/tmp/proposal.json").await?;
client.sign_imported_proposal(&mut proposal).await?;
let json = proposal.to_json()?;
std::fs::write("/tmp/proposal_signed.json", json)?;Sourcepub async fn execute_imported_proposal(
&mut self,
exported: &ExportedProposal,
) -> Result<()>
pub async fn execute_imported_proposal( &mut self, exported: &ExportedProposal, ) -> Result<()>
Executes an imported proposal (with all signatures already collected).
This builds and submits the transaction directly to the Miden network without contacting GUARDIAN.
Only SwitchGuardian transactions are supported in this mode.
§Example
let proposal = client.import_proposal("/tmp/proposal_final.json").await?;
client.execute_imported_proposal(&proposal).await?;Source§impl MultisigClient
impl MultisigClient
Sourcepub async fn list_proposals(&mut self) -> Result<Vec<Proposal>>
pub async fn list_proposals(&mut self) -> Result<Vec<Proposal>>
Lists pending proposals for the current account.
Proposals whose nonce is not above the committed account nonce are skipped: they have already been executed or superseded, but GUARDIAN may still report them pending until canonicalization prunes them.
§Errors
Returns an error if any proposal from GUARDIAN cannot be parsed. This ensures malformed GUARDIAN payloads are surfaced rather than silently dropped.
Sourcepub async fn sign_proposal(&mut self, proposal_id: &str) -> Result<Proposal>
pub async fn sign_proposal(&mut self, proposal_id: &str) -> Result<Proposal>
Signs a proposal with the user’s key.
Sourcepub async fn execute_proposal(&mut self, proposal_id: &str) -> Result<()>
pub async fn execute_proposal(&mut self, proposal_id: &str) -> Result<()>
Executes a proposal when it has enough signatures.
This will:
- Sync with the Miden network to get latest chain state
- Get the proposal and verify it has enough signatures
- Push delta to GUARDIAN to get acknowledgment signature
- Build the transaction with all cosigner signatures + GUARDIAN ack
- Execute the transaction on-chain
- Sync and update local account state
A proposal whose nonce is not strictly above the committed account nonce is rejected: it has already been executed or superseded, and re-executing would double-apply the intent and corrupt the nonce/delta sequence GUARDIAN tracks for canonicalization.
SwitchGuardian carries no GUARDIAN ack in the transaction itself (the
switch happens later in finalize_transaction), but its delta is still
pushed to the pre-switch GUARDIAN so it canonicalizes like any other
proposal. That push is best-effort: an unreachable GUARDIAN must not block
the switch, so the ack and any error are discarded.
Sourcepub async fn propose_custom_transaction(
&mut self,
transaction_request_bytes: &[u8],
proposal_type: &str,
) -> Result<Proposal>
pub async fn propose_custom_transaction( &mut self, transaction_request_bytes: &[u8], proposal_type: &str, ) -> Result<Proposal>
Creates a proposal from a producer-built transaction the SDK does not
model (issue #266 producer API). transaction_request_bytes is a serialized
TransactionRequest; proposal_type is a free-form, non-empty label
that MUST NOT collide with a built-in type. The integration keeps its own
recipe to execute later via prepare_custom_execution.
Sourcepub async fn prepare_custom_execution(
&mut self,
proposal_id: &str,
transaction_request_bytes: &[u8],
) -> Result<Vec<SignatureAdvice>>
pub async fn prepare_custom_execution( &mut self, proposal_id: &str, transaction_request_bytes: &[u8], ) -> Result<Vec<SignatureAdvice>>
Assembles the validated execution advice for a threshold-met custom
proposal (issue #266 producer API): the cosigner signatures and the
GUARDIAN acknowledgment, keyed for the transaction’s advice map. The
integration injects this into its own rebuilt transaction request
(request.advice_map_mut().extend(advice)) and submits it via its own
Miden client.
transaction_request_bytes (the serialized transaction request) is used only to verify,
before the acknowledgment is requested, that it reproduces the signed
proposal commitment. On a not-ready proposal or a binding mismatch this
fails before requesting the acknowledgment.
Sourcepub async fn submit_transaction(
&mut self,
request: TransactionRequest,
) -> Result<()>
pub async fn submit_transaction( &mut self, request: TransactionRequest, ) -> Result<()>
Submits an integration-built transaction on-chain (issue #266 producer
API). The caller injects the advice from prepare_custom_execution into
its own transaction request (request.advice_map_mut().extend(advice))
and passes it here to finalize.
Sourcepub async fn propose_transaction(
&mut self,
transaction_type: TransactionType,
) -> Result<Proposal>
pub async fn propose_transaction( &mut self, transaction_type: TransactionType, ) -> Result<Proposal>
Creates a proposal for a transaction.
This is the primary API for creating multisig transaction proposals. It handles all transaction types through a unified interface.
§Example
use miden_multisig_client::TransactionType;
// Add a new cosigner
let proposal = client.propose_transaction(
TransactionType::AddCosigner { new_commitment }
).await?;
// Remove a cosigner
let proposal = client.propose_transaction(
TransactionType::RemoveCosigner { commitment }
).await?;Sourcepub async fn propose_with_fallback(
&mut self,
transaction_type: TransactionType,
) -> Result<ProposalResult>
pub async fn propose_with_fallback( &mut self, transaction_type: TransactionType, ) -> Result<ProposalResult>
Proposes a transaction with automatic fallback to offline mode.
First attempts to create the proposal via GUARDIAN. If GUARDIAN is unavailable
(connection error), falls back to offline proposal creation only when
the transaction supports GUARDIAN-less execution (SwitchGuardian).
This is useful when you want to attempt online coordination but have a graceful fallback path for offline sharing.
§Returns
ProposalResult::Online(Proposal)if GUARDIAN succeededProposalResult::Offline(ExportedProposal)if GUARDIAN failed and transaction isSwitchGuardian
§Example
use miden_multisig_client::{TransactionType, ProposalResult};
let tx = TransactionType::switch_guardian("https://new-guardian.example.com", new_guardian_commitment);
let result = client.propose_with_fallback(
tx
).await?;
match result {
ProposalResult::Online(proposal) => {
println!("Proposal {} created on GUARDIAN", proposal.id);
}
ProposalResult::Offline(exported) => {
println!("GUARDIAN unavailable, share this file with cosigners:");
std::fs::write("proposal.json", exported.to_json()?)?;
}
}Source§impl MultisigClient
impl MultisigClient
Sourcepub fn builder() -> MultisigClientBuilder
pub fn builder() -> MultisigClientBuilder
Creates a new MultisigClientBuilder.
Sourcepub fn guardian_endpoint(&self) -> &str
pub fn guardian_endpoint(&self) -> &str
Returns the GUARDIAN endpoint.
Sourcepub fn account(&self) -> Option<&MultisigAccount>
pub fn account(&self) -> Option<&MultisigAccount>
Returns the current account, if any.
Sourcepub fn account_id(&self) -> Option<AccountId>
pub fn account_id(&self) -> Option<AccountId>
Returns the current account ID, if any.
Sourcepub fn has_account(&self) -> bool
pub fn has_account(&self) -> bool
Returns true if an account is loaded.
Sourcepub fn user_commitment(&self) -> Word
pub fn user_commitment(&self) -> Word
Returns the user’s public key commitment as a Word.
Sourcepub fn user_commitment_hex(&self) -> String
pub fn user_commitment_hex(&self) -> String
Returns the user’s public key commitment as a hex string.
Sourcepub fn key_manager(&self) -> &dyn KeyManager
pub fn key_manager(&self) -> &dyn KeyManager
Returns a reference to the key manager.
Sourcepub async fn recover_by_key(&self) -> Result<Vec<RecoveredAccount>>
pub async fn recover_by_key(&self) -> Result<Vec<RecoveredAccount>>
Recover the set of accounts the configured signer authorizes by
querying GUARDIAN’s /state/lookup endpoint and fetching state for
each match. Mirrors MultisigClient.recoverByKey in the TS SDK.
Returns an empty list when no account on the configured GUARDIAN
authorizes this commitment (distinct from “wrong key”, which fails
authentication first).
Auto Trait Implementations§
impl !RefUnwindSafe for MultisigClient
impl !UnwindSafe for MultisigClient
impl Freeze for MultisigClient
impl Send for MultisigClient
impl Sync for MultisigClient
impl Unpin for MultisigClient
impl UnsafeUnpin for MultisigClient
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more