Skip to content

Commit cc1958f

Browse files
committed
Remove write_serializable_content from element writer
1 parent d30e8b2 commit cc1958f

File tree

1 file changed

+67
-139
lines changed

1 file changed

+67
-139
lines changed

src/writer.rs

+67-139
Original file line numberDiff line numberDiff line change
@@ -271,13 +271,14 @@ impl<W: Write> Writer<W> {
271271
pub fn write_serializable<T: Serialize>(
272272
&mut self,
273273
content: &T,
274+
tag_name: Option<&str>,
274275
) -> std::result::Result<(), DeError> {
275276
use crate::se::Serializer;
276277

277278
self.write_indent()?;
278279
let indent = self.indent.clone();
279280
let mut fmt = ToFmtWrite(self.get_mut());
280-
let mut serializer = Serializer::new(&mut fmt);
281+
let mut serializer = Serializer::with_root(&mut fmt, Some(tag_name))?;
281282

282283
if let Some(indent) = indent {
283284
serializer.indent(
@@ -370,39 +371,7 @@ impl<'a, W: Write> ElementWriter<'a, W> {
370371
.write_event(Event::End(self.start_tag.to_end()))?;
371372
Ok(self.writer)
372373
}
373-
374-
/// Serialize an arbitrary value inside the current element
375-
#[cfg(feature = "serialize")]
376-
pub fn write_serializable_content<T: Serialize>(
377-
self,
378-
content: &T,
379-
) -> std::result::Result<&'a mut Writer<W>, DeError> {
380-
use crate::se::Serializer;
381-
382-
self.writer
383-
.write_event(Event::Start(self.start_tag.borrow()))?;
384-
self.writer.write_indent()?;
385-
386-
let indent = self.writer.indent.clone();
387-
let fmt = &mut ToFmtWrite(self.writer.get_mut());
388-
let mut serializer = Serializer::new(fmt);
389-
390-
if let Some(indent) = indent {
391-
serializer.indent(
392-
indent.indent_char as char,
393-
indent.indent_size,
394-
indent.current_indent_len,
395-
);
396-
}
397-
398-
content.serialize(serializer)?;
399-
400-
self.writer
401-
.write_event(Event::End(self.start_tag.to_end()))?;
402-
Ok(self.writer)
403-
}
404374
}
405-
406375
#[cfg(feature = "serialize")]
407376
struct ToFmtWrite<T>(pub T);
408377

@@ -628,6 +597,71 @@ mod indentation {
628597
);
629598
}
630599

600+
#[cfg(feature = "serialize")]
601+
#[test]
602+
fn serializable() {
603+
#[derive(Serialize)]
604+
struct Foo {
605+
#[serde(rename = "@attribute")]
606+
attribute: &'static str,
607+
608+
element: Bar,
609+
list: Vec<&'static str>,
610+
611+
#[serde(rename = "$text")]
612+
text: &'static str,
613+
614+
val: String,
615+
}
616+
617+
#[derive(Serialize)]
618+
struct Bar {
619+
baz: usize,
620+
bat: usize,
621+
}
622+
623+
let mut buffer = Vec::new();
624+
let mut writer = Writer::new_with_indent(&mut buffer, b' ', 4);
625+
626+
let content = Foo {
627+
attribute: "attribute",
628+
element: Bar { baz: 42, bat: 43 },
629+
list: vec!["first element", "second element"],
630+
text: "text",
631+
val: "foo".to_owned(),
632+
};
633+
634+
let start = BytesStart::new("paired")
635+
.with_attributes(vec![("attr1", "value1"), ("attr2", "value2")].into_iter());
636+
let end = start.to_end();
637+
638+
writer
639+
.write_event(Event::Start(start.clone()))
640+
.expect("write start tag failed");
641+
writer
642+
.write_serializable(&content, "foo_element")
643+
.expect("write serializable inner contents failed");
644+
writer
645+
.write_event(Event::End(end))
646+
.expect("write end tag failed");
647+
648+
assert_eq!(
649+
std::str::from_utf8(&buffer).unwrap(),
650+
r#"<paired attr1="value1" attr2="value2">
651+
<foo_element attribute="attribute">
652+
<element>
653+
<baz>42</baz>
654+
<bat>43</bat>
655+
</element>
656+
<list>first element</list>
657+
<list>second element</list>
658+
text
659+
<val>foo</val>
660+
</foo_element>
661+
</paired>"#
662+
);
663+
}
664+
631665
#[test]
632666
fn element_writer_empty() {
633667
let mut buffer = Vec::new();
@@ -704,110 +738,4 @@ mod indentation {
704738
</outer>"#
705739
);
706740
}
707-
708-
#[cfg(feature = "serialize")]
709-
mod write_serializable {
710-
use super::*;
711-
712-
#[derive(Serialize)]
713-
struct Foo {
714-
#[serde(rename = "@attribute")]
715-
attribute: &'static str,
716-
717-
element: Bar,
718-
list: Vec<&'static str>,
719-
720-
#[serde(rename = "$text")]
721-
text: &'static str,
722-
723-
val: String,
724-
}
725-
726-
#[derive(Serialize)]
727-
struct Bar {
728-
baz: usize,
729-
bat: usize,
730-
}
731-
732-
#[cfg(feature = "serialize")]
733-
#[test]
734-
fn serializable() {
735-
let mut buffer = Vec::new();
736-
let mut writer = Writer::new_with_indent(&mut buffer, b' ', 4);
737-
738-
let content = Foo {
739-
attribute: "attribute",
740-
element: Bar { baz: 42, bat: 43 },
741-
list: vec!["first element", "second element"],
742-
text: "text",
743-
val: "foo".to_owned(),
744-
};
745-
746-
let start = BytesStart::new("paired")
747-
.with_attributes(vec![("attr1", "value1"), ("attr2", "value2")].into_iter());
748-
let end = start.to_end();
749-
750-
writer
751-
.write_event(Event::Start(start.clone()))
752-
.expect("write start tag failed");
753-
writer
754-
.write_serializable(&content)
755-
.expect("write serializable inner contents failed");
756-
writer
757-
.write_event(Event::End(end))
758-
.expect("write end tag failed");
759-
760-
assert_eq!(
761-
std::str::from_utf8(&buffer).unwrap(),
762-
r#"<paired attr1="value1" attr2="value2">
763-
<Foo attribute="attribute">
764-
<element>
765-
<baz>42</baz>
766-
<bat>43</bat>
767-
</element>
768-
<list>first element</list>
769-
<list>second element</list>
770-
text
771-
<val>foo</val>
772-
</Foo>
773-
</paired>"#
774-
);
775-
}
776-
777-
#[test]
778-
fn element_writer_serializable() {
779-
let mut buffer = Vec::new();
780-
let mut writer = Writer::new_with_indent(&mut buffer, b' ', 4);
781-
let content = Foo {
782-
attribute: "attribute",
783-
element: Bar { baz: 42, bat: 43 },
784-
list: vec!["first element", "second element"],
785-
text: "text",
786-
val: "foo".to_string(),
787-
};
788-
789-
writer
790-
.create_element("paired")
791-
.with_attribute(("attr1", "value1"))
792-
.with_attribute(("attr2", "value2"))
793-
.write_serializable_content(&content)
794-
.expect("failure");
795-
796-
assert_eq!(
797-
std::str::from_utf8(&buffer).unwrap(),
798-
r#"<paired attr1="value1" attr2="value2">
799-
<Foo attribute="attribute">
800-
<element>
801-
<baz>42</baz>
802-
<bat>43</bat>
803-
</element>
804-
<list>first element</list>
805-
<list>second element</list>
806-
text
807-
<val>foo</val>
808-
</Foo>
809-
</paired>"#
810-
);
811-
}
812-
}
813741
}

0 commit comments

Comments
 (0)