Skip to content

Commit fc497ff

Browse files
committed
✨ Allow passing custom XML emitter\n\ncloses #221
1 parent 42538f0 commit fc497ff

File tree

3 files changed

+60
-1
lines changed

3 files changed

+60
-1
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,4 @@ serde = { version = "1.0", features = ["derive"] }
1818
simple_logger = "2.1"
1919
docmatic = "0.1"
2020
rstest = "0.12"
21+
indoc = "2.0.6"

src/ser/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ impl<W> Serializer<W>
8787
where
8888
W: Write,
8989
{
90-
fn new_from_writer(writer: EventWriter<W>) -> Self {
90+
pub fn new_from_writer(writer: EventWriter<W>) -> Self {
9191
Self {
9292
writer,
9393
root: true,

tests/api.rs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
pub use rstest::{fixture, rstest};
2+
use simple_logger::SimpleLogger;
3+
4+
#[fixture]
5+
fn logger() {
6+
let _ = SimpleLogger::new().init();
7+
}
8+
9+
mod given_custom_event_writer {
10+
use super::*;
11+
use indoc::indoc;
12+
use serde::Serialize;
13+
use xml::EmitterConfig;
14+
15+
#[derive(Debug, Serialize)]
16+
struct Document {
17+
content: Content,
18+
}
19+
20+
#[derive(Debug, Serialize)]
21+
struct Content {
22+
text: String,
23+
}
24+
25+
#[fixture]
26+
fn document() -> Document {
27+
Document {
28+
content: Content {
29+
text: "content text".into(),
30+
},
31+
}
32+
}
33+
34+
#[rstest]
35+
fn should_accept_custom_event_writer(_logger: (), document: Document) {
36+
let mut output = Vec::new();
37+
let writer = EmitterConfig::new()
38+
.perform_indent(true)
39+
.create_writer(&mut output);
40+
let mut s = serde_xml_rs::ser::Serializer::new_from_writer(writer);
41+
42+
document.serialize(&mut s).unwrap();
43+
let actual = String::from_utf8(output).unwrap();
44+
45+
assert_eq!(
46+
actual,
47+
indoc!(
48+
r#"
49+
<?xml version="1.0" encoding="UTF-8"?>
50+
<Document>
51+
<content>
52+
<text>content text</text>
53+
</content>
54+
</Document>"#
55+
)
56+
);
57+
}
58+
}

0 commit comments

Comments
 (0)