ln_gateway

Struct Gateway

source
pub struct Gateway {
    pub(crate) federation_manager: Arc<RwLock<FederationManager>>,
    pub(crate) lightning_builder: Arc<dyn LightningBuilder + Send + Sync>,
    pub(crate) gateway_config: Arc<RwLock<Option<GatewayConfiguration>>>,
    pub(crate) state: Arc<RwLock<GatewayState>>,
    pub(crate) client_builder: GatewayClientBuilder,
    pub(crate) gateway_db: Database,
    pub(crate) gateway_id: PublicKey,
    pub(crate) versioned_api: SafeUrl,
    pub(crate) listen: SocketAddr,
    pub(crate) lightning_module_mode: LightningModuleMode,
}

Fields§

§federation_manager: Arc<RwLock<FederationManager>>

The gateway’s federation manager.

§lightning_builder: Arc<dyn LightningBuilder + Send + Sync>

Builder struct that allows the gateway to build a ILnRpcClient, which represents a connection to a lightning node.

§gateway_config: Arc<RwLock<Option<GatewayConfiguration>>>

The gateway’s current configuration

§state: Arc<RwLock<GatewayState>>

The current state of the Gateway.

§client_builder: GatewayClientBuilder

Builder struct that allows the gateway to build a Fedimint client, which handles the communication with a federation.

§gateway_db: Database

Database for Gateway metadata.

§gateway_id: PublicKey

A public key representing the identity of the gateway. Private key is not used.

§versioned_api: SafeUrl

The Gateway’s API URL.

§listen: SocketAddr

The socket the gateway listens on.

§lightning_module_mode: LightningModuleMode

Implementations§

source§

impl Gateway

source

pub async fn new_with_custom_registry( lightning_builder: Arc<dyn LightningBuilder + Send + Sync>, client_builder: GatewayClientBuilder, listen: SocketAddr, api_addr: SafeUrl, cli_password: Option<String>, network: Option<Network>, fees: RoutingFees, num_route_hints: u32, gateway_db: Database, gateway_state: GatewayState, lightning_module_mode: LightningModuleMode, ) -> Result<Gateway>

Creates a new gateway but with a custom module registry provided inside client_builder. Currently only used for testing.

source

pub async fn new_with_default_modules() -> Result<Gateway>

Default function for creating a gateway with the Mint, Wallet, and Gateway modules.

source

pub(crate) async fn new( lightning_builder: Arc<dyn LightningBuilder + Send + Sync>, gateway_parameters: GatewayParameters, gateway_db: Database, client_builder: GatewayClientBuilder, gateway_state: GatewayState, ) -> Result<Gateway>

Helper function for creating a gateway from either new_with_default_modules or new_with_custom_registry.

source

pub(crate) async fn load_or_create_gateway_id( gateway_db: &Database, ) -> PublicKey

Returns a PublicKey that uniquely identifies the Gateway.

source

pub fn gateway_id(&self) -> PublicKey

source

pub fn versioned_api(&self) -> &SafeUrl

source

pub async fn clone_gateway_config(&self) -> Option<GatewayConfiguration>

source

pub(crate) async fn get_state(&self) -> GatewayState

source

