mirror of
https://github.com/rustfs/rustfs.git
synced 2026-07-26 08:18:18 +00:00
refactor(storage): use named params for ListObjectVersions (#1832)
This commit is contained in:
@@ -3600,17 +3600,23 @@ impl S3 for FS {
|
||||
..
|
||||
} = req.input;
|
||||
|
||||
let (prefix, delimiter, key_marker, version_id_marker, max_keys) =
|
||||
parse_list_object_versions_params(prefix, delimiter, key_marker, version_id_marker, max_keys)?;
|
||||
let parsed = parse_list_object_versions_params(prefix, delimiter, key_marker, version_id_marker, max_keys)?;
|
||||
|
||||
let store = get_validated_store(&bucket).await?;
|
||||
|
||||
let object_infos = store
|
||||
.list_object_versions(&bucket, &prefix, key_marker, version_id_marker, delimiter.clone(), max_keys)
|
||||
.list_object_versions(
|
||||
&bucket,
|
||||
&parsed.prefix,
|
||||
parsed.key_marker,
|
||||
parsed.version_id_marker,
|
||||
parsed.delimiter.clone(),
|
||||
parsed.max_keys,
|
||||
)
|
||||
.await
|
||||
.map_err(ApiError::from)?;
|
||||
|
||||
let output = build_list_object_versions_output(object_infos, bucket, prefix, delimiter, max_keys);
|
||||
let output = build_list_object_versions_output(object_infos, bucket, parsed.prefix, parsed.delimiter, parsed.max_keys);
|
||||
|
||||
Ok(s3_response(output))
|
||||
}
|
||||
|
||||
@@ -22,7 +22,14 @@ use s3s::{S3Error, S3ErrorCode};
|
||||
use tracing::debug;
|
||||
use urlencoding::encode;
|
||||
|
||||
pub(crate) type ListObjectVersionsParams = (String, Option<String>, Option<String>, Option<String>, i32);
|
||||
#[derive(Debug, PartialEq, Eq)]
|
||||
pub(crate) struct ListObjectVersionsParams {
|
||||
pub prefix: String,
|
||||
pub delimiter: Option<String>,
|
||||
pub key_marker: Option<String>,
|
||||
pub version_id_marker: Option<String>,
|
||||
pub max_keys: i32,
|
||||
}
|
||||
#[derive(Debug)]
|
||||
pub(crate) struct ListObjectsV2Params {
|
||||
pub prefix: String,
|
||||
@@ -72,7 +79,13 @@ pub(crate) fn parse_list_object_versions_params(
|
||||
return Err(S3Error::with_message(S3ErrorCode::InvalidArgument, "Invalid max keys".to_string()));
|
||||
}
|
||||
|
||||
Ok((prefix, delimiter, key_marker, version_id_marker, max_keys))
|
||||
Ok(ListObjectVersionsParams {
|
||||
prefix,
|
||||
delimiter,
|
||||
key_marker,
|
||||
version_id_marker,
|
||||
max_keys,
|
||||
})
|
||||
}
|
||||
|
||||
pub(crate) fn parse_list_objects_v2_params(
|
||||
@@ -455,15 +468,14 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_parse_list_object_versions_params_defaults_and_filters_empty_values() {
|
||||
let (prefix, delimiter, key_marker, version_id_marker, max_keys) =
|
||||
parse_list_object_versions_params(None, Some(String::new()), Some(String::new()), None, None)
|
||||
.expect("parse should succeed");
|
||||
let parsed = parse_list_object_versions_params(None, Some(String::new()), Some(String::new()), None, None)
|
||||
.expect("parse should succeed");
|
||||
|
||||
assert_eq!(prefix, String::new());
|
||||
assert_eq!(delimiter, None);
|
||||
assert_eq!(key_marker, None);
|
||||
assert_eq!(version_id_marker, None);
|
||||
assert_eq!(max_keys, 1000);
|
||||
assert_eq!(parsed.prefix, String::new());
|
||||
assert_eq!(parsed.delimiter, None);
|
||||
assert_eq!(parsed.key_marker, None);
|
||||
assert_eq!(parsed.version_id_marker, None);
|
||||
assert_eq!(parsed.max_keys, 1000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user