pub struct S3CloudHome { /* private fields */ }Expand description
S3-backed cloud home.
Trait Implementations§
Source§impl Clone for S3CloudHome
impl Clone for S3CloudHome
Source§fn clone(&self) -> S3CloudHome
fn clone(&self) -> S3CloudHome
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl CloudHome for S3CloudHome
impl CloudHome for S3CloudHome
Source§fn probe<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<(), CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn probe<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<(), CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Verify the backend is reachable with the configured credentials.
Setup flows call this before persisting credentials, so a typo or
missing bucket fails fast at setup time instead of via a delayed
reconnect banner. Default implementation issues a no-op list against
a sentinel prefix — backends override when a provider-specific operation
verifies the capabilities sync requires.
Source§fn put_object<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
data: Vec<u8>,
) -> Pin<Box<dyn Future<Output = Result<(), CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn put_object<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
data: Vec<u8>,
) -> Pin<Box<dyn Future<Output = Result<(), CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
One bounded single-request upload, creating or overwriting
key. Used only
for blobs at or below multipart_threshold;
large blobs stream through open_multipart.Source§fn open_multipart<'a, 'life0, 'async_trait>(
&'a self,
key: &'life0 str,
_total_len: u64,
) -> Pin<Box<dyn Future<Output = Result<BoxPartSink<'a>, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'a: 'async_trait,
'life0: 'async_trait,
fn open_multipart<'a, 'life0, 'async_trait>(
&'a self,
key: &'life0 str,
_total_len: u64,
) -> Pin<Box<dyn Future<Output = Result<BoxPartSink<'a>, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'a: 'async_trait,
'life0: 'async_trait,
Open a streaming multipart/resumable upload for
total_len bytes, returning
the PartSink the driver pumps ordered parts into.Source§fn multipart_threshold(&self) -> u64
fn multipart_threshold(&self) -> u64
Blobs at or below this size go via
put_object;
larger ones stream via open_multipart.Source§fn read<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Read the full contents of a key.
Source§fn read_range<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
start: u64,
end: u64,
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read_range<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
start: u64,
end: u64,
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Read a byte range from a key.
start is inclusive, end is exclusive.Source§fn list<'life0, 'life1, 'async_trait>(
&'life0 self,
prefix: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list<'life0, 'life1, 'async_trait>(
&'life0 self,
prefix: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
List all keys under a prefix.
Source§fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Delete a key. Not an error if the key does not exist.
Source§fn exists<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn exists<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Check whether a key exists.
Source§fn set_access<'life0, 'async_trait>(
&'life0 self,
desired: CloudAccessState,
) -> Pin<Box<dyn Future<Output = Result<CloudAccessOutcome, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn set_access<'life0, 'async_trait>(
&'life0 self,
desired: CloudAccessState,
) -> Pin<Box<dyn Future<Output = Result<CloudAccessOutcome, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Set the provider’s access for one stable member principal to the absolute
desired state. Implementations read the authoritative permission state,
create/update/delete as required, then read it back and verify the desired
state. Repeating a request after an unknown outcome is therefore
idempotent.
Present returns connection information; Absent returns
whether this provider supports withdrawing one member’s credential.Source§fn provider_requests(&self) -> Option<Arc<dyn ProviderRequests>>
fn provider_requests(&self) -> Option<Arc<dyn ProviderRequests>>
The running total of provider operations issued through this home, for
a run’s stage timings to report each stage’s count beside its wall time. Read more
Source§fn write<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
key: &'life1 str,
body: BlobBody,
progress: &'life2 UploadProgress,
) -> Pin<Box<dyn Future<Output = Result<(), CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn write<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
key: &'life1 str,
body: BlobBody,
progress: &'life2 UploadProgress,
) -> Pin<Box<dyn Future<Output = Result<(), CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Write a sized
BlobBody to key. Not overridden — the central
write_blob driver picks single-request vs multipart and pumps the
parts, reporting cumulative bytes through progress for the per-file bar.Source§impl ExactSlotStorage for S3CloudHome
impl ExactSlotStorage for S3CloudHome
fn provider_binding<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<ResolvedProviderBinding, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn create_at<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
upload: &'life1 ExactUpload<'life2>,
control: &'life3 UploadControl,
) -> Pin<Box<dyn Future<Output = Result<ExactCreateOutcome, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Source§fn list_slots<'life0, 'life1, 'async_trait>(
&'life0 self,
prefix: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<ObjectSlot>, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_slots<'life0, 'life1, 'async_trait>(
&'life0 self,
prefix: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<ObjectSlot>, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Name every slot this home holds whose logical key starts with
prefix. Read morefn read_at<'life0, 'life1, 'async_trait>(
&'life0 self,
slot: &'life1 ObjectSlot,
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn read_versioned_at<'life0, 'life1, 'async_trait>(
&'life0 self,
slot: &'life1 ObjectSlot,
) -> Pin<Box<dyn Future<Output = Result<CloudVersionedObject, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read_versioned_at<'life0, 'life1, 'async_trait>(
&'life0 self,
slot: &'life1 ObjectSlot,
) -> Pin<Box<dyn Future<Output = Result<CloudVersionedObject, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Read one mutable record and the provider revision that a conditional
replacement must present. The token is meaningful only to this provider
and this exact slot.
Source§fn replace_at_if_version<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
slot: &'life1 ObjectSlot,
expected: &'life2 CloudObjectVersion,
bytes: Vec<u8>,
) -> Pin<Box<dyn Future<Output = Result<ConditionalWriteOutcome, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn replace_at_if_version<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
slot: &'life1 ObjectSlot,
expected: &'life2 CloudObjectVersion,
bytes: Vec<u8>,
) -> Pin<Box<dyn Future<Output = Result<ConditionalWriteOutcome, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Replace one mutable record only while the provider still reports
expected. A changed revision is an ordinary competing-writer outcome;
an unavailable or ambiguous provider result is an error.fn read_range_at<'life0, 'life1, 'async_trait>(
&'life0 self,
slot: &'life1 ObjectSlot,
start: u64,
end: u64,
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read_at_to_file<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
slot: &'life1 ObjectSlot,
destination: &'life2 Path,
progress: DownloadProgress,
) -> Pin<Box<dyn Future<Output = Result<(), CloudFileReadError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn delete_at<'life0, 'life1, 'async_trait>(
&'life0 self,
slot: &'life1 ObjectSlot,
) -> Pin<Box<dyn Future<Output = Result<(), CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn cross_principal_evidence<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<CrossPrincipalProviderEvidence, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn allocate_slot<'life0, 'life1, 'async_trait>(
&'life0 self,
logical_key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<ObjectSlot, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn allocate_slot<'life0, 'life1, 'async_trait>(
&'life0 self,
logical_key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<ObjectSlot, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Name the slot that holds
logical_key. A provider that addresses objects
by the key itself allocates nothing; one that mints its own object id
overrides this and returns an opaque locator.Source§fn create_versioned_at<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
upload: &'life1 ExactUpload<'life2>,
control: &'life3 UploadControl,
) -> Pin<Box<dyn Future<Output = Result<ExactCreateOutcome, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn create_versioned_at<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
upload: &'life1 ExactUpload<'life2>,
control: &'life3 UploadControl,
) -> Pin<Box<dyn Future<Output = Result<ExactCreateOutcome, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Create one bounded mutable record without an immutable-object wrapper.
The returned object revision is obtained through
Self::read_versioned_at.Source§fn delete_versioned_at<'life0, 'life1, 'async_trait>(
&'life0 self,
slot: &'life1 ObjectSlot,
) -> Pin<Box<dyn Future<Output = Result<(), CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete_versioned_at<'life0, 'life1, 'async_trait>(
&'life0 self,
slot: &'life1 ObjectSlot,
) -> Pin<Box<dyn Future<Output = Result<(), CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Delete one direct versioned record. This is used only for capability
probe cleanup; Store publication never deletes its current record.
fn observe_at<'life0, 'life1, 'async_trait>(
&'life0 self,
slot: &'life1 ObjectSlot,
) -> Pin<Box<dyn Future<Output = Result<Option<ExactObjectRef>, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete_and_verify_absent<'life0, 'life1, 'async_trait>(
&'life0 self,
slot: &'life1 ObjectSlot,
) -> Pin<Box<dyn Future<Output = Result<(), CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Auto Trait Implementations§
impl Freeze for S3CloudHome
impl !RefUnwindSafe for S3CloudHome
impl Send for S3CloudHome
impl Sync for S3CloudHome
impl Unpin for S3CloudHome
impl UnsafeUnpin for S3CloudHome
impl !UnwindSafe for S3CloudHome
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§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>
Converts
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>
Converts
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 moreCreates a shared type from an unshared type.