pub trait ProviderOps: Send + Sync {
Show 32 methods
// Required methods
fn config(&self) -> StorageConfig;
fn single_request_limit(&self) -> u64;
fn create<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
publication: &'life1 PublicationRequest,
path: &'life2 ObjectPath,
bytes: &'life3 [u8],
sent: &'life4 ByteProgress,
device: DeviceId,
) -> Pin<Box<dyn Future<Output = Result<Option<StoredObject>, StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait;
fn replace<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
publication: &'life1 PublicationRequest,
previous: &'life2 StoredObject,
bytes: &'life3 [u8],
device: DeviceId,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait;
fn status<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 ObjectPath,
) -> Pin<Box<dyn Future<Output = Result<Option<StoredObject>, StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn stream_object<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
path: &'life1 ObjectPath,
range: Option<ByteRange>,
received: &'life2 ByteProgress,
) -> Pin<Box<dyn Future<Output = Result<ObjectStream<'_>, StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn list<'life0, 'life1, 'async_trait>(
&'life0 self,
listing: &'life1 mut ObjectListing,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 ObjectPath,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn grant_access<'life0, 'life1, 'async_trait>(
&'life0 self,
account: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<AccessGrant, StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn revoke_access<'life0, 'life1, 'async_trait>(
&'life0 self,
account: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<RetainedAccess>, StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn begin_upload<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
publication: &'life1 PublicationRequest,
target: &'life2 UploadTarget,
total: u64,
device: DeviceId,
) -> Pin<Box<dyn Future<Output = Result<UploadSession, StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn resume_upload<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
publication: &'life1 PublicationRequest,
session: &'life2 mut UploadSession,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn upload_part<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
publication: &'life1 PublicationRequest,
session: &'life2 mut UploadSession,
bytes: &'life3 [u8],
end: u64,
sent: &'life4 ByteProgress,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait;
fn finish_upload<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
publication: &'life1 PublicationRequest,
session: &'life2 mut UploadSession,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn abort_upload<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
publication: &'life1 PublicationRequest,
session: &'life2 UploadSession,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn device_uploads<'life0, 'async_trait>(
&'life0 self,
store: StoreId,
device: DeviceId,
) -> Pin<Box<dyn Future<Output = Result<Vec<LeftUpload>, StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn settled_claim_uploads<'life0, 'async_trait>(
&'life0 self,
store: StoreId,
through: u64,
) -> Pin<Box<dyn Future<Output = Result<Vec<LeftUpload>, StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn end_left_upload<'life0, 'life1, 'async_trait>(
&'life0 self,
upload: &'life1 LeftUpload,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
// Provided methods
fn read_part_size(&self) -> Option<NonZeroU64> { ... }
fn create_location_marker<'life0, 'async_trait>(
&'life0 self,
_store: StoreId,
_device: DeviceId,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait { ... }
fn read_location_marker<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait { ... }
fn folder_label<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<FolderLabel, StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait { ... }
fn account<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<String, StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait { ... }
fn set_oauth_tokens<'life0, 'async_trait>(
&'life0 self,
_tokens: OAuthTokens,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait { ... }
fn set_s3_credentials<'life0, 'async_trait>(
&'life0 self,
_credentials: S3Credentials,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait { ... }
fn read_object<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 ObjectPath,
range: Option<ByteRange>,
) -> Pin<Box<dyn Future<Output = Result<ObjectRead, StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn join<'life0, 'life1, 'async_trait>(
&'life0 self,
invitation: &'life1 StorageInvitation,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn leave<'life0, 'life1, 'async_trait>(
&'life0 self,
invitation: &'life1 StorageInvitation,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn send_independent_part<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
_publication: &'life1 PublicationRequest,
_session: &'life2 UploadSession,
_offset: u64,
_bytes: &'life3 [u8],
_sent: &'life4 ByteProgress,
) -> Pin<Box<dyn Future<Output = Result<ConfirmedPart, StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait { ... }
fn dates_floor_sessions(&self) -> bool { ... }
fn superseded_floor_uploads<'life0, 'life1, 'async_trait>(
&'life0 self,
_floor: &'life1 StoredObject,
) -> Pin<Box<dyn Future<Output = Result<Vec<LeftUpload>, StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn detection_leftovers<'life0, 'async_trait>(
&'life0 self,
_store: StoreId,
_run: Uuid,
) -> Pin<Box<dyn Future<Output = Result<Vec<LeftUpload>, StorageError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait { ... }
}Expand description
Native calls used by StorageConnection. Consumers use Storage;
implementations handle provider protocols after the connection checks paths,
request sizes and recorded sessions. Construction receives validated settings.
Required Methods§
Sourcefn config(&self) -> StorageConfig
fn config(&self) -> StorageConfig
This provider’s location.
Sourcefn single_request_limit(&self) -> u64
fn single_request_limit(&self) -> u64
Largest complete body accepted by create or replace.
Sourcefn create<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
publication: &'life1 PublicationRequest,
path: &'life2 ObjectPath,
bytes: &'life3 [u8],
sent: &'life4 ByteProgress,
device: DeviceId,
) -> Pin<Box<dyn Future<Output = Result<Option<StoredObject>, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
fn create<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
publication: &'life1 PublicationRequest,
path: &'life2 ObjectPath,
bytes: &'life3 [u8],
sent: &'life4 ByteProgress,
device: DeviceId,
) -> Pin<Box<dyn Future<Output = Result<Option<StoredObject>, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
Create in one request, telling sent the body’s bytes as the
provider’s client hands them over. A temporary it stages sits in
device’s reserved folder (D10).
Returns the created object’s metadata when the reply carries it.
Sourcefn replace<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
publication: &'life1 PublicationRequest,
previous: &'life2 StoredObject,
bytes: &'life3 [u8],
device: DeviceId,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn replace<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
publication: &'life1 PublicationRequest,
previous: &'life2 StoredObject,
bytes: &'life3 [u8],
device: DeviceId,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Replace the observed object in one atomic conditional publication. A
temporary it stages sits in device’s reserved folder (D10).
Sourcefn status<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 ObjectPath,
) -> Pin<Box<dyn Future<Output = Result<Option<StoredObject>, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn status<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 ObjectPath,
) -> Pin<Box<dyn Future<Output = Result<Option<StoredObject>, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Exact native lookup; only a confirmed missing object returns None.
Sourcefn stream_object<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
path: &'life1 ObjectPath,
range: Option<ByteRange>,
received: &'life2 ByteProgress,
) -> Pin<Box<dyn Future<Output = Result<ObjectStream<'_>, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn stream_object<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
path: &'life1 ObjectPath,
range: Option<ByteRange>,
received: &'life2 ByteProgress,
) -> Pin<Box<dyn Future<Output = Result<ObjectStream<'_>, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Read complete bytes or a range, retaining metadata for those exact bytes.
The connection hears the stream’s reads itself; a client that fetches
bytes before the stream yields them tells received how far through
the object they reach as they arrive, counted from the object’s start.
Sourcefn list<'life0, 'life1, 'async_trait>(
&'life0 self,
listing: &'life1 mut ObjectListing,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list<'life0, 'life1, 'async_trait>(
&'life0 self,
listing: &'life1 mut ObjectListing,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Consume native pages into the connection’s checked listing.
Sourcefn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 ObjectPath,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 ObjectPath,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Delete, accepting an already absent object.
Sourcefn grant_access<'life0, 'life1, 'async_trait>(
&'life0 self,
account: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<AccessGrant, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn grant_access<'life0, 'life1, 'async_trait>(
&'life0 self,
account: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<AccessGrant, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Grant account access, or return S3’s console instructions.
Sourcefn revoke_access<'life0, 'life1, 'async_trait>(
&'life0 self,
account: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<RetainedAccess>, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn revoke_access<'life0, 'life1, 'async_trait>(
&'life0 self,
account: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<RetainedAccess>, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Remove exclusive grants and return grants that still reach the account.
Sourcefn begin_upload<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
publication: &'life1 PublicationRequest,
target: &'life2 UploadTarget,
total: u64,
device: DeviceId,
) -> Pin<Box<dyn Future<Output = Result<UploadSession, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn begin_upload<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
publication: &'life1 PublicationRequest,
target: &'life2 UploadTarget,
total: u64,
device: DeviceId,
) -> Pin<Box<dyn Future<Output = Result<UploadSession, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Begin a nonempty upload with its original publication condition, for
device, whose reserved folder holds its temporaries (D10).
Sourcefn resume_upload<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
publication: &'life1 PublicationRequest,
session: &'life2 mut UploadSession,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn resume_upload<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
publication: &'life1 PublicationRequest,
session: &'life2 mut UploadSession,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Recover native progress of a validated, incomplete session.
Sourcefn upload_part<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
publication: &'life1 PublicationRequest,
session: &'life2 mut UploadSession,
bytes: &'life3 [u8],
end: u64,
sent: &'life4 ByteProgress,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
fn upload_part<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
publication: &'life1 PublicationRequest,
session: &'life2 mut UploadSession,
bytes: &'life3 [u8],
end: u64,
sent: &'life4 ByteProgress,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
Send a checked part ending at end. The connection validates its length,
boundary and session; implementations enforce the native protocol.
sent already counts from the part’s start in the object.
Sourcefn finish_upload<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
publication: &'life1 PublicationRequest,
session: &'life2 mut UploadSession,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn finish_upload<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
publication: &'life1 PublicationRequest,
session: &'life2 mut UploadSession,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Publish an incomplete session, checking native progress where required.
Sourcefn abort_upload<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
publication: &'life1 PublicationRequest,
session: &'life2 UploadSession,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn abort_upload<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
publication: &'life1 PublicationRequest,
session: &'life2 UploadSession,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Abandon an incomplete session without deleting published bytes.
Sourcefn device_uploads<'life0, 'async_trait>(
&'life0 self,
store: StoreId,
device: DeviceId,
) -> Pin<Box<dyn Future<Output = Result<Vec<LeftUpload>, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn device_uploads<'life0, 'async_trait>(
&'life0 self,
store: StoreId,
device: DeviceId,
) -> Pin<Box<dyn Future<Output = Result<Vec<LeftUpload>, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
The uploads device left in store that this sign-in can see: the
sessions and temporaries in its reserved folder (D10), and, where the
provider puts a session at its destination, those under the device’s
file and snapshot folders. Every page of each listing is followed.
Sourcefn settled_claim_uploads<'life0, 'async_trait>(
&'life0 self,
store: StoreId,
through: u64,
) -> Pin<Box<dyn Future<Output = Result<Vec<LeftUpload>, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn settled_claim_uploads<'life0, 'async_trait>(
&'life0 self,
store: StoreId,
through: u64,
) -> Pin<Box<dyn Future<Output = Result<Vec<LeftUpload>, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
The unfinished sessions at slots 1 to through of store, whoever
began them: where a claim’s session sits at its slot’s path, one at
a slot this device has applied can never publish, since create-once
refuses it there. A provider that puts no session at a slot’s path
returns none.
Sourcefn end_left_upload<'life0, 'life1, 'async_trait>(
&'life0 self,
upload: &'life1 LeftUpload,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn end_left_upload<'life0, 'life1, 'async_trait>(
&'life0 self,
upload: &'life1 LeftUpload,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
End one upload another device left, as this provider listed it: abort the session, or delete what it staged. One already ended succeeds, and a published object is never touched.
Provided Methods§
Sourcefn read_part_size(&self) -> Option<NonZeroU64>
fn read_part_size(&self) -> Option<NonZeroU64>
The size of the parts a ranged read moves whole
(crate::Storage::read_part_size); None when a range moves only
its own bytes.
Sourcefn create_location_marker<'life0, 'async_trait>(
&'life0 self,
_store: StoreId,
_device: DeviceId,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn create_location_marker<'life0, 'async_trait>(
&'life0 self,
_store: StoreId,
_device: DeviceId,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Create D10’s location marker at the location’s root with the
provider’s create-once request. Only first setup at a location that
holds one store calls this operation. Anything it stages sits in
device’s reserved folder (D10).
Sourcefn read_location_marker<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn read_location_marker<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Read the complete location marker, bounded to D10’s UUID byte count. Only a location that holds one store calls this operation. A marker read that finds nothing confirms the location is still there first.
Sourcefn folder_label<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<FolderLabel, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn folder_label<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<FolderLabel, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
The store’s folder’s name and web address as this connection’s account names them now (§20.2). Only a Dropbox shared folder or a OneDrive folder has them; nothing asks another location.
Sourcefn account<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<String, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn account<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<String, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Signed-in account; coven shares nothing on S3, so it has none.
Sourcefn set_oauth_tokens<'life0, 'async_trait>(
&'life0 self,
_tokens: OAuthTokens,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn set_oauth_tokens<'life0, 'async_trait>(
&'life0 self,
_tokens: OAuthTokens,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Replace tokens after credential custody commits them.
Sourcefn set_s3_credentials<'life0, 'async_trait>(
&'life0 self,
_credentials: S3Credentials,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn set_s3_credentials<'life0, 'async_trait>(
&'life0 self,
_credentials: S3Credentials,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Replace the S3 signing key after credential custody commits it.
Sourcefn read_object<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 ObjectPath,
range: Option<ByteRange>,
) -> Pin<Box<dyn Future<Output = Result<ObjectRead, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read_object<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 ObjectPath,
range: Option<ByteRange>,
) -> Pin<Box<dyn Future<Output = Result<ObjectRead, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Collect a bounded response through the streaming implementation. Large
writes and snapshots consume stream_object directly. This convenience
reader holds at most 32 MiB, regardless of provider metadata.
Sourcefn join<'life0, 'life1, 'async_trait>(
&'life0 self,
invitation: &'life1 StorageInvitation,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn join<'life0, 'life1, 'async_trait>(
&'life0 self,
invitation: &'life1 StorageInvitation,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Accept native sharing material. The connection checks location and reads the exact floor status afterwards to verify readability.
Sourcefn leave<'life0, 'life1, 'async_trait>(
&'life0 self,
invitation: &'life1 StorageInvitation,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn leave<'life0, 'life1, 'async_trait>(
&'life0 self,
invitation: &'life1 StorageInvitation,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Undo Self::join’s acceptance so the invite stays usable
(crate::Storage::leave). Access an invite grants without native
acceptance has nothing to undo.
Sourcefn send_independent_part<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
_publication: &'life1 PublicationRequest,
_session: &'life2 UploadSession,
_offset: u64,
_bytes: &'life3 [u8],
_sent: &'life4 ByteProgress,
) -> Pin<Box<dyn Future<Output = Result<ConfirmedPart, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
fn send_independent_part<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
_publication: &'life1 PublicationRequest,
_session: &'life2 UploadSession,
_offset: u64,
_bytes: &'life3 [u8],
_sent: &'life4 ByteProgress,
) -> Pin<Box<dyn Future<Output = Result<ConfirmedPart, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
Send part offset.. of a session whose parts are independent
(UploadSession::parts_independent), leaving the session as it
is: the provider’s confirmation of the part comes back, for the
caller to add. Several may be in flight at once. The connection
checks the part is a whole one the session lacks; sent already
counts from the part’s start in the object. A provider whose parts
go in order has none to send this way.
Sourcefn dates_floor_sessions(&self) -> bool
fn dates_floor_sessions(&self) -> bool
Whether this provider dates an unfinished floor session’s start so that one begun before the current floor’s publication can be told apart (Appendix E.10). Asking sends nothing.
Sourcefn superseded_floor_uploads<'life0, 'life1, 'async_trait>(
&'life0 self,
_floor: &'life1 StoredObject,
) -> Pin<Box<dyn Future<Output = Result<Vec<LeftUpload>, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn superseded_floor_uploads<'life0, 'life1, 'async_trait>(
&'life0 self,
_floor: &'life1 StoredObject,
) -> Pin<Box<dyn Future<Output = Result<Vec<LeftUpload>, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
The unfinished sessions at the floor’s path begun before floor, the
current floor, was published: each observed an older revision, so
none can publish. Asked only where Self::dates_floor_sessions.
Sourcefn detection_leftovers<'life0, 'async_trait>(
&'life0 self,
_store: StoreId,
_run: Uuid,
) -> Pin<Box<dyn Future<Output = Result<Vec<LeftUpload>, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn detection_leftovers<'life0, 'async_trait>(
&'life0 self,
_store: StoreId,
_run: Uuid,
) -> Pin<Box<dyn Future<Output = Result<Vec<LeftUpload>, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
What S3 detection run run left in store’s .coven-check prefix
(§20.7): its unfinished multipart uploads, then its probes. Only S3
detects, so elsewhere no run left anything.