diff options
-rw-r--r-- | askama_shared/src/lib.rs | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/askama_shared/src/lib.rs b/askama_shared/src/lib.rs index ecf3d07..5913eb3 100644 --- a/askama_shared/src/lib.rs +++ b/askama_shared/src/lib.rs @@ -37,9 +37,15 @@ pub trait Template: fmt::Display { Ok(buf) } - /// Renders the template to the given `writer` buffer + /// Renders the template to the given `writer` fmt buffer fn render_into(&self, writer: &mut (impl std::fmt::Write + ?Sized)) -> Result<()>; + /// Renders the template to the given `writer` io buffer + #[inline] + fn write_into(&self, writer: &mut (impl std::io::Write + ?Sized)) -> std::io::Result<()> { + writer.write_fmt(format_args!("{}", self)) + } + /// The template's extension, if provided const EXTENSION: Option<&'static str>; @@ -57,9 +63,12 @@ pub trait DynTemplate { /// Helper method which allocates a new `String` and renders into it fn dyn_render(&self) -> Result<String>; - /// Renders the template to the given `writer` buffer + /// Renders the template to the given `writer` fmt buffer fn dyn_render_into(&self, writer: &mut dyn std::fmt::Write) -> Result<()>; + /// Renders the template to the given `writer` io buffer + fn dyn_write_into(&self, writer: &mut dyn std::io::Write) -> std::io::Result<()>; + /// Helper function to inspect the template's extension fn extension(&self) -> Option<&'static str>; @@ -79,6 +88,11 @@ impl<T: Template> DynTemplate for T { <Self as Template>::render_into(self, writer) } + #[inline] + fn dyn_write_into(&self, writer: &mut dyn std::io::Write) -> std::io::Result<()> { + writer.write_fmt(format_args!("{}", self)) + } + fn extension(&self) -> Option<&'static str> { Self::EXTENSION } @@ -627,5 +641,9 @@ mod tests { assert_eq!(test.to_string(), "test"); assert_eq!(format!("{}", test), "test"); + + let mut vec = Vec::new(); + test.dyn_write_into(&mut vec).unwrap(); + assert_eq!(vec, vec![b't', b'e', b's', b't']); } } |