fedimint_client

Struct Client

Source
pub struct Client {
Show 21 fields pub(crate) config: RwLock<ClientConfig>, pub(crate) api_secret: Option<String>, pub(crate) decoders: ModuleDecoderRegistry, pub(crate) db: Database, pub(crate) federation_id: FederationId, pub(crate) federation_meta: BTreeMap<String, String>, pub(crate) primary_module_instance: ModuleInstanceId, pub(crate) modules: ClientModuleRegistry, pub(crate) module_inits: ClientModuleInitRegistry, pub(crate) executor: Executor, pub(crate) api: DynGlobalApi, pub(crate) root_secret: DerivableSecret, pub(crate) operation_log: OperationLog, pub(crate) secp_ctx: Secp256k1<All>, pub(crate) meta_service: Arc<MetaService>, pub(crate) connector: Connector, pub(crate) task_group: TaskGroup, pub(crate) client_recovery_progress_receiver: Receiver<BTreeMap<ModuleInstanceId, RecoveryProgress>>, pub(crate) log_ordering_wakeup_tx: Sender<()>, pub(crate) log_event_added_rx: Receiver<()>, pub(crate) log_event_added_transient_tx: Sender<EventLogEntry>,
}
Expand description

Main client type

A handle and API to interacting with a single federation. End user applications that want to support interacting with multiple federations at the same time, will need to instantiate and manage multiple instances of this struct.

Under the hood it is starting and managing service tasks, state machines, database and other resources required.

This type is shared externally and internally, and ClientHandle is responsible for external lifecycle management and resource freeing of the Client.

Fields§

§config: RwLock<ClientConfig>§api_secret: Option<String>§decoders: ModuleDecoderRegistry§db: Database§federation_id: FederationId§federation_meta: BTreeMap<String, String>§primary_module_instance: ModuleInstanceId§modules: ClientModuleRegistry§module_inits: ClientModuleInitRegistry§executor: Executor§api: DynGlobalApi§root_secret: DerivableSecret§operation_log: OperationLog§secp_ctx: Secp256k1<All>§meta_service: Arc<MetaService>§connector: Connector§task_group: TaskGroup§client_recovery_progress_receiver: Receiver<BTreeMap<ModuleInstanceId, RecoveryProgress>>

Updates about client recovery progress

§log_ordering_wakeup_tx: Sender<()>

Internal client sender to wake up log ordering task every time a (unuordered) log event is added.

§log_event_added_rx: Receiver<()>

Receiver for events fired every time (ordered) log event is added.

§log_event_added_transient_tx: Sender<EventLogEntry>

Implementations§

Source§

impl Client

Source

pub async fn create_backup(&self, metadata: Metadata) -> Result<ClientBackup>

Create a backup, include provided metadata

Source

async fn load_previous_backup(&self) -> Option<ClientBackup>

Source

async fn store_last_backup(&self, backup: &ClientBackup)

Source

pub async fn backup_to_federation(&self, metadata: Metadata) -> Result<()>

Prepare an encrypted backup and send it to federation for storing

Source

pub fn validate_backup(&self, backup: &EncryptedClientBackup) -> Result<()>

Validate backup before sending it to federation

Source

pub async fn upload_backup(&self, backup: &EncryptedClientBackup) -> Result<()>

Upload backup to federation

Source

pub async fn download_backup_from_federation( &self, ) -> Result<Option<ClientBackup>>

Source

pub async fn download_backup_from_federation_static( api: &DynGlobalApi, root_secret: &DerivableSecret, decoders: &ModuleDecoderRegistry, ) -> Result<Option<ClientBackup>>

Download most recent valid backup found from the Federation

Source

pub fn get_backup_id(&self) -> PublicKey

Backup id derived from the root secret key (public key used to self-sign backup requests)

Source

pub fn get_backup_id_static(root_secret: &DerivableSecret) -> PublicKey

Source

fn get_derived_backup_encryption_key_static( secret: &DerivableSecret, ) -> LessSafeKey

Static version of Self::get_derived_backup_encryption_key for testing without creating whole MintClient

Source

fn get_derived_backup_signing_key_static(secret: &DerivableSecret) -> Keypair

Static version of Self::get_derived_backup_signing_key for testing without creating whole MintClient

Source

