From 1ae4e5d438db4fef49b1f488b8e928cdc0057f4a Mon Sep 17 00:00:00 2001 From: Gwen Lg Date: Wed, 4 Feb 2026 18:30:25 +0100 Subject: [PATCH] fix: mark to skip serialization of `Option` when `None` mark with `skip_serializing_if = "Option::is_none"` --- src/api/s3/cors.rs | 4 +-- src/api/s3/lifecycle.rs | 31 +++++++++++++------ src/api/s3/website.rs | 20 +++++++----- src/api/s3/xml.rs | 68 ++++++++++++++++++++++------------------- 4 files changed, 73 insertions(+), 50 deletions(-) diff --git a/src/api/s3/cors.rs b/src/api/s3/cors.rs index ca78ae3f..9e17bc03 100644 --- a/src/api/s3/cors.rs +++ b/src/api/s3/cors.rs @@ -94,9 +94,9 @@ pub struct CorsConfiguration { #[derive(Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)] pub struct CorsRule { - #[serde(rename = "ID")] + #[serde(rename = "ID", skip_serializing_if = "Option::is_none")] pub id: Option, - #[serde(rename = "MaxAgeSeconds")] + #[serde(rename = "MaxAgeSeconds", skip_serializing_if = "Option::is_none")] pub max_age_seconds: Option, #[serde(rename = "AllowedOrigin")] pub allowed_origins: Vec, diff --git a/src/api/s3/lifecycle.rs b/src/api/s3/lifecycle.rs index 22087183..5f3bfb98 100644 --- a/src/api/s3/lifecycle.rs +++ b/src/api/s3/lifecycle.rs @@ -91,35 +91,46 @@ pub struct LifecycleConfiguration { #[derive(Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)] pub struct LifecycleRule { - #[serde(rename = "ID")] + #[serde(rename = "ID", skip_serializing_if = "Option::is_none")] pub id: Option, #[serde(rename = "Status")] pub status: Value, - #[serde(rename = "Filter", default)] + #[serde(rename = "Filter", default, skip_serializing_if = "Option::is_none")] pub filter: Option, - #[serde(rename = "Expiration", default)] + #[serde( + rename = "Expiration", + default, + skip_serializing_if = "Option::is_none" + )] pub expiration: Option, - #[serde(rename = "AbortIncompleteMultipartUpload", default)] + #[serde( + rename = "AbortIncompleteMultipartUpload", + default, + skip_serializing_if = "Option::is_none" + )] pub abort_incomplete_mpu: Option, } #[derive(Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Default)] pub struct Filter { - #[serde(rename = "And")] + #[serde(rename = "And", skip_serializing_if = "Option::is_none")] pub and: Option>, - #[serde(rename = "Prefix")] + #[serde(rename = "Prefix", skip_serializing_if = "Option::is_none")] pub prefix: Option, - #[serde(rename = "ObjectSizeGreaterThan")] + #[serde( + rename = "ObjectSizeGreaterThan", + skip_serializing_if = "Option::is_none" + )] pub size_gt: Option, - #[serde(rename = "ObjectSizeLessThan")] + #[serde(rename = "ObjectSizeLessThan", skip_serializing_if = "Option::is_none")] pub size_lt: Option, } #[derive(Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)] pub struct Expiration { - #[serde(rename = "Days")] + #[serde(rename = "Days", skip_serializing_if = "Option::is_none")] pub days: Option, - #[serde(rename = "Date")] + #[serde(rename = "Date", skip_serializing_if = "Option::is_none")] pub at_date: Option, } diff --git a/src/api/s3/website.rs b/src/api/s3/website.rs index c4863e7f..4c14f922 100644 --- a/src/api/s3/website.rs +++ b/src/api/s3/website.rs @@ -168,23 +168,29 @@ pub struct Target { #[derive(Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)] pub struct Condition { - #[serde(rename = "HttpErrorCodeReturnedEquals")] + #[serde( + rename = "HttpErrorCodeReturnedEquals", + skip_serializing_if = "Option::is_none" + )] pub http_error_code: Option, - #[serde(rename = "KeyPrefixEquals")] + #[serde(rename = "KeyPrefixEquals", skip_serializing_if = "Option::is_none")] pub prefix: Option, } #[derive(Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)] pub struct Redirect { - #[serde(rename = "HostName")] + #[serde(rename = "HostName", skip_serializing_if = "Option::is_none")] pub hostname: Option, - #[serde(rename = "Protocol")] + #[serde(rename = "Protocol", skip_serializing_if = "Option::is_none")] pub protocol: Option, - #[serde(rename = "HttpRedirectCode")] + #[serde(rename = "HttpRedirectCode", skip_serializing_if = "Option::is_none")] pub http_redirect_code: Option, - #[serde(rename = "ReplaceKeyPrefixWith")] + #[serde( + rename = "ReplaceKeyPrefixWith", + skip_serializing_if = "Option::is_none" + )] pub replace_prefix: Option, - #[serde(rename = "ReplaceKeyWith")] + #[serde(rename = "ReplaceKeyWith", skip_serializing_if = "Option::is_none")] pub replace_full: Option, } diff --git a/src/api/s3/xml.rs b/src/api/s3/xml.rs index 2bb265d4..02113a7f 100644 --- a/src/api/s3/xml.rs +++ b/src/api/s3/xml.rs @@ -97,7 +97,7 @@ pub struct DeleteError { pub key: Option, #[serde(rename = "Message")] pub message: Value, - #[serde(rename = "VersionId")] + #[serde(rename = "VersionId", skip_serializing_if = "Option::is_none")] pub version_id: Option, } @@ -135,17 +135,17 @@ pub struct CompleteMultipartUploadResult { pub key: Value, #[serde(rename = "ETag")] pub etag: Value, - #[serde(rename = "ChecksumCRC32")] + #[serde(rename = "ChecksumCRC32", skip_serializing_if = "Option::is_none")] pub checksum_crc32: Option, - #[serde(rename = "ChecksumCRC32C")] + #[serde(rename = "ChecksumCRC32C", skip_serializing_if = "Option::is_none")] pub checksum_crc32c: Option, - #[serde(rename = "ChecksumCR64NVME")] + #[serde(rename = "ChecksumCR64NVME", skip_serializing_if = "Option::is_none")] pub checksum_crc64nvme: Option, - #[serde(rename = "ChecksumSHA1")] + #[serde(rename = "ChecksumSHA1", skip_serializing_if = "Option::is_none")] pub checksum_sha1: Option, - #[serde(rename = "ChecksumSHA256")] + #[serde(rename = "ChecksumSHA256", skip_serializing_if = "Option::is_none")] pub checksum_sha256: Option, - #[serde(rename = "ChecksumType")] + #[serde(rename = "ChecksumType", skip_serializing_if = "Option::is_none")] pub checksum_type: Option, } @@ -179,17 +179,17 @@ pub struct ListMultipartUploadsResult { pub xmlns: (), #[serde(rename = "Bucket")] pub bucket: Value, - #[serde(rename = "KeyMarker")] + #[serde(rename = "KeyMarker", skip_serializing_if = "Option::is_none")] pub key_marker: Option, - #[serde(rename = "UploadIdMarker")] + #[serde(rename = "UploadIdMarker", skip_serializing_if = "Option::is_none")] pub upload_id_marker: Option, - #[serde(rename = "NextKeyMarker")] + #[serde(rename = "NextKeyMarker", skip_serializing_if = "Option::is_none")] pub next_key_marker: Option, - #[serde(rename = "NextUploadIdMarker")] + #[serde(rename = "NextUploadIdMarker", skip_serializing_if = "Option::is_none")] pub next_upload_id_marker: Option, #[serde(rename = "Prefix")] pub prefix: Value, - #[serde(rename = "Delimiter")] + #[serde(rename = "Delimiter", skip_serializing_if = "Option::is_none")] pub delimiter: Option, #[serde(rename = "MaxUploads")] pub max_uploads: IntValue, @@ -199,7 +199,7 @@ pub struct ListMultipartUploadsResult { pub upload: Vec, #[serde(rename = "CommonPrefixes")] pub common_prefixes: Vec, - #[serde(rename = "EncodingType")] + #[serde(rename = "EncodingType", skip_serializing_if = "Option::is_none")] pub encoding_type: Option, } @@ -213,15 +213,15 @@ pub struct PartItem { pub part_number: IntValue, #[serde(rename = "Size")] pub size: IntValue, - #[serde(rename = "ChecksumCRC32")] + #[serde(rename = "ChecksumCRC32", skip_serializing_if = "Option::is_none")] pub checksum_crc32: Option, - #[serde(rename = "ChecksumCRC32C")] + #[serde(rename = "ChecksumCRC32C", skip_serializing_if = "Option::is_none")] pub checksum_crc32c: Option, - #[serde(rename = "ChecksumCRC64NVME")] + #[serde(rename = "ChecksumCRC64NVME", skip_serializing_if = "Option::is_none")] pub checksum_crc64nvme: Option, - #[serde(rename = "ChecksumSHA1")] + #[serde(rename = "ChecksumSHA1", skip_serializing_if = "Option::is_none")] pub checksum_sha1: Option, - #[serde(rename = "ChecksumSHA256")] + #[serde(rename = "ChecksumSHA256", skip_serializing_if = "Option::is_none")] pub checksum_sha256: Option, } @@ -235,9 +235,12 @@ pub struct ListPartsResult { pub key: Value, #[serde(rename = "UploadId")] pub upload_id: Value, - #[serde(rename = "PartNumberMarker")] + #[serde(rename = "PartNumberMarker", skip_serializing_if = "Option::is_none")] pub part_number_marker: Option, - #[serde(rename = "NextPartNumberMarker")] + #[serde( + rename = "NextPartNumberMarker", + skip_serializing_if = "Option::is_none" + )] pub next_part_number_marker: Option, #[serde(rename = "MaxParts")] pub max_parts: IntValue, @@ -281,23 +284,26 @@ pub struct ListBucketResult { pub name: Value, #[serde(rename = "Prefix")] pub prefix: Value, - #[serde(rename = "Marker")] + #[serde(rename = "Marker", skip_serializing_if = "Option::is_none")] pub marker: Option, - #[serde(rename = "NextMarker")] + #[serde(rename = "NextMarker", skip_serializing_if = "Option::is_none")] pub next_marker: Option, - #[serde(rename = "StartAfter")] + #[serde(rename = "StartAfter", skip_serializing_if = "Option::is_none")] pub start_after: Option, - #[serde(rename = "ContinuationToken")] + #[serde(rename = "ContinuationToken", skip_serializing_if = "Option::is_none")] pub continuation_token: Option, - #[serde(rename = "NextContinuationToken")] + #[serde( + rename = "NextContinuationToken", + skip_serializing_if = "Option::is_none" + )] pub next_continuation_token: Option, - #[serde(rename = "KeyCount")] + #[serde(rename = "KeyCount", skip_serializing_if = "Option::is_none")] pub key_count: Option, #[serde(rename = "MaxKeys")] pub max_keys: IntValue, - #[serde(rename = "Delimiter")] + #[serde(rename = "Delimiter", skip_serializing_if = "Option::is_none")] pub delimiter: Option, - #[serde(rename = "EncodingType")] + #[serde(rename = "EncodingType", skip_serializing_if = "Option::is_none")] pub encoding_type: Option, #[serde(rename = "IsTruncated")] pub is_truncated: Value, @@ -311,7 +317,7 @@ pub struct ListBucketResult { pub struct VersioningConfiguration { #[serde(rename = "@xmlns", serialize_with = "xmlns_tag")] pub xmlns: (), - #[serde(rename = "Status")] + #[serde(rename = "Status", skip_serializing_if = "Option::is_none")] pub status: Option, } @@ -335,7 +341,7 @@ pub struct Grantee { pub xmlns_xsi: (), #[serde(rename = "@xsi:type")] pub typ: String, - #[serde(rename = "DisplayName")] + #[serde(rename = "DisplayName", skip_serializing_if = "Option::is_none")] pub display_name: Option, #[serde(rename = "ID")] pub id: Option, @@ -359,7 +365,7 @@ pub struct AccessControlList { pub struct AccessControlPolicy { #[serde(rename = "@xmlns", serialize_with = "xmlns_tag")] pub xmlns: (), - #[serde(rename = "Owner")] + #[serde(rename = "Owner", skip_serializing_if = "Option::is_none")] pub owner: Option, #[serde(rename = "AccessControlList")] pub acl: AccessControlList,