aboutsummaryrefslogtreecommitdiffstats
path: root/askama_shared/src/input.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--askama_shared/src/input.rs86
1 files changed, 43 insertions, 43 deletions
diff --git a/askama_shared/src/input.rs b/askama_shared/src/input.rs
index 25382cb..e3b64da 100644
--- a/askama_shared/src/input.rs
+++ b/askama_shared/src/input.rs
@@ -1,6 +1,5 @@
use path;
-use std::borrow::Cow;
use std::path::{Path, PathBuf};
use syn;
@@ -8,26 +7,26 @@ use syn;
pub struct TemplateInput<'a> {
pub ast: &'a syn::DeriveInput,
- pub meta: TemplateMeta<'a>,
+ pub meta: TemplateMeta,
pub path: PathBuf,
- pub source: Cow<'a, str>,
+ pub source: String,
}
impl<'a> TemplateInput<'a> {
pub fn new(ast: &'a syn::DeriveInput) -> TemplateInput<'a> {
let meta = TemplateMeta::new(ast);
let (path, source) = match meta.source {
- Source::Source(s) => {
+ Source::Source(ref s) => {
let path = match meta.ext {
- Some(v) => PathBuf::from(format!("_.{}", v)),
+ Some(ref v) => PathBuf::from(format!("_.{}", v)),
None => PathBuf::new(),
};
- (path, Cow::Borrowed(s))
+ (path, s.clone())
},
- Source::Path(s) => {
- let path = path::find_template_from_path(s, None);
+ Source::Path(ref s) => {
+ let path = path::find_template_from_path(&s, None);
let src = path::get_template_source(&path);
- (path, Cow::Owned(src))
+ (path, src)
},
};
TemplateInput { ast, meta, path, source }
@@ -35,16 +34,18 @@ impl<'a> TemplateInput<'a> {
}
// Holds metadata for the template, based on the `template()` attribute.
-pub struct TemplateMeta<'a> {
- source: Source<'a>,
+pub struct TemplateMeta {
+ source: Source,
pub print: Print,
pub escaping: EscapeMode,
- pub ext: Option<&'a str>,
+ pub ext: Option<String>,
}
-impl<'a> TemplateMeta<'a> {
- fn new(ast: &'a syn::DeriveInput) -> TemplateMeta<'a> {
- let attr = ast.attrs.iter().find(|a| a.name() == "template");
+impl TemplateMeta {
+ fn new(ast: &syn::DeriveInput) -> TemplateMeta {
+ let attr = ast.attrs
+ .iter()
+ .find(|a| a.interpret_meta().unwrap().name() == "template");
if attr.is_none() {
let msg = format!("'template' attribute not found on struct '{}'",
ast.ident.as_ref());
@@ -56,39 +57,39 @@ impl<'a> TemplateMeta<'a> {
let mut print = Print::None;
let mut escaping = None;
let mut ext = None;
- if let syn::MetaItem::List(_, ref inner) = attr.value {
- for nm_item in inner {
- if let syn::NestedMetaItem::MetaItem(ref item) = *nm_item {
- if let syn::MetaItem::NameValue(ref key, ref val) = *item {
- match key.as_ref() {
- "path" => if let syn::Lit::Str(ref s, _) = *val {
+ if let syn::Meta::List(ref inner) = attr.interpret_meta().unwrap() {
+ for nm_item in inner.nested.iter() {
+ if let syn::NestedMeta::Meta(ref item) = *nm_item {
+ if let syn::Meta::NameValue(ref pair) = *item {
+ match pair.ident.as_ref() {
+ "path" => if let syn::Lit::Str(ref s) = pair.lit {
if source.is_some() {
panic!("must specify 'source' or 'path', not both");
}
- source = Some(Source::Path(s.as_ref()));
+ source = Some(Source::Path(s.value()));
} else {
panic!("template path must be string literal");
},
- "source" => if let syn::Lit::Str(ref s, _) = *val {
+ "source" => if let syn::Lit::Str(ref s) = pair.lit {
if source.is_some() {
panic!("must specify 'source' or 'path', not both");
}
- source = Some(Source::Source(s.as_ref()));
+ source = Some(Source::Source(s.value()));
} else {
panic!("template source must be string literal");
},
- "print" => if let syn::Lit::Str(ref s, _) = *val {
- print = (s.as_ref() as &str).into();
+ "print" => if let syn::Lit::Str(ref s) = pair.lit {
+ print = s.value().into();
} else {
panic!("print value must be string literal");
},
- "escape" => if let syn::Lit::Str(ref s, _) = *val {
- escaping = Some((s.as_ref() as &str).into());
+ "escape" => if let syn::Lit::Str(ref s) = pair.lit {
+ escaping = Some(s.value().into());
} else {
panic!("escape value must be string literal");
},
- "ext" => if let syn::Lit::Str(ref s, _) = *val {
- ext = Some((s.as_ref() as &str).into());
+ "ext" => if let syn::Lit::Str(ref s) = pair.lit {
+ ext = Some(s.value());
} else {
panic!("ext value must be string literal");
},
@@ -113,10 +114,9 @@ impl<'a> TemplateMeta<'a> {
Some(m) => m,
None => {
let ext = match source {
- Source::Path(p) => {
- Path::new(p).extension().map(|s| s.to_str().unwrap()).unwrap_or("")
- },
- Source::Source(_) => ext.unwrap(), // Already panicked if None
+ Source::Path(ref p) =>
+ Path::new(p).extension().map(|s| s.to_str().unwrap()).unwrap_or(""),
+ Source::Source(_) => ext.as_ref().unwrap(), // Already panicked if None
};
if HTML_EXTENSIONS.contains(&ext) {
EscapeMode::Html
@@ -129,9 +129,9 @@ impl<'a> TemplateMeta<'a> {
}
}
-enum Source<'a> {
- Path(&'a str),
- Source(&'a str),
+enum Source {
+ Path(String),
+ Source(String),
}
#[derive(PartialEq)]
@@ -140,10 +140,10 @@ pub enum EscapeMode {
None,
}
-impl<'a> From<&'a str> for EscapeMode {
- fn from(s: &'a str) -> EscapeMode {
+impl From<String> for EscapeMode {
+ fn from(s: String) -> EscapeMode {
use self::EscapeMode::*;
- match s {
+ match s.as_ref() {
"html" => Html,
"none" => None,
v => panic!("invalid value for escape option: {}", v),
@@ -159,10 +159,10 @@ pub enum Print {
None,
}
-impl<'a> From<&'a str> for Print {
- fn from(s: &'a str) -> Print {
+impl From<String> for Print {
+ fn from(s: String) -> Print {
use self::Print::*;
- match s {
+ match s.as_ref() {
"all" => All,
"ast" => Ast,
"code" => Code,