aboutsummaryrefslogtreecommitdiffstats
path: root/askama_shared/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--askama_shared/src/lib.rs41
1 files changed, 39 insertions, 2 deletions
diff --git a/askama_shared/src/lib.rs b/askama_shared/src/lib.rs
index 64d8d25..f940021 100644
--- a/askama_shared/src/lib.rs
+++ b/askama_shared/src/lib.rs
@@ -7,10 +7,47 @@ extern crate serde_derive;
extern crate serde_json;
extern crate toml;
+use std::env;
+use std::fs;
+use std::path::PathBuf;
+
+mod escaping;
+mod error;
+
pub use error::{Error, Result};
pub use escaping::MarkupDisplay;
-mod error;
pub mod filters;
pub mod path;
-mod escaping;
+struct Config {
+ dirs: Vec<PathBuf>,
+}
+
+impl Config {
+ fn new() -> Config {
+ let root = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
+ let filename = root.join(CONFIG_FILE_NAME);
+
+ let default = vec![root.join("templates")];
+ let dirs = if filename.exists() {
+ let config_str = fs::read_to_string(&filename)
+ .expect(&format!("unable to read {}", filename.to_str().unwrap()));
+ let raw: RawConfig = toml::from_str(&config_str)
+ .expect(&format!("invalid TOML in {}", filename.to_str().unwrap()));
+ raw.dirs
+ .map(|dirs| dirs.into_iter().map(|dir| root.join(dir)).collect())
+ .unwrap_or_else(|| default)
+ } else {
+ default
+ };
+
+ Config { dirs }
+ }
+}
+
+#[derive(Deserialize)]
+struct RawConfig {
+ dirs: Option<Vec<String>>,
+}
+
+static CONFIG_FILE_NAME: &str = "askama.toml";