pub struct DeviceJoinClient { /* private fields */ }Expand description
A joining device’s local half of the four-transfer admission exchange. The journal lives outside the incomplete store directory, so every method can be retried after process termination without losing its exact predecessor.
Implementations§
Source§impl DeviceJoinClient
impl DeviceJoinClient
Sourcepub async fn join_via_transport(
&self,
bundle: &DeviceJoinOfferBundle,
timing: DeviceJoinTransportTiming,
on_status: impl Fn(&str),
cancel: &Receiver<bool>,
) -> Result<DeviceJoinTransportOutcome, BootstrapError>
pub async fn join_via_transport( &self, bundle: &DeviceJoinOfferBundle, timing: DeviceJoinTransportTiming, on_status: impl Fn(&str), cancel: &Receiver<bool>, ) -> Result<DeviceJoinTransportOutcome, BootstrapError>
Join through the transport: one call from the scanned offer bundle to a
saved member Config, or to the owner’s abandonment of the attempt.
Every step resumes from the joiner journal, so calling this again after a crash picks up where the last durable step left off — a republished artifact that is already at its slot is accepted as the same transfer, and an awaited artifact is simply read again.
Sourcepub async fn close_device_join_via_transport(
&self,
bundle: &DeviceJoinOfferBundle,
timing: DeviceJoinTransportTiming,
) -> Result<(), BootstrapError>
pub async fn close_device_join_via_transport( &self, bundle: &DeviceJoinOfferBundle, timing: DeviceJoinTransportTiming, ) -> Result<(), BootstrapError>
Carry a cancelled attempt through the transport to its activated cleanup, then remove the attempt’s transport slots.
The joiner is the last reader in the unwind — it consumes the cleanup activation the owner publishes last — so the deletion belongs here, at the same point the joiner discards the rest of its pending join state.
Source§impl DeviceJoinClient
impl DeviceJoinClient
pub fn new( invite_code: &str, join_request_code: &str, layout: StoreLayout, synced_tables: Vec<SyncedTable>, migrations: Vec<Migration>, custom_s3_exact_slots: Option<CustomS3ExactSlots>, key_custody: KeyCustody, identity_custody: IdentityCustody, oauth_tokens: Option<OAuthTokens>, cloudkit_ops: Option<Arc<dyn CloudKitOps>>, clock: ClockRef, ) -> Result<Self, BootstrapError>
pub async fn prepare_provider_access_request( &self, offer: DeviceJoinOffer, ) -> Result<DeviceProviderAccessRequest, BootstrapError>
pub async fn accept_device_join_abandonment( &self, abandonment: DeviceJoinAbandonment, ) -> Result<DeviceJoinAbandonment, BootstrapError>
pub fn device_join_status( &self, attempt_id: DeviceJoinAttemptId, ) -> Result<Option<DeviceJoinStatus>, BootstrapError>
pub fn resume_device_joins( &self, ) -> Result<Vec<DeviceJoinAction>, BootstrapError>
pub async fn close_pending_device_join( &self, cancellation: DeviceJoinCancellation, ) -> Result<JoinerJoinTerminal, BootstrapError>
pub async fn complete_cancelled_device_join( &self, activation: DeviceJoinCleanupActivation, ) -> Result<(), BootstrapError>
pub async fn prepare_registration_request( &self, approval: DeviceProviderAdmissionApproval, ) -> Result<DeviceRegistrationRequest, BootstrapError>
pub async fn bootstrap_pending_device( &self, bootstrap: ProviderReadyDeviceBootstrap, on_status: impl Fn(&str), cancel: &Receiver<bool>, ) -> Result<DeviceJoinReadiness, BootstrapError>
pub async fn complete_device_join( &self, activation: DeviceJoinActivation, on_status: impl Fn(&str), ) -> Result<Config, BootstrapError>
Auto Trait Implementations§
impl Freeze for DeviceJoinClient
impl !RefUnwindSafe for DeviceJoinClient
impl Send for DeviceJoinClient
impl Sync for DeviceJoinClient
impl Unpin for DeviceJoinClient
impl UnsafeUnpin for DeviceJoinClient
impl !UnwindSafe for DeviceJoinClient
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
§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> 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 more