pub struct S3CloudHome { /* private fields */ }Expand description
S3-backed cloud home.
Implementations§
Source§impl S3CloudHome
impl S3CloudHome
pub async fn new_pair( bucket: String, region: String, endpoint: Option<String>, access_key: String, secret_key: String, key_prefix: Option<String>, custom_exact_slots: Option<CustomS3ExactSlots>, ) -> Result<(Self, Self), CloudHomeError>
pub async fn new( bucket: String, region: String, endpoint: Option<String>, access_key: String, secret_key: String, key_prefix: Option<String>, custom_exact_slots: Option<CustomS3ExactSlots>, ) -> Result<Self, CloudHomeError>
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 CloudHeadStorage for S3CloudHome
impl CloudHeadStorage for S3CloudHome
fn read_head<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<CloudVersionedHead, CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn create_head<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
bytes: Vec<u8>,
) -> Pin<Box<dyn Future<Output = Result<CloudVersionedHead, CloudHeadCreateError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn replace_head<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
key: &'life1 str,
expected: &'life2 CloudHeadVersion,
bytes: Vec<u8>,
) -> Pin<Box<dyn Future<Output = Result<CloudVersionedHead, CloudHeadReplaceError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn delete_probe_head<'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,
Source§impl CloudHome for S3CloudHome
impl CloudHome for S3CloudHome
fn exact_slot_storage(self: Arc<Self>) -> Option<Arc<dyn ExactSlotStorage>>
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 with cheaper provider-specific
auth checks (e.g. S3 HeadBucket) where available.
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 write<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
key: &'life1 str,
body: BlobBody,
progress: &'life2 (dyn Fn(u64) + Sync + Send + 'life3),
) -> Pin<Box<dyn Future<Output = Result<(), CloudHomeError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Self: 'async_trait,
fn write<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
key: &'life1 str,
body: BlobBody,
progress: &'life2 (dyn Fn(u64) + Sync + Send + 'life3),
) -> Pin<Box<dyn Future<Output = Result<(), CloudHomeError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Self: '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 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 create_at<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
slot: &'life1 ObjectSlot,
body: BlobBody,
progress: &'life2 UploadProgress<'life3>,
) -> Pin<Box<dyn Future<Output = Result<(), CloudHomeError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn 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,
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,
) -> 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
'life0: 'async_trait,
Self: '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.