diff options
Diffstat (limited to 'askama_shared')
| -rw-r--r-- | askama_shared/src/lib.rs | 42 | 
1 files changed, 21 insertions, 21 deletions
| diff --git a/askama_shared/src/lib.rs b/askama_shared/src/lib.rs index 0b9ceb6..92b5d28 100644 --- a/askama_shared/src/lib.rs +++ b/askama_shared/src/lib.rs @@ -32,7 +32,7 @@ pub struct Config<'a> {  impl<'a> Config<'a> {      pub fn new(s: &str) -> Config {          let root = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); -        let default = vec![root.join("templates")]; +        let default_dirs = vec![root.join("templates")];          let mut syntaxes = BTreeMap::new();          syntaxes.insert(DEFAULT_SYNTAX_NAME.to_string(), Syntax::default()); @@ -40,11 +40,12 @@ impl<'a> Config<'a> {          let raw: RawConfig =              toml::from_str(&s).expect(&format!("invalid TOML in {}", CONFIG_FILE_NAME)); -        let dirs = match raw.general { -            Some(General { dirs: Some(dirs) }) => { -                dirs.into_iter().map(|dir| root.join(dir)).collect() -            } -            Some(General { dirs: None }) | None => default, +        let (dirs, default_syntax) = match raw.general { +            Some(General { dirs, default_syntax }) => ( +                dirs.map_or(default_dirs, |v| v.into_iter().map(|dir| root.join(dir)).collect()), +                default_syntax.unwrap_or(DEFAULT_SYNTAX_NAME), +            ), +            None => (default_dirs, DEFAULT_SYNTAX_NAME),          };          if let Some(raw_syntaxes) = raw.syntax { @@ -57,15 +58,9 @@ impl<'a> Config<'a> {              }          } -        let default_syntax = if let Some(default_syntax) = raw.default_syntax { -            if syntaxes.contains_key(default_syntax) { -                default_syntax -            } else { -                panic!("default syntax \"{}\" not found", default_syntax) -            } -        } else { -            DEFAULT_SYNTAX_NAME -        }; +        if !syntaxes.contains_key(default_syntax) { +            panic!("default syntax \"{}\" not found", default_syntax) +        }          Config {              dirs, @@ -157,14 +152,16 @@ impl<'a> From<RawSyntax<'a>> for Syntax<'a> {  #[derive(Deserialize)]  struct RawConfig<'d> { -    general: Option<General>, +    #[serde(borrow)] +    general: Option<General<'d>>,      syntax: Option<Vec<RawSyntax<'d>>>, -    default_syntax: Option<&'d str>,  }  #[derive(Deserialize)] -struct General { -    dirs: Option<Vec<String>>, +struct General<'a> { +    #[serde(borrow)] +    dirs: Option<Vec<&'a str>>, +    default_syntax: Option<&'a str>,  }  #[derive(Deserialize)] @@ -257,6 +254,7 @@ mod tests {      #[test]      fn add_syntax() {          let raw_config = r#" +        [general]          default_syntax = "foo"          [[syntax]] @@ -292,10 +290,11 @@ mod tests {      #[test]      fn add_syntax_two() {          let raw_config = r#" -        default_syntax = "foo" -          syntax = [{ name = "foo", block_start = "{<" },                    { name = "bar", expr_start = "{!" } ] + +        [general] +        default_syntax = "foo"          "#;          let default_syntax = Syntax::default(); @@ -344,6 +343,7 @@ mod tests {      #[test]      fn is_not_exist_default_syntax() {          let raw_config = r#" +        [general]          default_syntax = "foo"          "#; | 
