Skip to main content

CloudHome

Trait CloudHome 

Source
pub trait CloudHome: Send + Sync {
    // Required methods
    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 'life0: 'async_trait,
             'life1: 'async_trait,
             Self: 'async_trait;
    fn open_multipart<'a, 'life0, 'async_trait>(
        &'a self,
        key: &'life0 str,
        total_len: u64,
    ) -> Pin<Box<dyn Future<Output = Result<Box<dyn PartSink + 'a>, CloudHomeError>> + Send + 'async_trait>>
       where 'a: 'async_trait,
             'life0: 'async_trait,
             Self: 'async_trait;
    fn multipart_threshold(&self) -> u64;
    fn read<'life0, 'life1, 'async_trait>(
        &'life0 self,
        key: &'life1 str,
    ) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, CloudHomeError>> + Send + 'async_trait>>
       where 'life0: 'async_trait,
             'life1: 'async_trait,
             Self: '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 'life0: 'async_trait,
             'life1: 'async_trait,
             Self: '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 'life0: 'async_trait,
             'life1: 'async_trait,
             Self: 'async_trait;
    fn delete<'life0, 'life1, 'async_trait>(
        &'life0 self,
        key: &'life1 str,
    ) -> Pin<Box<dyn Future<Output = Result<(), CloudHomeError>> + Send + 'async_trait>>
       where 'life0: 'async_trait,
             'life1: 'async_trait,
             Self: '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 'life0: 'async_trait,
             'life1: 'async_trait,
             Self: 'async_trait;
    fn set_access<'life0, 'async_trait>(
        &'life0 self,
        desired: CloudAccessState,
    ) -> Pin<Box<dyn Future<Output = Result<CloudAccessOutcome, CloudHomeError>> + Send + 'async_trait>>
       where 'life0: 'async_trait,
             Self: 'async_trait;

    // Provided methods
    fn exact_slot_storage(self: Arc<Self>) -> Option<Arc<dyn ExactSlotStorage>> { ... }
    fn probe<'life0, 'async_trait>(
        &'life0 self,
    ) -> Pin<Box<dyn Future<Output = Result<(), CloudHomeError>> + Send + 'async_trait>>
       where 'life0: '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 { ... }
}

Required Methods§

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 'life0: 'async_trait, 'life1: 'async_trait, Self: '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<Box<dyn PartSink + 'a>, CloudHomeError>> + Send + 'async_trait>>
where 'a: 'async_trait, 'life0: 'async_trait, Self: '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

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 'life0: 'async_trait, 'life1: 'async_trait, Self: '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 'life0: 'async_trait, 'life1: 'async_trait, Self: '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 'life0: 'async_trait, 'life1: 'async_trait, Self: '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 'life0: 'async_trait, 'life1: 'async_trait, Self: '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 'life0: 'async_trait, 'life1: 'async_trait, Self: '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 'life0: 'async_trait, Self: '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.

Provided Methods§

Source

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 'life0: 'async_trait, Self: '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 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.

Implementors§