pub struct ClientBuilder { /* private fields */ }
Expand description
Used to configure, assemble and build Client
Implementations§
Source§impl ClientBuilder
impl ClientBuilder
Sourcepub fn with_module_inits(&mut self, module_inits: ClientModuleInitRegistry)
pub fn with_module_inits(&mut self, module_inits: ClientModuleInitRegistry)
Replace module generator registry entirely
Sourcepub fn with_module<M: ClientModuleInit>(&mut self, module_init: M)
pub fn with_module<M: ClientModuleInit>(&mut self, module_init: M)
Make module generator available when reading the config
pub fn stopped(&mut self)
Sourcepub fn with_primary_module(&mut self, primary_module_instance: ModuleInstanceId)
👎Deprecated since 0.6.0: Use with_primary_module_kind
instead, as the instance id can’t be known upfront. If you really need the old behavior you can use with_primary_module_instance_id
.
pub fn with_primary_module(&mut self, primary_module_instance: ModuleInstanceId)
with_primary_module_kind
instead, as the instance id can’t be known upfront. If you really need the old behavior you can use with_primary_module_instance_id
.Uses this module with the given instance id as the primary module. See
ClientModule::supports_being_primary
for more information.
§Panics
If there was a primary module specified previously
Sourcepub fn with_primary_module_instance_id(
&mut self,
primary_module_instance: ModuleInstanceId,
)
pub fn with_primary_module_instance_id( &mut self, primary_module_instance: ModuleInstanceId, )
You are likely looking for
ClientBuilder::with_primary_module_kind
. This function is rarely
useful and often dangerous, handle with care.
Uses this module with the given instance id as the primary module. See
ClientModule::supports_being_primary
for more information. Since the
module instance id of modules of a specific kind may differ between
different federations it is generally not recommended to specify it, but
rather to specify the module kind that should be used as primary. See
ClientBuilder::with_primary_module_kind
.
§Panics
If there was a primary module specified previously
Sourcepub fn with_primary_module_kind(&mut self, primary_module_kind: ModuleKind)
pub fn with_primary_module_kind(&mut self, primary_module_kind: ModuleKind)
Uses this module kind as the primary module if present in the config.
See ClientModule::supports_being_primary
for more information.
§Panics
If there was a primary module kind specified previously
pub fn with_meta_service(&mut self, meta_service: Arc<MetaService>)
pub fn db_no_decoders(&self) -> &Database
pub async fn load_existing_config(&self) -> Result<ClientConfig>
pub fn set_admin_creds(&mut self, creds: AdminCreds)
pub fn with_connector(&mut self, connector: Connector)
pub fn with_tor_connector(&mut self)
Sourcepub async fn join(
self,
pre_root_secret: DerivableSecret,
config: ClientConfig,
api_secret: Option<String>,
) -> Result<ClientHandle>
pub async fn join( self, pre_root_secret: DerivableSecret, config: ClientConfig, api_secret: Option<String>, ) -> Result<ClientHandle>
Join a new Federation
When a user wants to connect to a new federation this function fetches
the federation config and initializes the client database. If a user
already joined the federation in the past and has a preexisting database
use ClientBuilder::open
instead.
Warning: Calling join
with a root_secret
key that was used
previous to join
a Federation will lead to all sorts of malfunctions
including likely loss of funds.
This should be generally called only if the root_secret
key is known
not to have been used before (e.g. just randomly generated). For keys
that might have been previous used (e.g. provided by the user),
it’s safer to call Self::recover
which will attempt to recover
client module states for the Federation.
A typical “join federation” flow would look as follows:
// Create a root secret, e.g. via fedimint-bip39, see also:
// https://github.com/fedimint/fedimint/blob/master/docs/secret_derivation.md
// let root_secret = …;
// Get invite code from user
let invite_code = InviteCode::from_str("fed11qgqpw9thwvaz7te3xgmjuvpwxqhrzw3jxumrvvf0qqqjpetvlg8glnpvzcufhffgzhv8m75f7y34ryk7suamh8x7zetly8h0v9v0rm")
.expect("Invalid invite code");
let config = fedimint_api_client::api::net::Connector::default().download_from_invite_code(&invite_code).await
.expect("Error downloading config");
// Tell the user the federation name, bitcoin network
// (e.g. from wallet module config), and other details
// that are typically contained in the federation's
// meta fields.
// let network = config.get_first_module_by_kind::<WalletClientConfig>("wallet")
// .expect("Module not found")
// .network;
println!(
"The federation name is: {}",
config.meta::<String>(META_FEDERATION_NAME_KEY)
.expect("Could not decode name field")
.expect("Name isn't set")
);
// Open the client's database, using the federation ID
// as the DB name is a common pattern:
// let db_path = format!("./path/to/db/{}", config.federation_id());
// let db = RocksDb::open(db_path).expect("error opening DB");
let client = Client::builder(db).await.expect("Error building client")
// Mount the modules the client should support:
// .with_module(LightningClientInit)
// .with_module(MintClientInit)
// .with_module(WalletClientInit::default())
.join(root_secret, config, None)
.await
.expect("Error joining federation");
Sourcepub async fn download_backup_from_federation(
&self,
root_secret: &DerivableSecret,
config: &ClientConfig,
api_secret: Option<String>,
) -> Result<Option<ClientBackup>>
pub async fn download_backup_from_federation( &self, root_secret: &DerivableSecret, config: &ClientConfig, api_secret: Option<String>, ) -> Result<Option<ClientBackup>>
Download most recent valid backup found from the Federation
Sourcepub async fn recover(
self,
root_secret: DerivableSecret,
config: ClientConfig,
api_secret: Option<String>,
backup: Option<ClientBackup>,
) -> Result<ClientHandle>
pub async fn recover( self, root_secret: DerivableSecret, config: ClientConfig, api_secret: Option<String>, backup: Option<ClientBackup>, ) -> Result<ClientHandle>
Join a (possibly) previous joined Federation
Unlike Self::join
, recover
will run client module recovery for
each client module attempting to recover any previous module state.
Recovery process takes time during which each recovering client module will not be available for use.
Calling recovery
with a root_secret
that was not actually previous
used in a given Federation is safe.
pub async fn open( self, pre_root_secret: DerivableSecret, ) -> Result<ClientHandle>
Sourcepub fn get_event_log_transient_receiver(&self) -> Receiver<EventLogEntry>
pub fn get_event_log_transient_receiver(&self) -> Receiver<EventLogEntry>
Register to receiver all new transient (unpersisted) events
Auto Trait Implementations§
impl Freeze for ClientBuilder
impl !RefUnwindSafe for ClientBuilder
impl Send for ClientBuilder
impl Sync for ClientBuilder
impl Unpin for ClientBuilder
impl !UnwindSafe for ClientBuilder
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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.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> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.