use askama::Template; use crate::state::State; #[derive(Template)] #[template(path = "index.html")] pub struct Index<'a> { pub state: &'a State, } #[derive(Template)] #[template(path = "repo_folder.html")] pub struct RepoFolder<'a> { pub repo: &'a git2::Repository, pub repo_path: &'a str, pub title: &'a str, pub rel_path: &'a str, pub tree: git2::Tree<'a>, } mod filters { pub fn from_utf8_lossy(utf8: &[u8]) -> ::askama::Result { Ok(String::from_utf8_lossy(utf8).into_owned()) } pub fn markdown(s: &str) -> ::askama::Result { use pulldown_cmark::{Parser, Options, html}; let mut options = Options::empty(); options.insert(Options::ENABLE_STRIKETHROUGH); options.insert(Options::ENABLE_SMART_PUNCTUATION); let parser = Parser::new_ext(s, options); let mut result = String::new(); html::push_html(&mut result, parser); // TODO mark as safe automatically Ok(result) } }