Loading crates/s3s-codegen/src/ops.rs +2 −0 Original line number Diff line number Diff line Loading @@ -516,6 +516,8 @@ fn codegen_xml_de(ops: &Operations, rust_types: &RustTypes, g: &mut Codegen) { g.ln(f!("impl<'xml> xml::Deserialize<'xml> for {} {{", ty.name)); g.ln("fn deserialize(d: &mut xml::Deserializer<'xml>) -> xml::DeResult<Self> {"); assert!(ty.xml_name.is_none()); // canary for <https://github.com/Nugine/s3s/issues/2> let xml_name = xml_name.or(ty.xml_name.as_deref()).unwrap_or(&ty.name); g.ln(f!("d.named_element(\"{xml_name}\", |d|d.content())")); Loading crates/s3s/Cargo.toml +1 −0 Original line number Diff line number Diff line Loading @@ -35,4 +35,5 @@ transform-stream = "0.2.0" urlencoding = "2.1.2" [dev-dependencies] const-str = "0.5.3" tokio = { version = "1.24.1", features = ["full"] } crates/s3s/src/lib.rs +5 −0 Original line number Diff line number Diff line Loading @@ -21,3 +21,8 @@ pub mod service; pub use self::auth::*; pub use self::error::*; pub use self::ops::S3; #[cfg(test)] mod tests { mod xml; } crates/s3s/src/tests/xml.rs 0 → 100644 +42 −0 Original line number Diff line number Diff line // TODO: auto-generated tests use crate::xml; use const_str::concat; const DATA_DIR: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/src/tests/xml"); fn read(path: &str) -> Vec<u8> { std::fs::read(path).unwrap() } fn deserialize<T>(input: &[u8]) -> xml::DeResult<T> where T: for<'xml> xml::Deserialize<'xml>, { let mut d = xml::Deserializer::new(input); let ans = T::deserialize(&mut d)?; d.expect_eof()?; Ok(ans) } /// See <https://github.com/Nugine/s3s/issues/2> #[test] fn d001() { use crate::dto::CompletedMultipartUpload; let input = read(concat!(DATA_DIR, "/d001.xml")); let ans = deserialize::<CompletedMultipartUpload>(&input).unwrap(); let parts = ans.parts.as_deref().unwrap(); assert_eq!(parts.len(), 3); assert_eq!(parts[0].part_number, 1); assert_eq!(parts[0].e_tag.as_deref(), Some("\"a54357aff0632cce46d942af68356b38\"")); assert_eq!(parts[1].part_number, 2); assert_eq!(parts[1].e_tag.as_deref(), Some("\"0c78aef83f66abc1fa1e8477f296d394\"")); assert_eq!(parts[2].part_number, 3); assert_eq!(parts[2].e_tag.as_deref(), Some("\"acbd18db4cc2f85cedef654fccc4a4d8\"")); } crates/s3s/src/tests/xml/d001.xml 0 → 100644 +15 −0 Original line number Diff line number Diff line <CompleteMultipartUpload> <Part> <PartNumber>1</PartNumber> <ETag>"a54357aff0632cce46d942af68356b38"</ETag> </Part> <Part> <PartNumber>2</PartNumber> <ETag>"0c78aef83f66abc1fa1e8477f296d394"</ETag> </Part> <Part> <PartNumber>3</PartNumber> <ETag>"acbd18db4cc2f85cedef654fccc4a4d8"</ETag> </Part> </CompleteMultipartUpload> No newline at end of file Loading
crates/s3s-codegen/src/ops.rs +2 −0 Original line number Diff line number Diff line Loading @@ -516,6 +516,8 @@ fn codegen_xml_de(ops: &Operations, rust_types: &RustTypes, g: &mut Codegen) { g.ln(f!("impl<'xml> xml::Deserialize<'xml> for {} {{", ty.name)); g.ln("fn deserialize(d: &mut xml::Deserializer<'xml>) -> xml::DeResult<Self> {"); assert!(ty.xml_name.is_none()); // canary for <https://github.com/Nugine/s3s/issues/2> let xml_name = xml_name.or(ty.xml_name.as_deref()).unwrap_or(&ty.name); g.ln(f!("d.named_element(\"{xml_name}\", |d|d.content())")); Loading
crates/s3s/Cargo.toml +1 −0 Original line number Diff line number Diff line Loading @@ -35,4 +35,5 @@ transform-stream = "0.2.0" urlencoding = "2.1.2" [dev-dependencies] const-str = "0.5.3" tokio = { version = "1.24.1", features = ["full"] }
crates/s3s/src/lib.rs +5 −0 Original line number Diff line number Diff line Loading @@ -21,3 +21,8 @@ pub mod service; pub use self::auth::*; pub use self::error::*; pub use self::ops::S3; #[cfg(test)] mod tests { mod xml; }
crates/s3s/src/tests/xml.rs 0 → 100644 +42 −0 Original line number Diff line number Diff line // TODO: auto-generated tests use crate::xml; use const_str::concat; const DATA_DIR: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/src/tests/xml"); fn read(path: &str) -> Vec<u8> { std::fs::read(path).unwrap() } fn deserialize<T>(input: &[u8]) -> xml::DeResult<T> where T: for<'xml> xml::Deserialize<'xml>, { let mut d = xml::Deserializer::new(input); let ans = T::deserialize(&mut d)?; d.expect_eof()?; Ok(ans) } /// See <https://github.com/Nugine/s3s/issues/2> #[test] fn d001() { use crate::dto::CompletedMultipartUpload; let input = read(concat!(DATA_DIR, "/d001.xml")); let ans = deserialize::<CompletedMultipartUpload>(&input).unwrap(); let parts = ans.parts.as_deref().unwrap(); assert_eq!(parts.len(), 3); assert_eq!(parts[0].part_number, 1); assert_eq!(parts[0].e_tag.as_deref(), Some("\"a54357aff0632cce46d942af68356b38\"")); assert_eq!(parts[1].part_number, 2); assert_eq!(parts[1].e_tag.as_deref(), Some("\"0c78aef83f66abc1fa1e8477f296d394\"")); assert_eq!(parts[2].part_number, 3); assert_eq!(parts[2].e_tag.as_deref(), Some("\"acbd18db4cc2f85cedef654fccc4a4d8\"")); }
crates/s3s/src/tests/xml/d001.xml 0 → 100644 +15 −0 Original line number Diff line number Diff line <CompleteMultipartUpload> <Part> <PartNumber>1</PartNumber> <ETag>"a54357aff0632cce46d942af68356b38"</ETag> </Part> <Part> <PartNumber>2</PartNumber> <ETag>"0c78aef83f66abc1fa1e8477f296d394"</ETag> </Part> <Part> <PartNumber>3</PartNumber> <ETag>"acbd18db4cc2f85cedef654fccc4a4d8"</ETag> </Part> </CompleteMultipartUpload> No newline at end of file