Skip to main content

ExactSlotStorage

Trait ExactSlotStorage 

Source
pub trait ExactSlotStorage: Send + Sync {
Show 15 methods // Required methods fn provider_binding<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<ResolvedProviderBinding, CloudHomeError>> + Send + 'async_trait>> where 'life0: 'async_trait, Self: '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 'life0: 'async_trait, 'life1: 'async_trait, Self: '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 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait, Self: '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 'life0: 'async_trait, 'life1: 'async_trait, Self: '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 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait; fn replace_at_if_version<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, slot: &'life1 ObjectSlot, expected: &'life2 ExactObjectVersion, bytes: Vec<u8>, ) -> Pin<Box<dyn Future<Output = Result<ConditionalWriteOutcome, CloudHomeError>> + Send + 'async_trait>> where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, Self: '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 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait; fn read_at_to_file<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, slot: &'life1 ObjectSlot, destination: &'life2 Path, progress: Arc<dyn Fn(u64) + Sync + Send>, ) -> Pin<Box<dyn Future<Output = Result<(), CloudFileReadError>> + Send + 'async_trait>> where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, Self: '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 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait; // Provided methods 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 { ... } 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 'life0: 'async_trait, 'life1: 'async_trait, Self: '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 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait, Self: '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 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait { ... } 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 'life0: 'async_trait, 'life1: 'async_trait, Self: '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 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait { ... }
}
Expand description

Low-level cloud storage. Implementations handle a single store.

All methods deal in raw bytes. No encryption or path layout logic.

Required Methods§

Source

fn provider_binding<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<ResolvedProviderBinding, CloudHomeError>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: '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 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait,

Name every slot this home holds whose logical key starts with prefix.

The slot-shaped counterpart of CloudHome::list, and the read side of allocate_slot: a provider that addresses objects by their key derives each slot from the listed key, and one that mints its own object ids reports the ids it listed. Callers get slots rather than keys because read_at is what they will do next, and that takes a slot.

Source

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

Source

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 'life0: 'async_trait, 'life1: 'async_trait, Self: '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 'life0: 'async_trait, 'life1: 'async_trait, Self: '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 ExactObjectVersion, bytes: Vec<u8>, ) -> Pin<Box<dyn Future<Output = Result<ConditionalWriteOutcome, CloudHomeError>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, Self: '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.

Source

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

Source

fn read_at_to_file<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, slot: &'life1 ObjectSlot, destination: &'life2 Path, progress: Arc<dyn Fn(u64) + Sync + Send>, ) -> Pin<Box<dyn Future<Output = Result<(), CloudFileReadError>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, Self: 'async_trait,

Source

fn delete_at<'life0, 'life1, 'async_trait>( &'life0 self, slot: &'life1 ObjectSlot, ) -> Pin<Box<dyn Future<Output = Result<(), CloudHomeError>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait,

Provided Methods§

Source

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,

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

Delete one direct versioned record. This is used only for capability probe cleanup; Store publication never deletes its current record.

Source

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

Source

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

Implementors§