diff options
Diffstat (limited to '')
-rw-r--r-- | askama_derive/src/generator.rs | 21 |
1 files changed, 4 insertions, 17 deletions
diff --git a/askama_derive/src/generator.rs b/askama_derive/src/generator.rs index 5d16f2c..6c6e1e7 100644 --- a/askama_derive/src/generator.rs +++ b/askama_derive/src/generator.rs @@ -61,9 +61,10 @@ impl<'a> Generator<'a> { if ctx.extends.is_none() { self.define_trait(ctx); } else { - let parent_type = get_parent_type(self.input.ast) - .expect("expected field '_parent' in extending template struct"); - self.deref_to_parent(parent_type); + match self.input.parent { + Some(ty) => self.deref_to_parent(ty), + None => panic!("expected field '_parent' in extending template struct"), + } } let trait_nodes = if ctx.extends.is_none() { @@ -930,20 +931,6 @@ where } } -fn get_parent_type(ast: &syn::DeriveInput) -> Option<&syn::Type> { - match ast.data { - syn::Data::Struct(syn::DataStruct { - fields: syn::Fields::Named(ref fields), - .. - }) => fields.named.iter().filter_map(|f| { - f.ident - .as_ref() - .and_then(|name| if name == "_parent" { Some(&f.ty) } else { None }) - }), - _ => panic!("derive(Template) only works for struct items"), - }.next() -} - #[derive(Clone, PartialEq)] enum AstLevel { Top, |