#![allow(unused_assignments)]
extern crate proc_macro;
use syn::{parse_macro_input, AttributeArgs, DataStruct, ItemFn};
use crate::macros::mybatis_html_impl::impl_macro_mybatis_html;
use crate::macros::mybatis_plus_impl::{impl_mybatis_plus, impl_mybatis_plus_driver};
use crate::macros::mybatis_sql_impl::impl_macro_mybatis_sql;
use crate::macros::py_sql_impl::impl_macro_py_sql;
use crate::proc_macro::TokenStream;
mod element_from;
mod func;
mod html_loader;
mod parser;
mod py_sql;
mod string_util;
use std::collections::HashMap;
mod macros;
mod util;
#[proc_macro_derive(MybatisPlus)]
pub fn macro_derive(input: TokenStream) -> TokenStream {
let ast = syn::parse(input).unwrap();
let stream = impl_mybatis_plus_driver(&ast, "", "", &HashMap::new());
#[cfg(feature = "debug_mode")]
{
println!("............gen impl MybatisPlus:\n {}", stream);
println!("............gen impl MybatisPlus end............");
}
stream
}
#[proc_macro_attribute]
pub fn mybatis_sql(args: TokenStream, func: TokenStream) -> TokenStream {
let args = parse_macro_input!(args as AttributeArgs);
let target_fn: ItemFn = syn::parse(func).unwrap();
let stream = impl_macro_mybatis_sql(&target_fn, &args);
#[cfg(feature = "debug_mode")]
{
println!("............gen macro sql:\n {}", stream);
println!("............gen macro sql end............");
}
stream
}
#[proc_macro_attribute]
pub fn py_sql(args: TokenStream, func: TokenStream) -> TokenStream {
let args = parse_macro_input!(args as AttributeArgs);
let target_fn: ItemFn = syn::parse(func).unwrap();
let stream = impl_macro_py_sql(&target_fn, &args);
#[cfg(feature = "debug_mode")]
{
println!("............gen macro py_sql :\n {}", stream);
println!("............gen macro py_sql end............");
}
stream
}
#[proc_macro_attribute]
pub fn mybatis_html(args: TokenStream, func: TokenStream) -> TokenStream {
let args = parse_macro_input!(args as AttributeArgs);
let target_fn: ItemFn = syn::parse(func).unwrap();
let stream = impl_macro_mybatis_html(&target_fn, &args);
#[cfg(feature = "debug_mode")]
{
println!("............gen macro html_sql :\n {}", stream);
println!("............gen macro html_sql end............");
}
stream
}
#[proc_macro_attribute]
pub fn mybatis_plus(args: TokenStream, input: TokenStream) -> TokenStream {
let stream = impl_mybatis_plus(args, input);
#[cfg(feature = "debug_mode")]
{
println!("............gen impl CRUDTable:\n {}", stream);
println!("............gen impl CRUDTable end............");
}
return stream;
}
#[proc_macro_attribute]
pub fn expr(args: TokenStream, func: TokenStream) -> TokenStream {
let target_fn: ItemFn = syn::parse(func).unwrap();
let stream = func::impl_fn(
"",
&target_fn.sig.ident.to_string(),
&args.to_string(),
true,
true,
&[],
)
.into();
#[cfg(feature = "debug_mode")]
{
println!("............gen macro rexpr:\n {}", stream);
println!("............gen macro rexpr end............");
}
stream
}
#[proc_macro_attribute]
pub fn html(args: TokenStream, func: TokenStream) -> TokenStream {
let args = parse_macro_input!(args as AttributeArgs);
let target_fn = syn::parse(func).unwrap();
let stream = parser::impl_fn_html(&target_fn, &args);
#[cfg(feature = "debug_mode")]
{
println!("............gen macro xml:\n {}", stream);
println!("............gen macro xml end............");
}
stream
}
#[proc_macro_attribute]
pub fn py(args: TokenStream, func: TokenStream) -> TokenStream {
let args = parse_macro_input!(args as AttributeArgs);
let target_fn = syn::parse(func).unwrap();
let stream = parser::impl_fn_py(&target_fn, &args);
#[cfg(feature = "debug_mode")]
{
println!("............gen pysql_fn:\n {}", stream);
println!("............gen pysql_fn end............");
}
stream
}