1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
use std::io::Result; use std::io::Write; use crate::xml_escape::xml_escape; pub struct XmlWriter<W: Write> { pub inner: W, } impl<W: Write> XmlWriter<W> { pub fn new(inner: W) -> Self { XmlWriter { inner } } pub fn into_inner(self) -> W { self.inner } pub fn write_element_start(&mut self, tag: &str) -> Result<()> { write!(self.inner, "<{}", tag) } pub fn write_attribute(&mut self, key: &str, value: &str) -> Result<()> { write!(self.inner, r#" {}="{}""#, key, xml_escape(value)) } pub fn write_text(&mut self, content: &str) -> Result<()> { write!(self.inner, "{}", xml_escape(content)) } pub fn write_element_end_open(&mut self) -> Result<()> { write!(self.inner, ">") } pub fn write_flatten_text(&mut self, tag: &str, content: &str) -> Result<()> { self.write_element_start(tag)?; self.write_element_end_open()?; self.write_text(content)?; self.write_element_end_close(tag)?; Ok(()) } pub fn write_element_end_close(&mut self, tag: &str) -> Result<()> { write!(self.inner, "</{}>", tag) } pub fn write_element_end_empty(&mut self) -> Result<()> { write!(self.inner, "/>") } }