diff --git a/rustfs/src/app/bucket_list_through.rs b/rustfs/src/app/bucket_list_through.rs index c385fdb9c..586f5b0ae 100644 --- a/rustfs/src/app/bucket_list_through.rs +++ b/rustfs/src/app/bucket_list_through.rs @@ -443,7 +443,9 @@ mod tests { use super::*; use crate::app::bucket_usecase::DefaultBucketUsecase; use crate::app::gating_test_env::{run_large_stack_test, shared_gating_ecstore}; - use crate::app::storage_api::bucket_usecase::s3::{ListObjectsV2Input, ListObjectsV2Output, S3Request, S3Response}; + use crate::app::storage_api::bucket_usecase::s3::{ + ListObjectsInput, ListObjectsV2Input, ListObjectsV2Output, S3Request, S3Response, XmlSerialize, XmlSerializer, + }; use crate::app::storage_api::test::StoragePutObjReader; use crate::app::storage_api::test::contract::bucket::{BucketOperations as _, MakeBucketOptions}; use crate::app::storage_api::test::contract::object::ObjectIO as _; @@ -451,7 +453,6 @@ mod tests { FilterConfig, MAX_LIST_NO_PROGRESS_PAGES, OnDemandMigrationConfig, PathStyle, PolicyConfig, Provider, SourceConfig, SourceCredentials, TlsConfig, }; - use s3s::dto::ListObjectsInput; use std::time::Duration; use tokio::io::{AsyncReadExt, AsyncWriteExt}; @@ -864,7 +865,7 @@ mod tests { assert_eq!(output.next_marker.as_deref(), (index == 0).then_some(expected_key)); let mut xml = Vec::new(); - s3s::xml::Serialize::serialize(&output, &mut s3s::xml::Serializer::new(&mut xml)) + XmlSerialize::serialize(&output, &mut XmlSerializer::new(&mut xml)) .expect("serialize the real v1 response"); assert!(!xml.contains(&0), "XML 1.0 forbids NUL in NextMarker"); let mut reader = quick_xml::Reader::from_reader(xml.as_slice()); diff --git a/rustfs/src/app/storage_api.rs b/rustfs/src/app/storage_api.rs index 6c810e213..da7af7c86 100644 --- a/rustfs/src/app/storage_api.rs +++ b/rustfs/src/app/storage_api.rs @@ -27,12 +27,16 @@ pub(crate) fn EndpointServerPools( /// S3 wire types for app-layer modules, funneled here so new files stay off /// the direct s3s surface (s3s footprint ratchet, `scripts/check_s3s_footprint.sh`). pub(crate) mod s3 { + #[cfg(test)] + pub(crate) use s3s::dto::ListObjectsInput; #[cfg(test)] pub(crate) use s3s::dto::{ BucketVersioningStatus, DeleteMarkerReplication, DeleteMarkerReplicationStatus, Destination, ListObjectsV2Input, ListObjectsV2Output, ReplicationConfiguration, ReplicationRule, ReplicationRuleFilter, ReplicationRuleStatus, ServerSideEncryptionByDefault, ServerSideEncryptionConfiguration, ServerSideEncryptionRule, Tag, VersioningConfiguration, }; + #[cfg(test)] + pub(crate) use s3s::xml::{Serialize as XmlSerialize, Serializer as XmlSerializer}; pub(crate) use s3s::{S3Error, S3ErrorCode, S3Result}; #[cfg(test)] pub(crate) use s3s::{S3Request, S3Response}; diff --git a/scripts/check_s3s_footprint.sh b/scripts/check_s3s_footprint.sh index ae14199b5..ba4a68491 100755 --- a/scripts/check_s3s_footprint.sh +++ b/scripts/check_s3s_footprint.sh @@ -50,8 +50,10 @@ cd "$(dirname "$0")/.." # s3_error! stays flat at 1616. # 1616 → 1613 on 2026-09-02: dependency refresh verified the current tree has # already shed three s3_error! invocation lines; retighten the line counter. +# 1613 → 1599 on 2026-09-06: scanner publication coverage follow-up inherits +# current s3_error! shrinkage; retighten the line counter. S3S_IMPORT_FILES_BASELINE=213 -S3_ERROR_LINES_BASELINE=1613 +S3_ERROR_LINES_BASELINE=1599 # ecstore-scoped ratchet (rustfs/backlog#1842): the storage engine must not # know S3 wire/DTO types (ARCHITECTURE.md invariant 4). The S3-*consuming* # client was extracted to crates/s3-client, where s3s usage is legitimate;