mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-24 13:16:28 +00:00
refactor: move walk options contract (#3549)
This commit is contained in:
@@ -1,13 +1,14 @@
|
||||
use super::*;
|
||||
use rustfs_storage_api::{
|
||||
HTTPPreconditions, ObjectLockRetentionOptions, ObjectPreconditionError, ObjectPreconditionPart, ObjectPreconditionState,
|
||||
VersionMarker, WalkVersionsSortOrder,
|
||||
VersionMarker,
|
||||
};
|
||||
|
||||
pub type ListObjectsInfo = rustfs_storage_api::ListObjectsInfo<ObjectInfo>;
|
||||
pub type ListObjectsV2Info = rustfs_storage_api::ListObjectsV2Info<ObjectInfo>;
|
||||
pub type ListObjectVersionsInfo = rustfs_storage_api::ListObjectVersionsInfo<ObjectInfo>;
|
||||
pub type ObjectInfoOrErr = rustfs_storage_api::ObjectInfoOrErr<ObjectInfo, Error>;
|
||||
pub type WalkOptions = rustfs_storage_api::WalkOptions<WalkFilter>;
|
||||
|
||||
#[derive(Debug, Default, Clone)]
|
||||
pub struct ObjectOptions {
|
||||
@@ -768,17 +769,6 @@ impl DeletedObject {
|
||||
|
||||
type WalkFilter = fn(&FileInfo) -> bool;
|
||||
|
||||
#[derive(Clone, Default)]
|
||||
pub struct WalkOptions {
|
||||
pub filter: Option<WalkFilter>, // return WalkFilter returns 'true/false'
|
||||
pub marker: Option<String>, // set to skip until this object
|
||||
pub latest_only: bool, // returns only latest versions for all matching objects
|
||||
pub ask_disks: String, // dictates how many disks are being listed
|
||||
pub versions_sort: WalkVersionsSortOrder, // sort order for versions of the same object; default: Ascending order in ModTime
|
||||
pub limit: usize, // maximum number of items, 0 means no limit
|
||||
pub include_free_versions: bool, // include persisted tier free-version cleanup records
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
@@ -27,4 +27,4 @@ pub use multipart::{CompletePart, ListMultipartsInfo, ListPartsInfo, MultipartIn
|
||||
pub use object::{HTTPPreconditions, HTTPRangeError, HTTPRangeSpec, ObjectLockRetentionOptions};
|
||||
pub use object::{ListObjectVersionsInfo, ListObjectsInfo, ListObjectsV2Info, ObjectInfoOrErr};
|
||||
pub use object::{ObjectPreconditionError, ObjectPreconditionPart, ObjectPreconditionState};
|
||||
pub use object::{VersionMarker, WalkVersionsSortOrder};
|
||||
pub use object::{VersionMarker, WalkOptions, WalkVersionsSortOrder};
|
||||
|
||||
@@ -154,6 +154,31 @@ pub enum WalkVersionsSortOrder {
|
||||
Descending,
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct WalkOptions<Filter> {
|
||||
pub filter: Option<Filter>,
|
||||
pub marker: Option<String>,
|
||||
pub latest_only: bool,
|
||||
pub ask_disks: String,
|
||||
pub versions_sort: WalkVersionsSortOrder,
|
||||
pub limit: usize,
|
||||
pub include_free_versions: bool,
|
||||
}
|
||||
|
||||
impl<Filter> Default for WalkOptions<Filter> {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
filter: None,
|
||||
marker: None,
|
||||
latest_only: false,
|
||||
ask_disks: String::new(),
|
||||
versions_sort: WalkVersionsSortOrder::default(),
|
||||
limit: 0,
|
||||
include_free_versions: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Default)]
|
||||
pub struct ListObjectsInfo<ObjectItem> {
|
||||
pub is_truncated: bool,
|
||||
@@ -418,6 +443,21 @@ mod tests {
|
||||
assert!(matches!(WalkVersionsSortOrder::default(), WalkVersionsSortOrder::Ascending));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn walk_options_defaults_preserve_existing_contract() {
|
||||
type TestFilter = fn(&str) -> bool;
|
||||
|
||||
let opts = WalkOptions::<TestFilter>::default();
|
||||
|
||||
assert!(opts.filter.is_none());
|
||||
assert!(opts.marker.is_none());
|
||||
assert!(!opts.latest_only);
|
||||
assert!(opts.ask_disks.is_empty());
|
||||
assert!(matches!(opts.versions_sort, WalkVersionsSortOrder::Ascending));
|
||||
assert_eq!(opts.limit, 0);
|
||||
assert!(!opts.include_free_versions);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn object_list_response_contracts_default_to_empty_collections() {
|
||||
let v1 = ListObjectsInfo::<()>::default();
|
||||
|
||||
Reference in New Issue
Block a user