trimmer_derive 0.1.0

A derive macro that allows to expose rust structures to trimmer template.
Documentation
use syn;
use quote;


pub fn derive(ast: &syn::MacroInput, _field: &syn::Field) -> quote::Tokens {
    let name = &ast.ident;
    quote! {
        impl<'render> ::trimmer::Variable<'render> for #name {
            fn attr<'x>(&'x self,  attr: &str)
                -> Result<::trimmer::Var<'x, 'render>, ::trimmer::DataError>
                where 'render: 'x
            {
                self.0.attr(attr)
            }
            fn index<'x>(&'x self,
                key: &(::trimmer::Variable<'render> + 'render))
                -> Result<::trimmer::Var<'x, 'render>, ::trimmer::DataError>
                where 'render: 'x
            {
                self.0.index(key)
            }
            fn output(&self)
                -> Result<::trimmer::Output, ::trimmer::DataError>
            {
                self.0.output()
            }
            fn typename(&self) -> &'static str {
                return stringify!(#name);
            }
            fn as_str_key<'x>(&'x self)
                -> Result<&'x str, ::trimmer::DataError>
            {
                self.0.as_str_key()
            }
            fn as_int_key(&self) -> Result<usize, ::trimmer::DataError> {
                self.0.as_int_key()
            }
            fn as_bool(&self) -> Result<bool, ::trimmer::DataError> {
                self.0.as_bool()
            }
            fn as_number(&self)
                -> Result<::trimmer::Number, ::trimmer::DataError>
            {
                self.0.as_number()
            }
            fn as_comparable(&self)
                -> Result<::trimmer::Comparable, ::trimmer::DataError>
            {
                self.0.as_comparable()
            }

            fn iterate<'x>(&'x self)
                -> Result<Box<Iterator<Item=
                    ::trimmer::Var<'x, 'render>>+'x>,
                    ::trimmer::DataError>
                where 'render: 'x
            {
                self.0.iterate()
            }

            fn iterate_pairs<'x>(&'x self)
                -> Result<Box<Iterator<Item=(
                    ::trimmer::Var<'x, 'render>,
                    ::trimmer::Var<'x, 'render>
                    )>+'x>,
                    ::trimmer::DataError>
                where 'render: 'x
            {
                self.0.iterate_pairs()
            }
        }
    }
}