From 8c89ea1d792540c5225078bd359652b0c4584b3d Mon Sep 17 00:00:00 2001 From: bouzuya Date: Wed, 11 Jan 2023 12:30:24 +0900 Subject: [PATCH] sitemaps: Add SitemapWriter::{start,end} --- sitemaps/src/writer.rs | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/sitemaps/src/writer.rs b/sitemaps/src/writer.rs index bbd9a6f1..bb1db2c3 100644 --- a/sitemaps/src/writer.rs +++ b/sitemaps/src/writer.rs @@ -21,12 +21,14 @@ type Result = std::result::Result; pub struct SitemapWriter(Writer); impl SitemapWriter { - pub fn new(inner: W) -> Result { + pub fn start(inner: W) -> Result { let mut writer = Writer::new(inner); writer.write_event(Event::Decl(BytesDecl::new("1.0", Some("UTF-8"), None)))?; - let mut elm = BytesStart::new("urlset"); - elm.push_attribute(("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9")); - writer.write_event(Event::Start(elm))?; + writer.write_event(Event::Start({ + let mut elm = BytesStart::new("urlset"); + elm.push_attribute(("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9")); + elm + }))?; Ok(Self(writer)) } @@ -39,9 +41,13 @@ impl SitemapWriter { Ok(()) } - pub fn into_inner(mut self) -> Result { + pub fn end(&mut self) -> Result<()> { self.0.write_event(Event::End(BytesEnd::new("urlset")))?; - Ok(self.0.into_inner()) + Ok(()) + } + + pub fn into_inner(self) -> W { + self.0.into_inner() } } @@ -54,9 +60,10 @@ mod tests { #[test] fn test() -> anyhow::Result<()> { - let mut writer = SitemapWriter::new(Cursor::new(Vec::new()))?; + let mut writer = SitemapWriter::start(Cursor::new(Vec::new()))?; writer.write("http://www.example.com/")?; - let result = writer.into_inner()?.into_inner(); + writer.end()?; + let actual = String::from_utf8(writer.into_inner().into_inner())?; let expected = concat!( r#""#, r#""#, @@ -65,7 +72,7 @@ mod tests { r#""#, r#""# ); - assert_eq!(result, expected.as_bytes()); + assert_eq!(actual, expected); Ok(()) }