db_set_macros/
lib.rs

1use convert_case::{Case, Casing};
2use modules::{delete_query_builder, update_query_builder};
3use modules::{insert_query_builder, one_query_builder};
4use proc_macro::TokenStream;
5use quote::quote;
6use syn::{parse_macro_input, DeriveInput};
7
8mod common;
9mod modules;
10use modules::dbset;
11use modules::from_row;
12use modules::many_query_builder;
13
14use common::utils::{self};
15
16#[proc_macro_derive(DbSet, attributes(unique, dbset, relation, auto, key))]
17pub fn dbset_derive(input: TokenStream) -> TokenStream {
18    let input = parse_macro_input!(input as DeriveInput);
19
20    let struct_name = &input.ident;
21    let dbset_name = utils::get_dbset_name(&input);
22
23    let many_query_builder_impl = many_query_builder::get_query_builder(&input);
24    let one_query_builder_impl = one_query_builder::get_query_builder(&input);
25    let insert_builder_impl = insert_query_builder::get_insert_query_builder(&input);
26    let update_builder_impl = update_query_builder::get_update_query_builder(&input);
27    let delete_builder_impl = delete_query_builder::get_query_builder(&input);
28
29    // println!("{}", pretty_print_tokenstream(insert_builder_impl.clone()));
30
31    let from_row_impl = from_row::get_from_row_impl(&input);
32    let dbset_impl = dbset::get_dbset_impl(&input);
33
34    let module_name = quote::format_ident!(
35        "{}_module",
36        dbset_name
37            .to_string()
38            .from_case(Case::Pascal)
39            .to_case(Case::Snake)
40    );
41
42    let expanded = quote! {
43
44        mod #module_name {
45            use super::#struct_name ;
46
47            pub struct Set;
48            pub struct NotSet;
49
50            #from_row_impl
51            #many_query_builder_impl
52            #one_query_builder_impl
53            #insert_builder_impl
54            #update_builder_impl
55            #delete_builder_impl
56            #dbset_impl
57        }
58
59        pub use #module_name::#dbset_name;
60    };
61
62    TokenStream::from(expanded)
63}