refactor(storage): use named params for ListObjectVersions (#1832)

This commit is contained in:
安正超
2026-02-15 13:12:00 +08:00
committed by GitHub
parent 2debc14e4d
commit 21ade0aaa7
2 changed files with 32 additions and 14 deletions
+10 -4
View File
@@ -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 -10
View File
@@ -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]