From 21ade0aaa7a7564d606808ba422859751420309d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=89=E6=AD=A3=E8=B6=85?= Date: Sun, 15 Feb 2026 13:12:00 +0800 Subject: [PATCH] refactor(storage): use named params for ListObjectVersions (#1832) --- rustfs/src/storage/ecfs.rs | 14 +++++++++---- rustfs/src/storage/s3_api/bucket.rs | 32 ++++++++++++++++++++--------- 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/rustfs/src/storage/ecfs.rs b/rustfs/src/storage/ecfs.rs index 4aeaa2401..8f5c51f56 100644 --- a/rustfs/src/storage/ecfs.rs +++ b/rustfs/src/storage/ecfs.rs @@ -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)) } diff --git a/rustfs/src/storage/s3_api/bucket.rs b/rustfs/src/storage/s3_api/bucket.rs index a825dfbb8..d2c2803ee 100644 --- a/rustfs/src/storage/s3_api/bucket.rs +++ b/rustfs/src/storage/s3_api/bucket.rs @@ -22,7 +22,14 @@ use s3s::{S3Error, S3ErrorCode}; use tracing::debug; use urlencoding::encode; -pub(crate) type ListObjectVersionsParams = (String, Option, Option, Option, i32); +#[derive(Debug, PartialEq, Eq)] +pub(crate) struct ListObjectVersionsParams { + pub prefix: String, + pub delimiter: Option, + pub key_marker: Option, + pub version_id_marker: Option, + 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]