From c7cc34f3e956173eb9e03decaf08e0ea6ea28525 Mon Sep 17 00:00:00 2001 From: Dirkjan Ochtman Date: Tue, 10 Jul 2018 15:44:27 +0100 Subject: Move Config struct to askama_shared crate root --- askama_shared/src/lib.rs | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) (limited to 'askama_shared/src/lib.rs') 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, +} + +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>, +} + +static CONFIG_FILE_NAME: &str = "askama.toml"; -- cgit