Loading codegen/src/v1/ops.rs +4 −0 Original line number Diff line number Diff line Loading @@ -121,6 +121,10 @@ pub fn is_op_input(name: &str, ops: &Operations) -> bool { name.strip_suffix("Input").is_some_and(|x| ops.contains_key(x)) } pub fn is_op_output(name: &str, ops: &Operations) -> bool { name.strip_suffix("Output").is_some_and(|x| ops.contains_key(x)) } pub fn codegen(ops: &Operations, rust_types: &RustTypes) { declare_codegen!(); Loading codegen/src/v1/xml.rs +9 −1 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ use super::rust; use super::rust::default_value_literal; use crate::declare_codegen; use crate::v1::ops::is_op_output; use std::collections::{BTreeMap, BTreeSet, VecDeque}; use std::ops::Not; Loading Loading @@ -58,6 +59,9 @@ pub fn codegen(ops: &Operations, rust_types: &RustTypes) { } g!(); g!("const XMLNS_S3: &str = \"http://s3.amazonaws.com/doc/2006-03-01/\";"); g!(); codegen_xml_serde(ops, rust_types, &root_type_names); codegen_xml_serde_content(ops, rust_types, &field_type_names); } Loading Loading @@ -223,7 +227,11 @@ fn codegen_xml_serde(ops: &Operations, rust_types: &RustTypes, root_type_names: g!("impl Serialize for {} {{", ty.name); g!("fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult {{"); if is_op_output(&ty.name, ops) { g!("s.content_with_ns(\"{xml_name}\", XMLNS_S3, self)"); } else { g!("s.content(\"{xml_name}\", self)"); } g!("}}"); g!("}}"); Loading crates/s3s/src/xml/generated.rs +28 −26 Original line number Diff line number Diff line Loading @@ -806,6 +806,8 @@ use std::io::Write; // SerializeContent: Years // DeserializeContent: Years const XMLNS_S3: &str = "http://s3.amazonaws.com/doc/2006-03-01/"; impl Serialize for AccelerateConfiguration { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("AccelerateConfiguration", self) Loading Loading @@ -880,7 +882,7 @@ impl<'xml> Deserialize<'xml> for CORSConfiguration { impl Serialize for CompleteMultipartUploadOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("CompleteMultipartUploadResult", self) s.content_with_ns("CompleteMultipartUploadResult", XMLNS_S3, self) } } Loading Loading @@ -934,7 +936,7 @@ impl<'xml> Deserialize<'xml> for CreateBucketConfiguration { impl Serialize for CreateMultipartUploadOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("InitiateMultipartUploadResult", self) s.content_with_ns("InitiateMultipartUploadResult", XMLNS_S3, self) } } Loading @@ -952,19 +954,19 @@ impl<'xml> Deserialize<'xml> for Delete { impl Serialize for DeleteObjectsOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("DeleteResult", self) s.content_with_ns("DeleteResult", XMLNS_S3, self) } } impl Serialize for GetBucketAccelerateConfigurationOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("AccelerateConfiguration", self) s.content_with_ns("AccelerateConfiguration", XMLNS_S3, self) } } impl Serialize for GetBucketAclOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("AccessControlPolicy", self) s.content_with_ns("AccessControlPolicy", XMLNS_S3, self) } } Loading @@ -976,7 +978,7 @@ impl<'xml> Deserialize<'xml> for GetBucketAclOutput { impl Serialize for GetBucketCorsOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("CORSConfiguration", self) s.content_with_ns("CORSConfiguration", XMLNS_S3, self) } } Loading @@ -988,13 +990,13 @@ impl<'xml> Deserialize<'xml> for GetBucketCorsOutput { impl Serialize for GetBucketLifecycleConfigurationOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("LifecycleConfiguration", self) s.content_with_ns("LifecycleConfiguration", XMLNS_S3, self) } } impl Serialize for GetBucketLoggingOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("BucketLoggingStatus", self) s.content_with_ns("BucketLoggingStatus", XMLNS_S3, self) } } Loading @@ -1018,7 +1020,7 @@ impl<'xml> Deserialize<'xml> for GetBucketMetadataTableConfigurationResult { impl Serialize for GetBucketNotificationConfigurationOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("NotificationConfiguration", self) s.content_with_ns("NotificationConfiguration", XMLNS_S3, self) } } Loading @@ -1030,7 +1032,7 @@ impl<'xml> Deserialize<'xml> for GetBucketNotificationConfigurationOutput { impl Serialize for GetBucketRequestPaymentOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("RequestPaymentConfiguration", self) s.content_with_ns("RequestPaymentConfiguration", XMLNS_S3, self) } } Loading @@ -1042,7 +1044,7 @@ impl<'xml> Deserialize<'xml> for GetBucketRequestPaymentOutput { impl Serialize for GetBucketTaggingOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("Tagging", self) s.content_with_ns("Tagging", XMLNS_S3, self) } } Loading @@ -1054,7 +1056,7 @@ impl<'xml> Deserialize<'xml> for GetBucketTaggingOutput { impl Serialize for GetBucketVersioningOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("VersioningConfiguration", self) s.content_with_ns("VersioningConfiguration", XMLNS_S3, self) } } Loading @@ -1066,7 +1068,7 @@ impl<'xml> Deserialize<'xml> for GetBucketVersioningOutput { impl Serialize for GetBucketWebsiteOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("WebsiteConfiguration", self) s.content_with_ns("WebsiteConfiguration", XMLNS_S3, self) } } Loading @@ -1078,19 +1080,19 @@ impl<'xml> Deserialize<'xml> for GetBucketWebsiteOutput { impl Serialize for GetObjectAclOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("AccessControlPolicy", self) s.content_with_ns("AccessControlPolicy", XMLNS_S3, self) } } impl Serialize for GetObjectAttributesOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("GetObjectAttributesResponse", self) s.content_with_ns("GetObjectAttributesResponse", XMLNS_S3, self) } } impl Serialize for GetObjectTaggingOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("Tagging", self) s.content_with_ns("Tagging", XMLNS_S3, self) } } Loading Loading @@ -1120,7 +1122,7 @@ impl<'xml> Deserialize<'xml> for InventoryConfiguration { impl Serialize for ListBucketAnalyticsConfigurationsOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("ListBucketAnalyticsConfigurationResult", self) s.content_with_ns("ListBucketAnalyticsConfigurationResult", XMLNS_S3, self) } } Loading @@ -1132,7 +1134,7 @@ impl<'xml> Deserialize<'xml> for ListBucketAnalyticsConfigurationsOutput { impl Serialize for ListBucketIntelligentTieringConfigurationsOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("ListBucketIntelligentTieringConfigurationsOutput", self) s.content_with_ns("ListBucketIntelligentTieringConfigurationsOutput", XMLNS_S3, self) } } Loading @@ -1144,7 +1146,7 @@ impl<'xml> Deserialize<'xml> for ListBucketIntelligentTieringConfigurationsOutpu impl Serialize for ListBucketInventoryConfigurationsOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("ListInventoryConfigurationsResult", self) s.content_with_ns("ListInventoryConfigurationsResult", XMLNS_S3, self) } } Loading @@ -1156,7 +1158,7 @@ impl<'xml> Deserialize<'xml> for ListBucketInventoryConfigurationsOutput { impl Serialize for ListBucketMetricsConfigurationsOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("ListMetricsConfigurationsResult", self) s.content_with_ns("ListMetricsConfigurationsResult", XMLNS_S3, self) } } Loading @@ -1168,7 +1170,7 @@ impl<'xml> Deserialize<'xml> for ListBucketMetricsConfigurationsOutput { impl Serialize for ListBucketsOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("ListAllMyBucketsResult", self) s.content_with_ns("ListAllMyBucketsResult", XMLNS_S3, self) } } Loading @@ -1180,31 +1182,31 @@ impl<'xml> Deserialize<'xml> for ListBucketsOutput { impl Serialize for ListMultipartUploadsOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("ListMultipartUploadsResult", self) s.content_with_ns("ListMultipartUploadsResult", XMLNS_S3, self) } } impl Serialize for ListObjectVersionsOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("ListVersionsResult", self) s.content_with_ns("ListVersionsResult", XMLNS_S3, self) } } impl Serialize for ListObjectsOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("ListBucketResult", self) s.content_with_ns("ListBucketResult", XMLNS_S3, self) } } impl Serialize for ListObjectsV2Output { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("ListBucketResult", self) s.content_with_ns("ListBucketResult", XMLNS_S3, self) } } impl Serialize for ListPartsOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("ListPartsResult", self) s.content_with_ns("ListPartsResult", XMLNS_S3, self) } } Loading crates/s3s/src/xml/mod.rs +7 −19 Original line number Diff line number Diff line Loading @@ -11,19 +11,16 @@ mod generated; mod manually { use super::*; use quick_xml::events::BytesEnd; use quick_xml::events::BytesStart; use quick_xml::events::Event; use crate::dto::BucketLocationConstraint; use crate::dto::GetBucketLocationOutput; impl Serialize for GetBucketLocationOutput { fn serialize<W: std::io::Write>(&self, s: &mut Serializer<W>) -> SerResult { let xmlns = "http://s3.amazonaws.com/doc/2006-03-01/"; if let Some(location_constraint) = &self.location_constraint { s.content("LocationConstraint", location_constraint)?; s.content_with_ns("LocationConstraint", xmlns, location_constraint)?; } else { s.content("LocationConstraint", "")?; s.content_with_ns("LocationConstraint", xmlns, "")?; } Ok(()) } Loading Loading @@ -53,9 +50,10 @@ mod manually { impl Serialize for AssumeRoleOutput { fn serialize<W: std::io::Write>(&self, s: &mut Serializer<W>) -> SerResult { s.event(start_with_ns("AssumeRoleResponse", "https://sts.amazonaws.com/doc/2011-06-15/"))?; s.content("AssumeRoleResult", self)?; s.event(end("AssumeRoleResponse"))?; let xmlns = "https://sts.amazonaws.com/doc/2011-06-15/"; s.element_with_ns("AssumeRoleResponse", xmlns, |s| { s.content("AssumeRoleResult", self) // })?; Ok(()) } } Loading @@ -67,14 +65,4 @@ mod manually { }) } } fn start_with_ns<'a>(name: &'a str, ns: &'a str) -> Event<'a> { let mut e = BytesStart::new(name); e.push_attribute(("xmlns", ns)); Event::Start(e) } fn end(name: &str) -> Event<'_> { Event::End(BytesEnd::new(name)) } } crates/s3s/src/xml/ser.rs +16 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,12 @@ impl<W: Write> Serializer<W> { self.event(end(name)) } pub fn element_with_ns(&mut self, name: &str, xmlns: &str, f: impl FnOnce(&mut Self) -> SerResult) -> SerResult { self.event(start_with_ns(name, xmlns))?; f(self)?; self.event(end(name)) } /// Serializes a type /// /// # Errors Loading @@ -74,6 +80,10 @@ impl<W: Write> Serializer<W> { self.element(name, |s| val.serialize_content(s)) } pub fn content_with_ns<T: SerializeContent + ?Sized>(&mut self, name: &str, xmlns: &str, val: &T) -> SerResult { self.element_with_ns(name, xmlns, |s| val.serialize_content(s)) } /// Serializes a flattened `list` /// /// # Errors Loading Loading @@ -174,6 +184,12 @@ fn start(name: &str) -> Event<'_> { Event::Start(BytesStart::new(name)) } fn start_with_ns<'a>(name: &'a str, xmlns: &'a str) -> Event<'a> { let mut e = BytesStart::new(name); e.push_attribute(("xmlns", xmlns)); Event::Start(e) } /// end event fn end(name: &str) -> Event<'_> { Event::End(BytesEnd::new(name)) Loading Loading
codegen/src/v1/ops.rs +4 −0 Original line number Diff line number Diff line Loading @@ -121,6 +121,10 @@ pub fn is_op_input(name: &str, ops: &Operations) -> bool { name.strip_suffix("Input").is_some_and(|x| ops.contains_key(x)) } pub fn is_op_output(name: &str, ops: &Operations) -> bool { name.strip_suffix("Output").is_some_and(|x| ops.contains_key(x)) } pub fn codegen(ops: &Operations, rust_types: &RustTypes) { declare_codegen!(); Loading
codegen/src/v1/xml.rs +9 −1 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ use super::rust; use super::rust::default_value_literal; use crate::declare_codegen; use crate::v1::ops::is_op_output; use std::collections::{BTreeMap, BTreeSet, VecDeque}; use std::ops::Not; Loading Loading @@ -58,6 +59,9 @@ pub fn codegen(ops: &Operations, rust_types: &RustTypes) { } g!(); g!("const XMLNS_S3: &str = \"http://s3.amazonaws.com/doc/2006-03-01/\";"); g!(); codegen_xml_serde(ops, rust_types, &root_type_names); codegen_xml_serde_content(ops, rust_types, &field_type_names); } Loading Loading @@ -223,7 +227,11 @@ fn codegen_xml_serde(ops: &Operations, rust_types: &RustTypes, root_type_names: g!("impl Serialize for {} {{", ty.name); g!("fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult {{"); if is_op_output(&ty.name, ops) { g!("s.content_with_ns(\"{xml_name}\", XMLNS_S3, self)"); } else { g!("s.content(\"{xml_name}\", self)"); } g!("}}"); g!("}}"); Loading
crates/s3s/src/xml/generated.rs +28 −26 Original line number Diff line number Diff line Loading @@ -806,6 +806,8 @@ use std::io::Write; // SerializeContent: Years // DeserializeContent: Years const XMLNS_S3: &str = "http://s3.amazonaws.com/doc/2006-03-01/"; impl Serialize for AccelerateConfiguration { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("AccelerateConfiguration", self) Loading Loading @@ -880,7 +882,7 @@ impl<'xml> Deserialize<'xml> for CORSConfiguration { impl Serialize for CompleteMultipartUploadOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("CompleteMultipartUploadResult", self) s.content_with_ns("CompleteMultipartUploadResult", XMLNS_S3, self) } } Loading Loading @@ -934,7 +936,7 @@ impl<'xml> Deserialize<'xml> for CreateBucketConfiguration { impl Serialize for CreateMultipartUploadOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("InitiateMultipartUploadResult", self) s.content_with_ns("InitiateMultipartUploadResult", XMLNS_S3, self) } } Loading @@ -952,19 +954,19 @@ impl<'xml> Deserialize<'xml> for Delete { impl Serialize for DeleteObjectsOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("DeleteResult", self) s.content_with_ns("DeleteResult", XMLNS_S3, self) } } impl Serialize for GetBucketAccelerateConfigurationOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("AccelerateConfiguration", self) s.content_with_ns("AccelerateConfiguration", XMLNS_S3, self) } } impl Serialize for GetBucketAclOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("AccessControlPolicy", self) s.content_with_ns("AccessControlPolicy", XMLNS_S3, self) } } Loading @@ -976,7 +978,7 @@ impl<'xml> Deserialize<'xml> for GetBucketAclOutput { impl Serialize for GetBucketCorsOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("CORSConfiguration", self) s.content_with_ns("CORSConfiguration", XMLNS_S3, self) } } Loading @@ -988,13 +990,13 @@ impl<'xml> Deserialize<'xml> for GetBucketCorsOutput { impl Serialize for GetBucketLifecycleConfigurationOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("LifecycleConfiguration", self) s.content_with_ns("LifecycleConfiguration", XMLNS_S3, self) } } impl Serialize for GetBucketLoggingOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("BucketLoggingStatus", self) s.content_with_ns("BucketLoggingStatus", XMLNS_S3, self) } } Loading @@ -1018,7 +1020,7 @@ impl<'xml> Deserialize<'xml> for GetBucketMetadataTableConfigurationResult { impl Serialize for GetBucketNotificationConfigurationOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("NotificationConfiguration", self) s.content_with_ns("NotificationConfiguration", XMLNS_S3, self) } } Loading @@ -1030,7 +1032,7 @@ impl<'xml> Deserialize<'xml> for GetBucketNotificationConfigurationOutput { impl Serialize for GetBucketRequestPaymentOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("RequestPaymentConfiguration", self) s.content_with_ns("RequestPaymentConfiguration", XMLNS_S3, self) } } Loading @@ -1042,7 +1044,7 @@ impl<'xml> Deserialize<'xml> for GetBucketRequestPaymentOutput { impl Serialize for GetBucketTaggingOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("Tagging", self) s.content_with_ns("Tagging", XMLNS_S3, self) } } Loading @@ -1054,7 +1056,7 @@ impl<'xml> Deserialize<'xml> for GetBucketTaggingOutput { impl Serialize for GetBucketVersioningOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("VersioningConfiguration", self) s.content_with_ns("VersioningConfiguration", XMLNS_S3, self) } } Loading @@ -1066,7 +1068,7 @@ impl<'xml> Deserialize<'xml> for GetBucketVersioningOutput { impl Serialize for GetBucketWebsiteOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("WebsiteConfiguration", self) s.content_with_ns("WebsiteConfiguration", XMLNS_S3, self) } } Loading @@ -1078,19 +1080,19 @@ impl<'xml> Deserialize<'xml> for GetBucketWebsiteOutput { impl Serialize for GetObjectAclOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("AccessControlPolicy", self) s.content_with_ns("AccessControlPolicy", XMLNS_S3, self) } } impl Serialize for GetObjectAttributesOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("GetObjectAttributesResponse", self) s.content_with_ns("GetObjectAttributesResponse", XMLNS_S3, self) } } impl Serialize for GetObjectTaggingOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("Tagging", self) s.content_with_ns("Tagging", XMLNS_S3, self) } } Loading Loading @@ -1120,7 +1122,7 @@ impl<'xml> Deserialize<'xml> for InventoryConfiguration { impl Serialize for ListBucketAnalyticsConfigurationsOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("ListBucketAnalyticsConfigurationResult", self) s.content_with_ns("ListBucketAnalyticsConfigurationResult", XMLNS_S3, self) } } Loading @@ -1132,7 +1134,7 @@ impl<'xml> Deserialize<'xml> for ListBucketAnalyticsConfigurationsOutput { impl Serialize for ListBucketIntelligentTieringConfigurationsOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("ListBucketIntelligentTieringConfigurationsOutput", self) s.content_with_ns("ListBucketIntelligentTieringConfigurationsOutput", XMLNS_S3, self) } } Loading @@ -1144,7 +1146,7 @@ impl<'xml> Deserialize<'xml> for ListBucketIntelligentTieringConfigurationsOutpu impl Serialize for ListBucketInventoryConfigurationsOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("ListInventoryConfigurationsResult", self) s.content_with_ns("ListInventoryConfigurationsResult", XMLNS_S3, self) } } Loading @@ -1156,7 +1158,7 @@ impl<'xml> Deserialize<'xml> for ListBucketInventoryConfigurationsOutput { impl Serialize for ListBucketMetricsConfigurationsOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("ListMetricsConfigurationsResult", self) s.content_with_ns("ListMetricsConfigurationsResult", XMLNS_S3, self) } } Loading @@ -1168,7 +1170,7 @@ impl<'xml> Deserialize<'xml> for ListBucketMetricsConfigurationsOutput { impl Serialize for ListBucketsOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("ListAllMyBucketsResult", self) s.content_with_ns("ListAllMyBucketsResult", XMLNS_S3, self) } } Loading @@ -1180,31 +1182,31 @@ impl<'xml> Deserialize<'xml> for ListBucketsOutput { impl Serialize for ListMultipartUploadsOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("ListMultipartUploadsResult", self) s.content_with_ns("ListMultipartUploadsResult", XMLNS_S3, self) } } impl Serialize for ListObjectVersionsOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("ListVersionsResult", self) s.content_with_ns("ListVersionsResult", XMLNS_S3, self) } } impl Serialize for ListObjectsOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("ListBucketResult", self) s.content_with_ns("ListBucketResult", XMLNS_S3, self) } } impl Serialize for ListObjectsV2Output { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("ListBucketResult", self) s.content_with_ns("ListBucketResult", XMLNS_S3, self) } } impl Serialize for ListPartsOutput { fn serialize<W: Write>(&self, s: &mut Serializer<W>) -> SerResult { s.content("ListPartsResult", self) s.content_with_ns("ListPartsResult", XMLNS_S3, self) } } Loading
crates/s3s/src/xml/mod.rs +7 −19 Original line number Diff line number Diff line Loading @@ -11,19 +11,16 @@ mod generated; mod manually { use super::*; use quick_xml::events::BytesEnd; use quick_xml::events::BytesStart; use quick_xml::events::Event; use crate::dto::BucketLocationConstraint; use crate::dto::GetBucketLocationOutput; impl Serialize for GetBucketLocationOutput { fn serialize<W: std::io::Write>(&self, s: &mut Serializer<W>) -> SerResult { let xmlns = "http://s3.amazonaws.com/doc/2006-03-01/"; if let Some(location_constraint) = &self.location_constraint { s.content("LocationConstraint", location_constraint)?; s.content_with_ns("LocationConstraint", xmlns, location_constraint)?; } else { s.content("LocationConstraint", "")?; s.content_with_ns("LocationConstraint", xmlns, "")?; } Ok(()) } Loading Loading @@ -53,9 +50,10 @@ mod manually { impl Serialize for AssumeRoleOutput { fn serialize<W: std::io::Write>(&self, s: &mut Serializer<W>) -> SerResult { s.event(start_with_ns("AssumeRoleResponse", "https://sts.amazonaws.com/doc/2011-06-15/"))?; s.content("AssumeRoleResult", self)?; s.event(end("AssumeRoleResponse"))?; let xmlns = "https://sts.amazonaws.com/doc/2011-06-15/"; s.element_with_ns("AssumeRoleResponse", xmlns, |s| { s.content("AssumeRoleResult", self) // })?; Ok(()) } } Loading @@ -67,14 +65,4 @@ mod manually { }) } } fn start_with_ns<'a>(name: &'a str, ns: &'a str) -> Event<'a> { let mut e = BytesStart::new(name); e.push_attribute(("xmlns", ns)); Event::Start(e) } fn end(name: &str) -> Event<'_> { Event::End(BytesEnd::new(name)) } }
crates/s3s/src/xml/ser.rs +16 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,12 @@ impl<W: Write> Serializer<W> { self.event(end(name)) } pub fn element_with_ns(&mut self, name: &str, xmlns: &str, f: impl FnOnce(&mut Self) -> SerResult) -> SerResult { self.event(start_with_ns(name, xmlns))?; f(self)?; self.event(end(name)) } /// Serializes a type /// /// # Errors Loading @@ -74,6 +80,10 @@ impl<W: Write> Serializer<W> { self.element(name, |s| val.serialize_content(s)) } pub fn content_with_ns<T: SerializeContent + ?Sized>(&mut self, name: &str, xmlns: &str, val: &T) -> SerResult { self.element_with_ns(name, xmlns, |s| val.serialize_content(s)) } /// Serializes a flattened `list` /// /// # Errors Loading Loading @@ -174,6 +184,12 @@ fn start(name: &str) -> Event<'_> { Event::Start(BytesStart::new(name)) } fn start_with_ns<'a>(name: &'a str, xmlns: &'a str) -> Event<'a> { let mut e = BytesStart::new(name); e.push_attribute(("xmlns", xmlns)); Event::Start(e) } /// end event fn end(name: &str) -> Event<'_> { Event::End(BytesEnd::new(name)) Loading