pub trait Backend:
Debug
+ Send
+ Sync
+ 'static {
Show 13 methods
// Required methods
fn name(&self) -> &'static str;
fn put_object<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 ObjectId,
metadata: &'life2 Metadata,
stream: ClientStream,
access_time: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<PutResponse>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn get_object<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ObjectId,
access_time: Timestamp,
range: Option<ByteRange>,
) -> Pin<Box<dyn Future<Output = Result<GetResponse>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn set_expiry<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ObjectId,
target: ExpiryUpdate,
access_time: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<SetExpiryResponse>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn delete_object<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ObjectId,
access_time: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<DeleteResponse>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
// Provided methods
fn upload_granularity(&self) -> u64 { ... }
fn get_metadata<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ObjectId,
access_time: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<MetadataResponse>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn join<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait { ... }
fn as_multipart_upload_backend(&self) -> Result<&dyn MultipartUploadBackend> { ... }
fn create_upload_session<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 ObjectId,
metadata: &'life2 Metadata,
upload_length: NonZeroU64,
) -> Pin<Box<dyn Future<Output = Result<Option<BackendToken>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait { ... }
fn put_chunk<'life0, 'life1, 'async_trait>(
&'life0 self,
session: &'life1 Session,
offset: u64,
content_length: u64,
stream: ClientStream,
) -> Pin<Box<dyn Future<Output = Result<UploadProgress>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn upload_offset<'life0, 'life1, 'async_trait>(
&'life0 self,
session: &'life1 Session,
) -> Pin<Box<dyn Future<Output = Result<UploadProgress>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn cancel_upload<'life0, 'life1, 'async_trait>(
&'life0 self,
session: &'life1 Session,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
}Expand description
Trait implemented by all storage backends.
Object operations take access_time, the timestamp of the caller’s operation.
Use it to decide whether an object or redirect has expired, so all steps of
an operation use the same time, including retries and calls to other backends.
An object is expired when its deadline is strictly earlier than access_time.
Writes preserve the creation time and deadline in the supplied metadata.
Required Methods§
Sourcefn put_object<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 ObjectId,
metadata: &'life2 Metadata,
stream: ClientStream,
access_time: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<PutResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn put_object<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 ObjectId,
metadata: &'life2 Metadata,
stream: ClientStream,
access_time: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<PutResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Stores an object at the given path with the given metadata.
Sourcefn get_object<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ObjectId,
access_time: Timestamp,
range: Option<ByteRange>,
) -> Pin<Box<dyn Future<Output = Result<GetResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_object<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ObjectId,
access_time: Timestamp,
range: Option<ByteRange>,
) -> Pin<Box<dyn Future<Output = Result<GetResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Retrieves (part of) an object at the given path, returning its metadata, a description of the part being returned, and the payload.
Sourcefn set_expiry<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ObjectId,
target: ExpiryUpdate,
access_time: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<SetExpiryResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn set_expiry<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ObjectId,
target: ExpiryUpdate,
access_time: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<SetExpiryResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Extends the deadline of an existing object with expiration policy.
Actual extensions also update TTL durations to approximately match the time since creation. TTI durations, payload, and other metadata remain unchanged.
Returns SetExpiryResponse::Satisfied when extended or already satisfied,
SetExpiryResponse::NotFound when observed absent or expired, or
SetExpiryResponse::Rejected when ineligible or conflicting.
Limit violations return ErrorKind::InvalidMetadata; backend failures also
return errors. Limits are checked before reporting an already-satisfied request.
Sourcefn delete_object<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ObjectId,
access_time: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<DeleteResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete_object<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ObjectId,
access_time: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<DeleteResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Deletes the object at the given path.
Provided Methods§
Sourcefn upload_granularity(&self) -> u64
fn upload_granularity(&self) -> u64
Returns the upload granularity for sessions opened by this backend, in bytes.
A value of zero means these uploads have no granularity. A positive value means that a
non-final chunk can persist only a multiple of this value. Implementations must reject a
non-empty, non-final chunk shorter than one unit with ErrorKind::ChunkTooSmall.
Sourcefn get_metadata<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ObjectId,
access_time: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<MetadataResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_metadata<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ObjectId,
access_time: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<MetadataResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Retrieves only the metadata for an object, without the payload.
Sourcefn join<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn join<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Waits for any outstanding background operations to complete before shutdown.
The default implementation is a no-op. Backends that spawn background tasks
(such as TieredStorage) should override this
to wait for those tasks to complete.
Sourcefn as_multipart_upload_backend(&self) -> Result<&dyn MultipartUploadBackend>
fn as_multipart_upload_backend(&self) -> Result<&dyn MultipartUploadBackend>
Borrows this backend as a MultipartUploadBackend if supported.
The default returns an ErrorKind::Unsupported. Backends that implement
MultipartUploadBackend should override this to return Ok(self).
Sourcefn create_upload_session<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 ObjectId,
metadata: &'life2 Metadata,
upload_length: NonZeroU64,
) -> Pin<Box<dyn Future<Output = Result<Option<BackendToken>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn create_upload_session<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 ObjectId,
metadata: &'life2 Metadata,
upload_length: NonZeroU64,
) -> Pin<Box<dyn Future<Output = Result<Option<BackendToken>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Creates a resumable upload session for the object at id.
Object metadata and its total length are declared upfront and cannot be mutated during the upload.
The returned string is opaque backend-defined state. StorageService
protects it before exposing the session token outside the service layer.
Returns Ok(None) when this backend cannot store the described object resumably. Declining
is a routine outcome rather than an error, and the default implementation declines.
§Errors
Returns an error only when the backend supports resumable uploads but failed to open the session.
Sourcefn put_chunk<'life0, 'life1, 'async_trait>(
&'life0 self,
session: &'life1 Session,
offset: u64,
content_length: u64,
stream: ClientStream,
) -> Pin<Box<dyn Future<Output = Result<UploadProgress>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn put_chunk<'life0, 'life1, 'async_trait>(
&'life0 self,
session: &'life1 Session,
offset: u64,
content_length: u64,
stream: ClientStream,
) -> Pin<Box<dyn Future<Output = Result<UploadProgress>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Writes a chunk of content_length bytes at offset into an open session.
A backend may acknowledge fewer bytes than the chunk supplied, for example by persisting
only an aligned prefix. Callers must continue from the authoritative offset in the returned
UploadProgress, or query Self::upload_offset after an ambiguous failure. A backend
may or may not accept a replay starting before its persisted offset.
UploadProgress::Complete means the upload is terminal and the object is available
through this backend’s normal read methods. A backend that composes another backend must
finish its own publication work before returning that outcome.
A content_length of zero is valid. It writes nothing and reports the offset the backend
holds.
Returns ErrorKind::UnknownUploadSession when session does not identify an open session,
and ErrorKind::ChunkExceedsUploadLength when the chunk would exceed the total length
declared when the session was created. Returns ErrorKind::ChunkTooSmall when a non-empty,
non-final chunk is shorter than the upload granularity.
Sourcefn upload_offset<'life0, 'life1, 'async_trait>(
&'life0 self,
session: &'life1 Session,
) -> Pin<Box<dyn Future<Output = Result<UploadProgress>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn upload_offset<'life0, 'life1, 'async_trait>(
&'life0 self,
session: &'life1 Session,
) -> Pin<Box<dyn Future<Output = Result<UploadProgress>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Reports how far the session has progressed.
This can return UploadProgress::Complete repeatedly after the final chunk, including
when its original response was lost. A composed backend may finish pending idempotent
publication work before returning that terminal outcome.
Returns ErrorKind::UnknownUploadSession when session does not identify a known session.
Sourcefn cancel_upload<'life0, 'life1, 'async_trait>(
&'life0 self,
session: &'life1 Session,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn cancel_upload<'life0, 'life1, 'async_trait>(
&'life0 self,
session: &'life1 Session,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Cancels an upload session, discarding whatever was uploaded.
Returns ErrorKind::UnknownUploadSession when session does not identify an open session.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".