#![allow(warnings)]
extern crate proc_macro;
use meta::MetaFields;
use proc_macro::TokenStream;
use quote::quote;
use syn;
#[proc_macro_derive(MetaFields)]
pub fn derive_meta(input: TokenStream) -> TokenStream {
let ast = syn::parse(input).unwrap();
impl_meta(&ast)
}
fn impl_meta(ast: &syn::DeriveInput) -> TokenStream {
let name = &ast.ident;
let gen = quote! {
impl MetaFields for #name {
fn update_fields(&mut self, user_id: Uuid) {
self.updu = Option::from(user_id);
self.ver = Option::from(self.ver.unwrap() + 1);
self.updt = Option::from(Utc::now().naive_local());
}
fn init_fields(&mut self, user_id: Uuid) {
self.uuid = Uuid::new_v4();
self.updu = Option::from(user_id);
self.ver = Option::from(0);
self.updt = Option::from(Utc::now().naive_local());
self.rstatus = Option::from(RStatus::Active);
}
}
};
gen.into()
}