sqlx_sqlhelper_proc_macros/
lib.rs

1use proc_macro::TokenStream;
2use syn::{parse_macro_input, ItemStruct};
3
4mod common_fields;
5mod sql_helper;
6
7pub(crate) const DEFAULT_ID_NAME: &str = "id";
8pub(crate) const DEFAULT_CREATE_TIME_NAME: &str = "create_time";
9pub(crate) const DEFAULT_UPDATE_TIME_NAME: &str = "update_time";
10
11/// 自动生成mysql数据库增删改查方法
12///
13/// 基于sqlx生成`find`、`list`、`delete`、`add`、`update`、`save_or_update`、`new`、`new_common`、`base_page`、`base_count`等方法。
14///
15///
16/// 需要在struct上下文中引入sqlx的db对象。
17///
18/// ```
19/// use super::db;
20/// ```
21///
22/// # Examples
23///
24/// ```
25/// #[derive(SqlHelper)]
26/// pub struct Person {
27///     #[id]
28///     pub id: i32,
29///     pub name: String,
30///     pub age: i32,
31///     pub weight: Option<i32>,
32///     #[create_time]
33///     pub create_time: NaiveDateTime,
34///     #[update_time]
35///     pub update_time: NaiveDateTime,
36/// }
37/// ```
38#[proc_macro_derive(SqlHelper, attributes(id, field_name, create_time, update_time))]
39pub fn derive_sql_helper(input: TokenStream) -> TokenStream {
40    let ast = parse_macro_input!(input as ItemStruct);
41    sql_helper::impl_sql_helper(&ast)
42}
43
44/// 自动实现公用`id`、`create_time`、`update_time`的字段。
45/// 
46/// 需要配合`SqlHelper`派生宏使用
47/// 
48/// # Examples
49///
50/// ```
51/// #[common_fields]
52/// #[derive(SqlHelper)]
53/// pub struct Person {
54///     pub name: String,
55///     pub age: i32,
56///     pub weight: Option<i32>,
57/// }
58/// ```
59#[proc_macro_attribute]
60pub fn common_fields(_attr: TokenStream, input: TokenStream) -> TokenStream {
61    let mut ast = parse_macro_input!(input as ItemStruct);
62    common_fields::impl_common_fields(&mut ast)
63}