extern crate proc_macro;
use syn::{AttributeArgs, Data, ItemFn, parse_macro_input, ReturnType};
use crate::proc_macro::TokenStream;
mod crud_enable;
mod sql;
mod py_sql;
#[proc_macro_derive(CRUDEnable)]
pub fn hello_macro_derive(input: TokenStream) -> TokenStream {
println!("............gen impl CRUDEnable start............");
let ast = syn::parse(input).unwrap();
let stream = crud_enable::impl_macro(&ast);
println!("............gen impl CRUDEnable:\n {}", format!("{}", stream));
println!("............gen impl CRUDEnable end............");
stream
}
#[proc_macro_attribute]
pub fn sql(args: TokenStream, this: TokenStream) -> TokenStream {
println!("............gen macro sql start............");
let args = parse_macro_input!(args as AttributeArgs);
let target_fn: ItemFn = syn::parse(this).unwrap();
let stream = sql::impl_macro_sql(&target_fn, &args);
println!("............gen macro sql:\n {}", format!("{}", stream));
println!("............gen macro sql end............");
stream
}
#[proc_macro_attribute]
pub fn py_sql(args: TokenStream, this: TokenStream) -> TokenStream {
println!("............gen macro py_sql start............");
let args = parse_macro_input!(args as AttributeArgs);
let target_fn: ItemFn = syn::parse(this).unwrap();
let stream = py_sql::impl_macro_py_sql(&target_fn, &args);
println!("............gen macro py_sql :\n {}", format!("{}", stream));
println!("............gen macro py_sql end............");
stream
}