fn get_derived_backup_encryption_key(&self) -> LessSafeKey

Source

fn get_derived_backup_signing_key(&self) -> Keypair

Source

pub async fn get_decoded_client_secret<T: Decodable>(&self) -> Result<T>

Source§

impl Client

Source

pub async fn builder(db: Database) -> Result<ClientBuilder>

Initialize a client builder that can be configured to create a new client.

Source

pub fn api(&self) -> &(dyn IGlobalFederationApi + 'static)

Source

pub fn api_clone(&self) -> DynGlobalApi

Source

pub fn task_group(&self) -> &TaskGroup

Get the TaskGroup that is tied to Client’s lifetime.

Source

pub async fn get_config_from_db(db: &Database) -> Option<ClientConfig>

Source

pub async fn get_api_secret_from_db(db: &Database) -> Option<String>

Source

pub async fn store_encodable_client_secret<T: Encodable>( db: &Database, secret: T, ) -> Result<()>

Source

pub async fn load_decodable_client_secret<T: Decodable>( db: &Database, ) -> Result<T>

Source

pub async fn load_decodable_client_secret_opt<T: Decodable>( db: &Database, ) -> Result<Option<T>>

Source

pub async fn load_or_generate_client_secret(db: &Database) -> Result<[u8; 64]>

Source

pub async fn is_initialized(db: &Database) -> bool

Source

pub fn start_executor(self: &Arc<Self>)

Source

pub fn federation_id(&self) -> FederationId

Source

pub(crate) fn context_gen(self: &Arc<Self>) -> ModuleGlobalContextGen

Source

pub async fn config(&self) -> ClientConfig

Source

pub fn api_secret(&self) -> &Option<String>

Source

pub fn decoders(&self) -> &ModuleDecoderRegistry

Source

pub(crate) fn get_module( &self, instance: ModuleInstanceId, ) -> &(dyn IClientModule + Send + Sync)

Returns a reference to the module, panics if not found

Source

pub(crate) fn try_get_module( &self, instance: ModuleInstanceId, ) -> Option<&(dyn IClientModule + Send + Sync)>

Source

pub fn has_module(&self, instance: ModuleInstanceId) -> bool

Source

pub(crate) fn transaction_builder_balance( &self, builder: &TransactionBuilder, ) -> (Amount, Amount)

Returns the input amount and output amount of a transaction

§Panics

If any of the input or output versions in the transaction builder are unknown by the respective module.

Source

pub fn get_internal_payment_markers(&self) -> Result<(PublicKey, u64)>

Source

pub fn get_meta(&self, key: &str) -> Option<String>

Source

pub(crate) fn root_secret(&self) -> DerivableSecret

Source

pub async fn add_state_machines( &self, dbtx: &mut DatabaseTransaction<'_>, states: Vec<DynState>, ) -> AddStateMachinesResult

Source

pub async fn get_active_operations(&self) -> HashSet<OperationId>

Source

pub fn operation_log(&self) -> &OperationLog

Source

pub fn meta_service(&self) -> &Arc<MetaService>

Get the meta manager to read meta fields.

Source

pub(crate) async fn finalize_transaction( &self, dbtx: &mut DatabaseTransaction<'_>, operation_id: OperationId, partial_transaction: TransactionBuilder, ) -> Result<(Transaction, Vec<DynState>, Range<u64>)>

Adds funding to a transaction or removes over-funding via change.

Source

pub async fn finalize_and_submit_transaction<F, M>( &self, operation_id: OperationId, operation_type: &str, operation_meta: F, tx_builder: TransactionBuilder, ) -> Result<(TransactionId, Vec<OutPoint>)>

Add funding and/or change to the transaction builder as needed, finalize the transaction and submit it to the federation.

§Errors

The function will return an error if the operation with given ID already exists.

§Panics

The function will panic if the database transaction collides with other and fails with others too often, this should not happen except for excessively concurrent scenarios.

Source

pub(crate) async fn finalize_and_submit_transaction_inner( &self, dbtx: &mut DatabaseTransaction<'_>, operation_id: OperationId, tx_builder: TransactionBuilder, ) -> Result<(TransactionId, Vec<OutPoint>)>

Source

pub(crate) async fn transaction_update_stream( &self, operation_id: OperationId, ) -> BoxStream<'static, TxSubmissionStatesSM>

Source

pub async fn operation_exists(&self, operation_id: OperationId) -> bool

Source

pub async fn operation_exists_dbtx( dbtx: &mut DatabaseTransaction<'_>, operation_id: OperationId, ) -> bool

Source

pub async fn has_active_states(&self, operation_id: OperationId) -> bool

Source

pub async fn await_primary_module_output( &self, operation_id: OperationId, out_point: OutPoint, ) -> Result<Amount>

Waits for an output from the primary module to reach its final state.

Source

pub fn get_first_module<M: ClientModule>( &self, ) -> Result<ClientModuleInstance<'_, M>>

Returns a reference to a typed module client instance by kind

Source

pub fn get_module_client_dyn( &self, instance_id: ModuleInstanceId, ) -> Result<&(dyn IClientModule + Send + Sync)>

Source

pub fn db(&self) -> &Database

Source

pub async fn transaction_updates( &self, operation_id: OperationId, ) -> TransactionUpdates

Returns a stream of transaction updates for the given operation id that can later be used to watch for a specific transaction being accepted.

Source

pub fn get_first_instance( &self, module_kind: &ModuleKind, ) -> Option<ModuleInstanceId>

Returns the instance id of the first module of the given kind. The primary module will always be returned before any other modules (which themselves are ordered by their instance ID).

Source

pub async fn root_secret_encoding<T: Decodable>(&self) -> Result<T>

Returns the data from which the client’s root secret is derived (e.g. BIP39 seed phrase struct).

Source

pub async fn await_primary_module_outputs( &self, operation_id: OperationId, outputs: Vec<OutPoint>, ) -> Result<Amount>

Waits for outputs from the primary module to reach its final state.

Source

pub async fn get_config_json(&self) -> JsonClientConfig

Returns the config of the client in JSON format.

Compared to the consensus module format where module configs are binary encoded this format cannot be cryptographically verified but is easier to consume and to some degree human-readable.

Source

pub fn primary_module(&self) -> &DynClientModule

Get the primary module

Source

pub async fn get_balance(&self) -> Amount

Balance available to the client for spending

Source

pub async fn subscribe_balance_changes(&self) -> BoxStream<'static, Amount>

Returns a stream that yields the current client balance every time it changes.

Source

pub async fn refresh_peers_api_versions( num_peers: NumPeers, api: DynGlobalApi, db: Database, num_responses_sender: Sender<usize>, )

Query the federation for API version support and then calculate the best API version to use (supported by most guardians).

Source

pub fn supported_api_versions_summary_static( config: &ClientConfig, client_module_init: &ClientModuleInitRegistry, ) -> SupportedApiVersionsSummary

SupportedApiVersionsSummary that the client and its modules support

Source

pub async fn load_and_refresh_common_api_version(&self) -> Result<ApiVersionSet>

Source

pub(crate) async fn load_and_refresh_common_api_version_static( config: &ClientConfig, module_init: &ClientModuleInitRegistry, api: &DynGlobalApi, db: &Database, task_group: &TaskGroup, ) -> Result<ApiVersionSet>

Load the common api versions to use from cache and start a background process to refresh them.

This is a compromise, so we not have to wait for version discovery to complete every time a Client is being built.

Source

pub(crate) async fn refresh_common_api_version_static( config: &ClientConfig, client_module_init: &ClientModuleInitRegistry, api: &DynGlobalApi, db: &Database, task_group: TaskGroup, ) -> Result<ApiVersionSet>

Source

pub async fn get_metadata(&self) -> Metadata

Get the client Metadata

Source

pub async fn set_metadata(&self, metadata: &Metadata)

Set the client Metadata

Source

pub fn has_pending_recoveries(&self) -> bool

Source

pub async fn wait_for_all_recoveries(&self) -> Result<()>

Wait for all module recoveries to finish

This will block until the recovery task is done with recoveries. Returns success if all recovery tasks are complete (success case), or an error if some modules could not complete the recovery at the time.

A bit of a heavy approach.

Source

pub fn subscribe_to_recovery_progress( &self, ) -> impl Stream<Item = (ModuleInstanceId, RecoveryProgress)>

Subscribe to recover progress for all the modules.

This stream can contain duplicate progress for a module. Don’t use this stream for detecting completion of recovery.

Source

pub async fn wait_for_module_kind_recovery( &self, module_kind: ModuleKind, ) -> Result<()>

Source

pub async fn wait_for_all_active_state_machines(&self) -> Result<()>

Source

pub async fn set_metadata_dbtx( dbtx: &mut DatabaseTransaction<'_>, metadata: &Metadata, )

Set the client Metadata

Source

pub(crate) fn spawn_module_recoveries_task( &self, recovery_sender: Sender<BTreeMap<ModuleInstanceId, RecoveryProgress>>, module_recoveries: BTreeMap<ModuleInstanceId, Pin<Box<dyn Future<Output = Result<()>> + Send>>>, module_recovery_progress_receivers: BTreeMap<ModuleInstanceId, Receiver<RecoveryProgress>>, )

Source

pub(crate) async fn run_module_recoveries_task( db: Database, log_ordering_wakeup_tx: Sender<()>, recovery_sender: Sender<BTreeMap<ModuleInstanceId, RecoveryProgress>>, module_recoveries: BTreeMap<ModuleInstanceId, Pin<Box<dyn Future<Output = Result<()>> + Send>>>, module_recovery_progress_receivers: BTreeMap<ModuleInstanceId, Receiver<RecoveryProgress>>, )

Source

pub(crate) async fn load_peers_last_api_versions( db: &Database, num_peers: NumPeers, ) -> BTreeMap<PeerId, SupportedApiVersionsSummary>

Source

pub async fn get_peer_url_announcements( &self, ) -> BTreeMap<PeerId, SignedApiAnnouncement>

You likely want to use Client::get_peer_urls. This function returns only the announcements and doesn’t use the config as fallback.

Source

pub async fn get_peer_urls(&self) -> BTreeMap<PeerId, SafeUrl>

Returns a list of guardian API URLs

Source

pub async fn invite_code(&self, peer: PeerId) -> Option<InviteCode>

Create an invite code with the api endpoint of the given peer which can be used to download this client config

Source

pub async fn get_guardian_public_keys_blocking( &self, ) -> BTreeMap<PeerId, PublicKey>

Blocks till the client has synced the guardian public key set (introduced in version 0.4) and returns it. Once it has been fetched once this function is guaranteed to return immediately.

Source

pub fn handle_global_rpc( &self, method: String, params: Value, ) -> BoxStream<'_, Result<Value>>

Source

pub async fn log_event<E>(&self, module_id: Option<ModuleInstanceId>, event: E)
where E: Event + Send,

Source

pub async fn log_event_dbtx<E, Cap>( &self, dbtx: &mut DatabaseTransaction<'_, Cap>, module_id: Option<ModuleInstanceId>, event: E, )
where E: Event + Send, Cap: Send,

Source

pub async fn log_event_raw_dbtx<Cap>( &self, dbtx: &mut DatabaseTransaction<'_, Cap>, kind: EventKind, module: Option<(ModuleKind, ModuleInstanceId)>, payload: Vec<u8>, transient: bool, )
where Cap: Send,

Source

pub async fn handle_events<F, R, K>( &self, pos_key: &K, call_fn: F, ) -> Result<()>

Source

pub async fn get_event_log( &self, pos: Option<EventLogId>, limit: u64, ) -> Vec<(EventLogId, EventKind, Option<(ModuleKind, ModuleInstanceId)>, u64, Value)>

Source

pub async fn get_event_log_dbtx<Cap>( &self, dbtx: &mut DatabaseTransaction<'_, Cap>, pos: Option<EventLogId>, limit: u64, ) -> Vec<(EventLogId, EventKind, Option<(ModuleKind, ModuleInstanceId)>, u64, Value)>
where Cap: Send,

Source

pub fn get_event_log_transient_receiver(&self) -> Receiver<EventLogEntry>

Register to receiver all new transient (unpersisted) events

Trait Implementations§

Source§

impl Debug for Client

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl !Freeze for Client

§

impl !RefUnwindSafe for Client

§

impl Send for Client

§

impl Sync for Client

§

impl Unpin for Client

§

impl !UnwindSafe for Client

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<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 + Sync + Send>

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

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> 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> 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> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

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

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

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

Source§

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

§

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

§

impl<T> MaybeSendSync for T

Source§

impl<T> MaybeSync for T
where T: Sync,