askama_markdown_cmark/
lib.rs1pub mod filters {
2 use std::fmt;
3
4 use pulldown_cmark;
5
6 #[askama::filter_fn]
26 pub fn markdown_cmark<T: fmt::Display>(
27 s: T,
28 _: &dyn askama::Values,
29 ) -> ::askama::Result<String> {
30 let text = &s.to_string();
31 let parser = pulldown_cmark::Parser::new_ext(text, pulldown_cmark::Options::all());
32
33 let mut buf = String::new();
34 pulldown_cmark::html::push_html(&mut buf, parser);
35
36 Ok(buf)
37 }
38}
39
40#[cfg(test)]
41mod tests {
42 use super::filters;
43 use askama::Template;
44
45 #[derive(Template)]
46 #[template(source = "{{ s | markdown_cmark }}", ext = "md")]
47 struct ExampleCmark<'a> {
48 s: &'a str,
49 }
50
51 #[test]
52 fn markdown() {
53 let t = ExampleCmark {
54 s: "*Simple* ipsum",
55 };
56
57 assert_eq!(t.render().unwrap(), "<p><em>Simple</em> ipsum</p>\n");
58 }
59}