pub async fn dump_database( dbtx: &mut DatabaseTransaction<'_>, prefix_names: Vec<String>, ) -> BTreeMap<String, Box<dyn Serialize + Send>>

Reads and serializes structures from the Gateway’s database for the purpose for serializing to JSON for inspection.

source

pub async fn run(self, tg: TaskGroup) -> Result<TaskShutdownToken>

Main entrypoint into the gateway that starts the client registration timer, loads the federation clients from the persisted config, begins listening for intercepted payments, and starts the webserver to service requests.

source

pub(crate) fn start_gateway(&self, task_group: &TaskGroup)

Begins the task for listening for intercepted payments from the lightning node.

source

pub(crate) async fn route_lightning_payments<'a>( &'a self, handle: &TaskHandle, stream: RouteHtlcStream<'a>, ln_client: Arc<dyn ILnRpcClient>, ) -> ReceivePaymentStreamAction

Handles a stream of incoming payments from the lightning node after ensuring the gateway is properly configured. Awaits until the stream is closed, then returns with the appropriate action to take.

source

pub(crate) async fn is_shutting_down_safely(&self)

Polls the Gateway’s state waiting for it to shutdown so the thread processing payment requests can exit.

source

pub(crate) async fn handle_lightning_payment( &self, htlc_request: InterceptHtlcRequest, lightning_context: &LightningContext, )

Handles an intercepted lightning payment. If the payment is part of an incoming payment to a federation, spawns a state machine and hands the payment off to it. Otherwise, forwards the payment to the next hop like a normal lightning node.

source

pub(crate) async fn try_handle_lightning_payment_lnv2( &self, htlc_request: &InterceptHtlcRequest, lightning_context: &LightningContext, ) -> Result<()>

Tries to handle a lightning payment using the LNv2 protocol. Returns Ok if the payment was handled, Err otherwise.

source

pub(crate) async fn try_handle_lightning_payment_ln_legacy( &self, htlc_request: &InterceptHtlcRequest, ) -> Result<()>

Tries to handle a lightning payment using the legacy lightning protocol. Returns Ok if the payment was handled, Err otherwise.

source

pub(crate) async fn forward_lightning_payment( htlc_request: InterceptHtlcRequest, lightning_context: &LightningContext, )

Forwards a lightning payment to the next hop like a normal lightning node. Only necessary for LNv1, since LNv2 uses hold invoices instead of HTLC interception for routing incoming payments.

source

pub(crate) async fn set_gateway_state(&self, state: GatewayState)

Helper function for atomically changing the Gateway’s internal state.

source

pub async fn handle_get_info(&self) -> AdminResult<GatewayInfo>

Returns information about the Gateway back to the client when requested via the webserver.

source

pub async fn handle_get_federation_config( &self, federation_id_or: Option<FederationId>, ) -> AdminResult<GatewayFedConfig>

If the Gateway is connected to the Lightning node, returns the ClientConfig for each federation that the Gateway is connected to.

source

pub async fn handle_balance_msg( &self, payload: BalancePayload, ) -> AdminResult<Amount>

Returns the balance of the requested federation that the Gateway is connected to.

source

pub async fn handle_address_msg( &self, payload: DepositAddressPayload, ) -> AdminResult<Address>

Returns a Bitcoin deposit on-chain address for pegging in Bitcoin for a specific connected federation.

source

pub async fn handle_withdraw_msg( &self, payload: WithdrawPayload, ) -> AdminResult<Txid>

Returns a Bitcoin TXID from a peg-out transaction for a specific connected federation.

source

pub(crate) async fn handle_create_invoice_for_self_msg( &self, payload: CreateInvoiceForSelfPayload, ) -> Result<Bolt11Invoice>

Creates an invoice that is directly payable to the gateway’s lightning node.

source

pub(crate) async fn handle_pay_invoice_self_msg( &self, payload: PayInvoicePayload, ) -> AdminResult<Preimage>

Requests the gateway to pay an outgoing LN invoice using its own funds. Returns the payment hash’s preimage on success.

source

pub(crate) async fn handle_pay_invoice_msg( &self, payload: PayInvoicePayload, ) -> Result<Preimage>

Requests the gateway to pay an outgoing LN invoice on behalf of a Fedimint client. Returns the payment hash’s preimage on success.

source

pub async fn handle_connect_federation( &self, payload: ConnectFedPayload, ) -> AdminResult<FederationInfo>

Handles a connection request to join a new federation. The gateway will download the federation’s client configuration, construct a new client, registers, the gateway with the federation, and persists the necessary config to reconstruct the client when restarting the gateway.

source

pub async fn handle_leave_federation( &self, payload: LeaveFedPayload, ) -> AdminResult<FederationInfo>

Handle a request to have the Gateway leave a federation. The Gateway will request the federation to remove the registration record and the gateway will remove the configuration needed to construct the federation client.

source

pub async fn handle_backup_msg(&self, __arg1: BackupPayload) -> AdminResult<()>

Handles a request for the gateway to backup a connected federation’s ecash.

source

pub async fn handle_mnemonic_msg(&self) -> AdminResult<MnemonicResponse>

Handles an authenticated request for the gateway’s mnemonic. This also returns a vector of federations that are not using the mnemonic backup strategy.

source

pub async fn handle_set_configuration_msg( &self, __arg1: SetConfigurationPayload, ) -> AdminResult<()>

Handle a request to change a connected federation’s configuration or gateway metadata. If num_route_hints is changed, the Gateway will re-register with all connected federations. If per_federation_routing_fees is changed, the Gateway will only re-register with the specified federation.

source

pub async fn handle_get_ln_onchain_address_msg(&self) -> AdminResult<Address>

Generates an onchain address to fund the gateway’s lightning node.

source

pub async fn handle_open_channel_msg( &self, __arg1: OpenChannelPayload, ) -> AdminResult<Txid>

Instructs the Gateway’s Lightning node to open a channel to a peer specified by pubkey.

source

pub async fn handle_close_channels_with_peer_msg( &self, __arg1: CloseChannelsWithPeerPayload, ) -> AdminResult<CloseChannelsWithPeerResponse>

Instructs the Gateway’s Lightning node to close all channels with a peer specified by pubkey.

source

pub async fn handle_list_active_channels_msg( &self, ) -> AdminResult<Vec<ChannelInfo>>

Returns a list of Lightning network channels from the Gateway’s Lightning node.

source

pub async fn handle_withdraw_onchain_msg( &self, __arg1: WithdrawOnchainPayload, ) -> AdminResult<Txid>

Withdraws funds from the gateway’s lightning node on-chain wallet.

source

pub async fn handle_get_balances_msg(&self) -> AdminResult<GatewayBalances>

Returns the ecash, lightning, and onchain balances for the gateway and the gateway’s lightning node.

source

pub async fn handle_sync_to_chain_msg( &self, payload: SyncToChainPayload, ) -> AdminResult<()>

source

pub async fn handle_spend_ecash_msg( &self, payload: SpendEcashPayload, ) -> AdminResult<SpendEcashResponse>

source

pub async fn handle_receive_ecash_msg( &self, payload: ReceiveEcashPayload, ) -> Result<ReceiveEcashResponse>

Handles a request to receive ecash into the gateway.

source

pub async fn handle_shutdown_msg( &self, task_group: TaskGroup, ) -> AdminResult<()>

source

pub(crate) async fn register_federations( &self, gateway_config: &GatewayConfiguration, federations: &[(FederationId, FederationConfig)], ) -> AdminResult<()>

Registers the gateway with each specified federation.

source

pub(crate) async fn get_gateway_configuration( gateway_db: Database, gateway_parameters: &GatewayParameters, ) -> Option<GatewayConfiguration>

This function will return a GatewayConfiguration one of two ways. To avoid conflicting configs, the below order is the order in which the gateway will respect configurations:

  • GatewayConfiguration is read from the database.
  • All cli or environment variables are set such that we can create a GatewayConfiguration
source

pub async fn select_client( &self, federation_id: FederationId, ) -> Result<Spanned<ClientHandleArc>, FederationNotConnected>

Retrieves a ClientHandleArc from the Gateway’s in memory structures that keep track of available clients, given a federation_id.

source

pub(crate) async fn load_or_generate_mnemonic( gateway_db: &Database, ) -> AdminResult<Mnemonic>

Loads a mnemonic from the database or generates a new one if the mnemonic does not exist. Before generating a new mnemonic, this function will check if a mnemonic has been provided in the environment variable and use that if provided.

source

pub(crate) async fn load_clients(&self) -> AdminResult<()>

Reads the connected federation client configs from the Gateway’s database and reconstructs the clients necessary for interacting with connection federations.

source

pub(crate) fn register_clients_timer(&self, task_group: &TaskGroup)

Legacy mechanism for registering the Gateway with connected federations. This will spawn a task that will re-register the Gateway with connected federations every 8.5 mins. Only registers the Gateway if it has successfully connected to the Lightning node, so that it can include route hints in the registration.

source

pub(crate) async fn check_lnv1_federation_network( client: &ClientHandleArc, network: Network, ) -> AdminResult<()>

Verifies that the supplied network matches the Bitcoin network in the connected client’s LNv1 configuration.

source

pub(crate) async fn check_lnv2_federation_network( client: &ClientHandleArc, network: Network, ) -> AdminResult<()>

Verifies that the supplied network matches the Bitcoin network in the connected client’s LNv2 configuration.

source

pub async fn get_lightning_context( &self, ) -> Result<LightningContext, LightningRpcError>

Checks the Gateway’s current state and returns the proper LightningContext if it is available. Sometimes the lightning node will not be connected and this will return an error.

source

pub async fn unannounce_from_all_federations(&self)

Iterates through all of the federations the gateway is registered with and requests to remove the registration record.

source§

impl Gateway

source

pub(crate) async fn public_key_v2( &self, federation_id: &FederationId, ) -> Option<PublicKey>

Retrieves the PublicKey of the Gateway module for a given federation for LNv2. This is NOT the same as the gateway_id, it is different per-connected federation.

source

pub async fn routing_info_v2( &self, federation_id: &FederationId, ) -> Result<Option<RoutingInfo>>

Returns payment information that LNv2 clients can use to instruct this Gateway to pay an invoice or receive a payment.

source

pub(crate) async fn send_payment_v2( &self, payload: SendPaymentPayload, ) -> Result<Result<[u8; 32], Signature>>

Instructs this gateway to pay a Lightning network invoice via the LNv2 protocol.

source

pub(crate) async fn create_bolt11_invoice_v2( &self, payload: CreateBolt11InvoicePayload, ) -> Result<Bolt11Invoice>

For the LNv2 protocol, this will create an invoice by fetching it from the connected Lightning node, then save the payment hash so that incoming lightning payments can be matched as a receive attempt to a specific federation.

source

pub async fn create_invoice_via_lnrpc_v2( &self, payment_hash: Hash, amount: Amount, description: Bolt11InvoiceDescription, expiry_time: u32, ) -> Result<Bolt11Invoice, LightningRpcError>

Retrieves a BOLT11 invoice from the connected Lightning node with a specific payment_hash.

source

pub async fn get_registered_incoming_contract_and_client_v2( &self, payment_image: PaymentImage, amount_msats: u64, ) -> Result<(IncomingContract, ClientHandleArc)>

Retrieves the persisted CreateInvoicePayload from the database specified by the payment_hash and the ClientHandleArc specified by the payload’s federation_id.

source

pub(crate) fn is_running_lnv2(&self) -> bool

source

pub(crate) fn is_running_lnv1(&self) -> bool

Trait Implementations§

source§

impl Clone for Gateway

source§

fn clone(&self) -> Gateway

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 Debug for Gateway

source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
source§

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

source§

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

🔬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 + 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.
source§

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

§

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

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

§

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

source§

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