diff options
author | mash <mashedcode@users.noreply.github.com> | 2018-06-29 15:36:12 +0000 |
---|---|---|
committer | Dirkjan Ochtman <dirkjan@ochtman.nl> | 2018-07-10 14:29:29 +0100 |
commit | 953df2b3f3afe5c4a357a4353a4c9e8657b96114 (patch) | |
tree | ec2a6faa1ca3df6509151cb35657d2260b099c4b /askama_shared/src | |
parent | 9d2c6115dc7e4ec2c24ce30581d3bf00f787e441 (diff) | |
download | askama-953df2b3f3afe5c4a357a4353a4c9e8657b96114.tar.gz askama-953df2b3f3afe5c4a357a4353a4c9e8657b96114.tar.bz2 askama-953df2b3f3afe5c4a357a4353a4c9e8657b96114.zip |
Add partial support for multiple template dirs
Diffstat (limited to '')
-rw-r--r-- | askama_shared/src/lib.rs | 4 | ||||
-rw-r--r-- | askama_shared/src/path.rs | 32 |
2 files changed, 35 insertions, 1 deletions
diff --git a/askama_shared/src/lib.rs b/askama_shared/src/lib.rs index 9427dff..64d8d25 100644 --- a/askama_shared/src/lib.rs +++ b/askama_shared/src/lib.rs @@ -1,9 +1,11 @@ #![cfg_attr(feature = "cargo-clippy", allow(unused_parens))] -#[cfg(feature = "serde-json")] extern crate serde; +#[macro_use] +extern crate serde_derive; #[cfg(feature = "serde-json")] extern crate serde_json; +extern crate toml; pub use error::{Error, Result}; pub use escaping::MarkupDisplay; diff --git a/askama_shared/src/path.rs b/askama_shared/src/path.rs index 8b92250..37fb261 100644 --- a/askama_shared/src/path.rs +++ b/askama_shared/src/path.rs @@ -3,6 +3,8 @@ use std::fs::File; use std::io::Read; use std::path::{Path, PathBuf}; +use toml; + pub fn get_template_source(tpl_path: &Path) -> String { let mut path = template_dir(); path.push(tpl_path); @@ -52,6 +54,36 @@ pub fn template_dir() -> PathBuf { path } +#[derive(Deserialize)] +struct Config { + dirs: Option<Vec<String>>, +} + +pub fn template_dirs() -> Vec<PathBuf> { + let root = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); + let askama = root.join("askama.toml"); + let default = vec![root.join("templates")]; + if askama.exists() { + let mut contents = String::new(); + File::open(askama).unwrap().read_to_string(&mut contents).unwrap(); + let config: Config = toml::from_str(&contents).unwrap(); + if let Some(dirs) = config.dirs { + let paths: Vec<PathBuf> = dirs.into_iter().map(|directory| { + root.join(directory) + }).collect(); + if paths.len() > 0 { + paths + } else { + default + } + } else { + default + } + } else { + vec![root.join("templates")] + } +} + #[cfg(test)] mod tests { use super::Path; |