pub struct ProviderObjectStore { /* private fields */ }Expand description
Adapts the upstream object_store provider surface to the narrower LoonFS contract.
Implementations§
Source§impl ProviderObjectStore
impl ProviderObjectStore
Sourcepub fn new(
inner: Arc<dyn ObjectStore>,
multipart: Option<Arc<dyn MultipartStore>>,
config: ProviderObjectStoreConfig,
) -> Result<Self>
pub fn new( inner: Arc<dyn ObjectStore>, multipart: Option<Arc<dyn MultipartStore>>, config: ProviderObjectStoreConfig, ) -> Result<Self>
Wraps a provider client and optional native multipart surface.
Construction fails when config.key_prefix is not a normalized,
non-escaping logical prefix.
Trait Implementations§
Source§impl Clone for ProviderObjectStore
impl Clone for ProviderObjectStore
Source§fn clone(&self) -> ProviderObjectStore
fn clone(&self) -> ProviderObjectStore
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ProviderObjectStore
impl Debug for ProviderObjectStore
Source§impl ObjectStore for ProviderObjectStore
impl ObjectStore for ProviderObjectStore
Source§fn get<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
range: Option<ByteRange>,
) -> Pin<Box<dyn Future<Output = Result<Option<Bytes>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
range: Option<ByteRange>,
) -> Pin<Box<dyn Future<Output = Result<Option<Bytes>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Bounded reads issue the ranged GET directly — one round trip, not a
sizing HEAD plus a GET — and pay a single HEAD only on the failure
path, to decide whether the range or the transport was the problem.
The contract matches the local reference provider exactly: a missing
object is Ok(None) however the request was shaped, an end past the
object clamps, start == size reads empty, and start > size is
InvalidRange.
Source§fn put_streamed<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
body: ByteStream,
mode: PutMode,
) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn put_streamed<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
body: ByteStream,
mode: PutMode,
) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Cuts the payload into parts as it arrives and uploads them one at a time, so a large object costs one part of memory instead of its own size.
The first part is cut before anything is decided. A payload that
ends inside it is an ordinary ObjectStore::put with the caller’s
mode intact — which is the same size line put itself draws, so a
small streamed write behaves exactly like a small buffered one.
Anything longer goes through the provider’s multipart upload, whose
completion is an unconditional overwrite.
Source§fn head<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<ObjectMetadata>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn head<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<ObjectMetadata>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
None when the object is absent. Read moreSource§fn get_with_metadata<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<ObjectBody>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_with_metadata<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<ObjectBody>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn put<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
bytes: Bytes,
mode: PutMode,
) -> Pin<Box<dyn Future<Output = Result<ObjectMetadata>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn put<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
bytes: Bytes,
mode: PutMode,
) -> Pin<Box<dyn Future<Output = Result<ObjectMetadata>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn list_prefix_stream(&self, prefix: &str) -> BoxStream<'static, Result<String>>
fn list_prefix_stream(&self, prefix: &str) -> BoxStream<'static, Result<String>>
prefix in ascending lexicographic order. Read moreSource§fn head_stored_checksum<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<StoredObjectChecksum>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn head_stored_checksum<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<StoredObjectChecksum>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
None when the object is absent. Read moreSource§fn create_multipart_upload<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn create_multipart_upload<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
key, whose eventual
checksum covers the whole assembled object. Read moreSource§fn complete_multipart_upload<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
key: &'life1 str,
provider_upload_id: &'life2 str,
parts: &'life3 [MultipartPart],
full_object_checksum: &'life4 StorageChecksum,
) -> Pin<Box<dyn Future<Output = Result<MultipartCompletion>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
fn complete_multipart_upload<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
key: &'life1 str,
provider_upload_id: &'life2 str,
parts: &'life3 [MultipartPart],
full_object_checksum: &'life4 StorageChecksum,
) -> Pin<Box<dyn Future<Output = Result<MultipartCompletion>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
Source§fn abort_multipart_upload<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
key: &'life1 str,
provider_upload_id: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn abort_multipart_upload<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
key: &'life1 str,
provider_upload_id: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn list_prefix<'life0, 'life1, 'async_trait>(
&'life0 self,
prefix: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_prefix<'life0, 'life1, 'async_trait>(
&'life0 self,
prefix: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
prefix. Read moreSource§fn put_overwrite<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
bytes: Bytes,
) -> Pin<Box<dyn Future<Output = Result<ObjectMetadata>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn put_overwrite<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
bytes: Bytes,
) -> Pin<Box<dyn Future<Output = Result<ObjectMetadata>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
key. Read moreSource§fn put_if_absent<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
bytes: Bytes,
) -> Pin<Box<dyn Future<Output = Result<ObjectMetadata>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn put_if_absent<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
bytes: Bytes,
) -> Pin<Box<dyn Future<Output = Result<ObjectMetadata>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
key only when no object is present. Read moreSource§fn put_immutable_verified<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
bytes: Bytes,
) -> Pin<Box<dyn Future<Output = Result<(), ImmutableWriteError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn put_immutable_verified<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
bytes: Bytes,
) -> Pin<Box<dyn Future<Output = Result<(), ImmutableWriteError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
bytes under an immutable key and accepts success only when
the key contains exactly those bytes. Read moreSource§fn compare_and_swap<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
key: &'life1 str,
expected_etag: &'life2 str,
bytes: Bytes,
) -> Pin<Box<dyn Future<Output = Result<ObjectMetadata>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn compare_and_swap<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
key: &'life1 str,
expected_etag: &'life2 str,
bytes: Bytes,
) -> Pin<Box<dyn Future<Output = Result<ObjectMetadata>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Auto Trait Implementations§
impl !RefUnwindSafe for ProviderObjectStore
impl !UnwindSafe for ProviderObjectStore
impl Freeze for ProviderObjectStore
impl Send for ProviderObjectStore
impl Sync for ProviderObjectStore
impl Unpin for ProviderObjectStore
impl UnsafeUnpin for ProviderObjectStore
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more