diesel_codegen 0.16.1

Custom derive and procedural macros for Diesel
Documentation
use quote::Tokens;
use syn;

use model::Model;

pub fn derive_identifiable(item: syn::DeriveInput) -> Tokens {
    let model = t!(Model::from_item(&item, "Identifiable"));
    let table_name = model.table_name();
    let struct_ty = &model.ty;
    let lifetimes = model.generics.lifetimes;
    let primary_key_names = model.primary_key_names;
    let fields = model.attrs.as_slice();
    for pk in &primary_key_names {
        if !fields.iter().any(|f| f.field_name.as_ref() == Some(pk)) {
            panic!("Could not find a field named `{}` on `{}`", pk, &model.name);
        }
    }

    quote!(impl_Identifiable! {
        (
            table_name = #table_name,
            primary_key_names = (#(#primary_key_names),*),
            struct_ty = #struct_ty,
            lifetimes = (#(#lifetimes),*),
        ),
        fields = [#(#fields)*],
    })
}