diff options
author | Dirkjan Ochtman <dirkjan@ochtman.nl> | 2019-01-10 17:19:28 +0100 |
---|---|---|
committer | Juan Aguilar <mhpoin@gmail.com> | 2019-01-12 09:16:20 +0100 |
commit | 467f4ade19fa34983de7e6f6d81c6b4d5ff140fe (patch) | |
tree | 3fdbb337ca41d5c6cb2448af15792857d1ed7c2b /askama_derive/src/input.rs | |
parent | a2bdf3b138c22e057a75bfe3b0a96f946327adc8 (diff) | |
download | askama-467f4ade19fa34983de7e6f6d81c6b4d5ff140fe.tar.gz askama-467f4ade19fa34983de7e6f6d81c6b4d5ff140fe.tar.bz2 askama-467f4ade19fa34983de7e6f6d81c6b4d5ff140fe.zip |
Specify a trait that handles the output format's escaping
Diffstat (limited to 'askama_derive/src/input.rs')
-rw-r--r-- | askama_derive/src/input.rs | 48 |
1 files changed, 15 insertions, 33 deletions
diff --git a/askama_derive/src/input.rs b/askama_derive/src/input.rs index c23d30f..b584298 100644 --- a/askama_derive/src/input.rs +++ b/askama_derive/src/input.rs @@ -15,7 +15,7 @@ pub struct TemplateInput<'a> { pub syntax: &'a Syntax<'a>, pub source: Source, pub print: Print, - pub escaping: EscapeMode, + pub escaping: &'a str, pub ext: Option<String>, pub parent: Option<&'a syn::Type>, pub path: PathBuf, @@ -91,7 +91,7 @@ impl<'a> TemplateInput<'a> { } "escape" => { if let syn::Lit::Str(ref s) = pair.lit { - escaping = Some(s.value().into()); + escaping = Some(s.value()); } else { panic!("escape value must be string literal"); } @@ -165,12 +165,24 @@ impl<'a> TemplateInput<'a> { }, ); + let escaping = escaping.unwrap_or_else(|| { + path.extension() + .map(|s| s.to_str().unwrap()) + .unwrap_or("none") + .to_string() + }); + let escaping = match escaping.as_str() { + "html" | "htm" | "xml" => "::askama::Html", + "txt" | "none" => "::askama::Text", + val => panic!("unknown value '{}' for escape mode", val), + }; + TemplateInput { ast, config, source, print, - escaping: escaping.unwrap_or_else(|| EscapeMode::from_path(&path)), + escaping, ext, parent, path, @@ -185,34 +197,6 @@ pub enum Source { } #[derive(PartialEq)] -pub enum EscapeMode { - Html, - None, -} - -impl From<String> for EscapeMode { - fn from(s: String) -> EscapeMode { - use self::EscapeMode::*; - match s.as_ref() { - "html" => Html, - "none" => None, - v => panic!("invalid value for escape option: {}", v), - } - } -} - -impl EscapeMode { - fn from_path(path: &PathBuf) -> EscapeMode { - let extension = path.extension().map(|s| s.to_str().unwrap()).unwrap_or(""); - if HTML_EXTENSIONS.contains(&extension) { - EscapeMode::Html - } else { - EscapeMode::None - } - } -} - -#[derive(PartialEq)] pub enum Print { All, Ast, @@ -232,5 +216,3 @@ impl From<String> for Print { } } } - -const HTML_EXTENSIONS: [&str; 3] = ["html", "htm", "xml"]; |