1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#![allow(unused_assignments)]
extern crate proc_macro;
extern crate rbatis_codegen;
use syn::{parse_macro_input, AttributeArgs, ItemFn};
use crate::macros::html_sql_impl::impl_macro_html_sql;
use crate::macros::py_sql_impl::impl_macro_py_sql;
use crate::macros::sql_impl::impl_macro_sql;
use crate::proc_macro::TokenStream;
mod macros;
mod util;
#[proc_macro_attribute]
pub fn 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_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")]
{
use rust_format::{Formatter, RustFmt};
let code = RustFmt::default().format_str(stream.to_string().replace("$crate","rbatis")).unwrap_or_else(|_e|stream.to_string());
println!(
"............gen macro py_sql :\n {}",
code
);
println!("............gen macro py_sql end............");
}
stream
}
#[proc_macro_attribute]
pub fn html_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_html_sql(&target_fn, &args);
#[cfg(feature = "debug_mode")]
{
use rust_format::{Formatter, RustFmt};
let code = RustFmt::default().format_str(stream.to_string().replace("$crate","rbatis")).unwrap_or_else(|_e|stream.to_string());
println!("............gen macro html_sql :\n {}", code);
println!("............gen macro html_sql end............");
}
stream
}
#[proc_macro_attribute]
pub fn rb_py(args: TokenStream, func: TokenStream) -> TokenStream {
rbatis_codegen::rb_py(args, func)
}
#[proc_macro_attribute]
pub fn rb_html(args: TokenStream, func: TokenStream) -> TokenStream {
rbatis_codegen::rb_html(args, func)
}