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§
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,
Sourcefn 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 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.
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,
Sourcefn 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 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.
Sourcefn 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 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.
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,
Sourcefn 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 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.
Sourcefn 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 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.
Sourcefn 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 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.