From 670dbe4aecf4280ef254cafa7d97d1890946b3e5 Mon Sep 17 00:00:00 2001 From: Dirkjan Ochtman Date: Sun, 6 Aug 2017 14:42:24 +0200 Subject: Add function to find template relative to another template's path --- askama_derive/src/path.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/askama_derive/src/path.rs b/askama_derive/src/path.rs index aac6557..728c7ec 100644 --- a/askama_derive/src/path.rs +++ b/askama_derive/src/path.rs @@ -9,6 +9,30 @@ fn template_dir() -> PathBuf { path } +pub fn find_template_from_path<'a>(path: &str, start_at: Option<&str>) -> PathBuf { + let root = template_dir(); + match start_at { + Some(rel) => { + let mut fs_rel_path = root.clone(); + fs_rel_path.push(rel); + fs_rel_path = fs_rel_path.with_file_name(path); + if fs_rel_path.exists() { + return fs_rel_path.strip_prefix(&root).unwrap().to_owned(); + } + }, + None => {}, + } + + let mut fs_abs_path = root.clone(); + let path = Path::new(path); + fs_abs_path.push(Path::new(path)); + if fs_abs_path.exists() { + path.to_owned() + } else { + panic!(format!("template '{:?}' not found", path.to_str())); + } +} + pub fn get_template_source(tpl_file: &str) -> String { let mut path = template_dir(); path.push(Path::new(tpl_file)); -- cgit