pub enum ObjectStore {
Unversioned(KeyStore),
Versioned(VersionedKeyStore),
}Expand description
Top-level object store that dispatches to either an un-versioned or versioned backing store.
Variants§
Unversioned(KeyStore)
Un-versioned storage. Each key maps to exactly one object.
Versioned(VersionedKeyStore)
Versioned storage. Each key maps to an ordered list of versions.
Implementations§
Source§impl ObjectStore
impl ObjectStore
Sourcepub fn put(&mut self, object: S3Object) -> Option<S3Object>
pub fn put(&mut self, object: S3Object) -> Option<S3Object>
Store an object. Returns the previous object for un-versioned stores.
Sourcepub fn get(&self, key: &str) -> Option<&S3Object>
pub fn get(&self, key: &str) -> Option<&S3Object>
Get the current (latest non-delete-marker) object for a key.
Sourcepub fn get_version(&self, key: &str, version_id: &str) -> Option<&S3Object>
pub fn get_version(&self, key: &str, version_id: &str) -> Option<&S3Object>
Get a specific version of an object by key and version ID.
Sourcepub fn get_mut(&mut self, key: &str) -> Option<&mut S3Object>
pub fn get_mut(&mut self, key: &str) -> Option<&mut S3Object>
Get a mutable reference to the current (latest non-delete-marker) object. Used for in-place metadata updates (e.g., retention, legal hold).
Sourcepub fn get_version_mut(
&mut self,
key: &str,
version_id: &str,
) -> Option<&mut S3Object>
pub fn get_version_mut( &mut self, key: &str, version_id: &str, ) -> Option<&mut S3Object>
Get a mutable reference to a specific version by key and version ID. Used for in-place metadata updates (e.g., retention, legal hold).
Sourcepub fn is_delete_marker(&self, key: &str, version_id: &str) -> bool
pub fn is_delete_marker(&self, key: &str, version_id: &str) -> bool
Check if a specific version ID for a key is a delete marker.
Sourcepub fn delete(&mut self, key: &str) -> Option<S3Object>
pub fn delete(&mut self, key: &str) -> Option<S3Object>
Delete the object for a key (un-versioned semantics: removes the object).
Sourcepub fn delete_versioned(
&mut self,
key: &str,
owner: &Owner,
) -> (Option<String>, bool)
pub fn delete_versioned( &mut self, key: &str, owner: &Owner, ) -> (Option<String>, bool)
Delete an object in a versioned bucket by inserting a delete marker.
Returns (Some(version_id), true) if a delete marker was created and
an existing object was logically hidden, or (Some(version_id), false)
if a delete marker was created but no real object existed for that key.
For un-versioned stores, removes the object directly and returns
(None, had_object).
Sourcepub fn delete_version(
&mut self,
key: &str,
version_id: &str,
) -> Option<ObjectVersion>
pub fn delete_version( &mut self, key: &str, version_id: &str, ) -> Option<ObjectVersion>
Delete a specific version of an object.
Sourcepub fn list_objects(
&self,
prefix: &str,
delimiter: &str,
start_after: &str,
max_keys: usize,
) -> ListResult
pub fn list_objects( &self, prefix: &str, delimiter: &str, start_after: &str, max_keys: usize, ) -> ListResult
List objects matching a prefix, delimiter, start-after, and max-keys.
Sourcepub fn list_object_versions(
&self,
prefix: &str,
delimiter: &str,
key_marker: &str,
version_id_marker: &str,
max_keys: usize,
) -> VersionListResult
pub fn list_object_versions( &self, prefix: &str, delimiter: &str, key_marker: &str, version_id_marker: &str, max_keys: usize, ) -> VersionListResult
List object versions.
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Whether the store contains zero entries (objects, versions, or delete markers).
This checks for truly empty storage (no entries at all), which is the
correct check for DeleteBucket. For listing purposes, use Self::len()
which only counts non-deleted objects.
Sourcepub fn transition_to_versioned(&mut self)
pub fn transition_to_versioned(&mut self)
Transition from un-versioned to versioned storage.
If already versioned this is a no-op. Existing objects are migrated into single-element version lists.
Sourcepub fn is_versioned(&self) -> bool
pub fn is_versioned(&self) -> bool
Whether the store is in versioned mode.