python_comm_macros/
lib.rs

1//!
2//! macros for python-comm
3//!
4
5use {
6    chrono::{Duration, Utc},
7    proc_macro::TokenStream,
8    quote::quote,
9};
10
11mod afn;
12mod asm;
13mod lp;
14mod qa;
15
16// #[table(name="")]
17// #[column(auto="", key="", name="", type="")]
18//    auto=y => AUTO_INCREMENT
19//    key="" | PRIMARY | UNIQUE
20
21/// AsSqlModel
22#[proc_macro_derive(AsSqlModel, attributes(table, column))]
23pub fn as_sql_model(input: TokenStream) -> TokenStream {
24    asm::as_sql_model(input)
25}
26
27/// Create a local variable fname = "xxx" in fn xxx()
28///
29/// ## Bug
30///
31/// function with auto_func_name attribute, //! is not allowed internal!
32///
33#[proc_macro_attribute]
34pub fn auto_func_name(args: TokenStream, func: TokenStream) -> TokenStream {
35    afn::auto_func_name(args, func)
36}
37
38/// build time
39#[proc_macro]
40pub fn build_time(_input: TokenStream) -> TokenStream {
41    let now = (Utc::now() + Duration::hours(8))
42        .naive_utc()
43        .format("%Y-%m-%d %H:%M:%S")
44        .to_string();
45
46    TokenStream::from(quote!(#now))
47}
48
49#[proc_macro_derive(LimitPack)]
50pub fn limit_pack(input: TokenStream) -> TokenStream {
51    lp::limit_pack(input)
52}
53
54/// 包含 AsSqlModel 中的字段赋值部分, 在非 sql 中使用
55#[proc_macro_derive(QuickAssign)]
56pub fn quick_assign(input: TokenStream) -> TokenStream {
57    qa::quick_assign(input)
58}