From 141d11ad38f6d4b8c7b27ff5a0879c87c16fb20d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxime=20=E2=80=9Cpep=E2=80=9D=20Buquet?= Date: Sun, 10 Nov 2019 01:01:34 +0100 Subject: [PATCH] minidom: Don't prepend xml prelude in writer. Add new API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maxime “pep” Buquet --- minidom-rs/CHANGELOG.md | 2 ++ minidom-rs/src/element.rs | 10 ++++++++++ minidom-rs/src/tests.rs | 22 +++++++++++++++------- tokio-xmpp/Cargo.toml | 1 - tokio-xmpp/src/xmpp_codec.rs | 3 +-- xmpp-parsers/src/xhtml.rs | 2 +- 6 files changed, 29 insertions(+), 11 deletions(-) diff --git a/minidom-rs/CHANGELOG.md b/minidom-rs/CHANGELOG.md index b1dec9c..9cef50c 100644 --- a/minidom-rs/CHANGELOG.md +++ b/minidom-rs/CHANGELOG.md @@ -1,4 +1,6 @@ Version XXX, released YYY: + * Breaking + `Element.write_to` doesn't prepand xml prelude anymore. Use `write_to_decl`. * Changes * Update edition to 2018 * Add NSChoice enum to allow comparing NSs differently diff --git a/minidom-rs/src/element.rs b/minidom-rs/src/element.rs index f2d814a..a9da253 100644 --- a/minidom-rs/src/element.rs +++ b/minidom-rs/src/element.rs @@ -414,8 +414,18 @@ impl Element { self.to_writer(&mut EventWriter::new(writer)) } + /// Output a document to a `Writer`. + pub fn write_to_decl(&self, writer: &mut W) -> Result<()> { + self.to_writer_decl(&mut EventWriter::new(writer)) + } + /// Output the document to quick-xml `Writer` pub fn to_writer(&self, writer: &mut EventWriter) -> Result<()> { + self.write_to_inner(writer) + } + + /// Output the document to quick-xml `Writer` + pub fn to_writer_decl(&self, writer: &mut EventWriter) -> Result<()> { writer.write_event(Event::Decl(BytesDecl::new(b"1.0", Some(b"utf-8"), None)))?; self.write_to_inner(writer) } diff --git a/minidom-rs/src/tests.rs b/minidom-rs/src/tests.rs index 22e257a..8798833 100644 --- a/minidom-rs/src/tests.rs +++ b/minidom-rs/src/tests.rs @@ -2,7 +2,7 @@ use crate::element::Element; use quick_xml::Reader; -const TEST_STRING: &'static str = r#"meownya"#; +const TEST_STRING: &'static str = r#"meownya"#; fn build_test_tree() -> Element { let mut root = Element::builder("root") @@ -24,7 +24,7 @@ fn build_test_tree() -> Element { } #[cfg(feature = "comments")] -const COMMENT_TEST_STRING: &'static str = r#""#; +const COMMENT_TEST_STRING: &'static str = r#""#; #[cfg(feature = "comments")] fn build_comment_test_tree() -> Element { @@ -57,6 +57,17 @@ fn writer_works() { assert_eq!(String::from_utf8(writer).unwrap(), TEST_STRING); } +#[test] +fn writer_with_decl_works() { + let root = build_test_tree(); + let mut writer = Vec::new(); + { + root.write_to_decl(&mut writer).unwrap(); + } + let result = format!(r#"{}"#, TEST_STRING); + assert_eq!(String::from_utf8(writer).unwrap(), result); +} + #[test] fn writer_escapes_attributes() { let root = Element::builder("root").attr("a", "\"Air\" quotes").build(); @@ -66,7 +77,7 @@ fn writer_escapes_attributes() { } assert_eq!( String::from_utf8(writer).unwrap(), - r#""# + r#""# ); } @@ -77,10 +88,7 @@ fn writer_escapes_text() { { root.write_to(&mut writer).unwrap(); } - assert_eq!( - String::from_utf8(writer).unwrap(), - r#"<3"# - ); + assert_eq!(String::from_utf8(writer).unwrap(), r#"<3"#); } #[test] diff --git a/tokio-xmpp/Cargo.toml b/tokio-xmpp/Cargo.toml index f0a88e9..3e6e936 100644 --- a/tokio-xmpp/Cargo.toml +++ b/tokio-xmpp/Cargo.toml @@ -23,6 +23,5 @@ trust-dns-resolver = "0.12" trust-dns-proto = "0.8" tokio-io = "0.1" tokio-tls = "0.2" -quick-xml = "0.17" xml5ever = "0.15" xmpp-parsers = "0.16" diff --git a/tokio-xmpp/src/xmpp_codec.rs b/tokio-xmpp/src/xmpp_codec.rs index 3923406..236ff75 100644 --- a/tokio-xmpp/src/xmpp_codec.rs +++ b/tokio-xmpp/src/xmpp_codec.rs @@ -2,7 +2,6 @@ use crate::{ParseError, ParserError}; use bytes::{BufMut, BytesMut}; -use quick_xml::Writer as EventWriter; use std; use std::borrow::Cow; use std::cell::RefCell; @@ -302,7 +301,7 @@ impl Encoder for XMPPCodec { } Packet::Stanza(stanza) => { stanza - .write_to_inner(&mut EventWriter::new(WriteBytes::new(dst))) + .write_to(&mut WriteBytes::new(dst)) .and_then(|_| { // println!(">> {:?}", dst); Ok(()) diff --git a/xmpp-parsers/src/xhtml.rs b/xmpp-parsers/src/xhtml.rs index 6049a5f..6eacbc9 100644 --- a/xmpp-parsers/src/xhtml.rs +++ b/xmpp-parsers/src/xhtml.rs @@ -607,7 +607,7 @@ mod tests { assert_eq!(html, "Hello world!"); let elem = Element::from(parsed2); - assert_eq!(String::from(&elem), "Hello world!"); + assert_eq!(String::from(&elem), "Hello world!"); } #[test]