pub struct ClientBuilder {
module_inits: ClientModuleInitRegistry,
primary_module_instance: Option<ModuleInstanceId>,
primary_module_kind: Option<ModuleKind>,
admin_creds: Option<AdminCreds>,
db_no_decoders: Database,
meta_service: Arc<MetaService>,
connector: Connector,
stopped: bool,
log_event_added_transient_tx: Sender<EventLogEntry>,
request_hook: ApiRequestHook,
}
Expand description
Used to configure, assemble and build Client
Fields§
§module_inits: ClientModuleInitRegistry
§primary_module_instance: Option<ModuleInstanceId>
§primary_module_kind: Option<ModuleKind>
§admin_creds: Option<AdminCreds>
§db_no_decoders: Database
§meta_service: Arc<MetaService>
§connector: Connector
§stopped: bool
§log_event_added_transient_tx: Sender<EventLogEntry>
§request_hook: ApiRequestHook
Implementations§
Source§impl ClientBuilder
impl ClientBuilder
pub(crate) fn new(db: Database) -> Self
pub(crate) fn from_existing(client: &Client) -> Self
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
There has to be at least one module supporting being primary among the
registered modules. The client won’t start without the federation and
the client having at least one overlapping primary module. In case there
are multiple, the one to use can be selected with
ClientBuilder::with_primary_module_kind
or
ClientBuilder::with_primary_module_instance_id
.
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
There has to be at least one module supporting being primary among the
registered modules. The client won’t start without the federation and
the client having at least one overlapping primary module. In case there
are multiple, the one to use can be selected with
ClientBuilder::with_primary_module_kind
or
ClientBuilder::with_primary_module_instance_id
.
pub fn stopped(&mut self)
Sourcepub fn with_api_request_hook(self, hook: ApiRequestHook) -> Self
pub fn with_api_request_hook(self, hook: ApiRequestHook) -> Self
Build the Client
with a custom wrapper around its api request logic
This is intended to be used by downstream applications, e.g. to:
- simulate offline mode,
- save battery when the OS indicates lack of connectivity,
- inject faults and delays for testing purposes,
- collect statistics and emit notifications.
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
fedimint_client_module::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
fedimint_client_module::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 fedimint_client_module::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>)
Sourceasync fn migrate_module_dbs(&self, db: &Database) -> Result<()>
async fn migrate_module_dbs(&self, db: &Database) -> Result<()>
Migrate client module databases
Note: Client core db migration are done immediately in
Client::builder
, to ensure db matches the code at all times,
while migrating modules requires figuring out what modules actually
are first.
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)
async fn init( self, pre_root_secret: DerivableSecret, config: ClientConfig, api_secret: Option<String>, init_mode: InitMode, ) -> Result<ClientHandle>
pub async fn preview(self, invite_code: &InviteCode) -> Result<ClientPreview>
Sourcepub async fn preview_with_existing_config(
self,
config: ClientConfig,
api_secret: Option<String>,
) -> Result<ClientPreview>
pub async fn preview_with_existing_config( self, config: ClientConfig, api_secret: Option<String>, ) -> Result<ClientPreview>
Use Self::preview
instead
Sourceasync fn download_backup_from_federation(
&self,
pre_root_secret: DerivableSecret,
config: &ClientConfig,
api_secret: Option<String>,
) -> Result<Option<ClientBackup>>
async fn download_backup_from_federation( &self, pre_root_secret: DerivableSecret, config: &ClientConfig, api_secret: Option<String>, ) -> Result<Option<ClientBackup>>
Download most recent valid backup found from the Federation
pub async fn open(self, pre_root_secret: RootSecret) -> Result<ClientHandle>
Sourcepub(crate) async fn build(
self,
pre_root_secret: DerivableSecret,
config: ClientConfig,
api_secret: Option<String>,
stopped: bool,
) -> Result<ClientHandle>
pub(crate) async fn build( self, pre_root_secret: DerivableSecret, config: ClientConfig, api_secret: Option<String>, stopped: bool, ) -> Result<ClientHandle>
Build a Client
and start the executor
Sourceasync fn build_stopped(
self,
pre_root_secret: DerivableSecret,
config: &ClientConfig,
api_secret: Option<String>,
log_event_added_transient_tx: Sender<EventLogEntry>,
request_hook: ApiRequestHook,
) -> Result<ClientHandle>
async fn build_stopped( self, pre_root_secret: DerivableSecret, config: &ClientConfig, api_secret: Option<String>, log_event_added_transient_tx: Sender<EventLogEntry>, request_hook: ApiRequestHook, ) -> Result<ClientHandle>
Build a Client
but do not start the executor
async fn load_init_state(db: &Database) -> InitState
fn decoders(&self, config: &ClientConfig) -> ModuleDecoderRegistry
fn config_decoded( config: &ClientConfig, decoders: &ModuleDecoderRegistry, ) -> Result<ClientConfig, DecodeError>
Sourcefn federation_root_secret(
pre_root_secret: &DerivableSecret,
config: &ClientConfig,
) -> DerivableSecret
fn federation_root_secret( pre_root_secret: &DerivableSecret, config: &ClientConfig, ) -> DerivableSecret
Re-derive client’s root_secret
using the federation ID. This
eliminates the possibility of having the same client root_secret
across multiple federations.
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§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§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
.§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
.§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.§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.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§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.§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.§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.§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.§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.§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.§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.§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.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§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::Request
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§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 more§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 more§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
§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
§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.§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.§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.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Tap for T
impl<T> Tap for T
§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 more§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 more§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 more§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 more§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 more§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 more§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.§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.§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.§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.§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.§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.§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.