askama_plus_html5ever/
lib.rs1#![forbid(unsafe_code)]
11#![deny(missing_docs)]
12
13use std::{fmt, io};
17
18use askama::Template;
19
20struct DisplayAdaptor<'a, T: Template>(&'a T);
21
22impl<T: Template> fmt::Display for DisplayAdaptor<'_, T> {
23 #[inline]
24 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
25 self.0.render_into(f).map_err(|_| fmt::Error)
26 }
27}
28
29#[inline]
34pub fn render(tmpl: &impl Template, dest: impl io::Write) -> Result<(), io::Error> {
35 html5ever_arena_dom::render(&DisplayAdaptor(tmpl), dest)
36}
37
38#[cfg(test)]
39mod tests {
40 use askama::Template;
41
42 #[test]
43 fn test_render_simple_invocation() {
44 #[derive(Template)]
45 #[template(ext = "html", source = "<EM>Test&{{index}}>!")]
46 struct TestTemplate {
47 index: u32,
48 }
49
50 let mut data = Vec::default();
51 super::render(&TestTemplate { index: 1 }, &mut data).expect("Rendered ok");
52 let data = std::str::from_utf8(&data).expect("Valid UTF-8");
53
54 assert_eq!(
55 data,
56 "<html><head></head><body><em>Test&1>!</em></body></html>"
57 );
58 }
59}