1use darling::{ast::NestedMeta, FromMeta};
2use proc_macro::TokenStream;
3use syn::parse_macro_input;
4
5mod db_bmc;
6mod helpers;
7mod insert;
8mod json_value;
9mod select;
10mod store_enum;
11mod update;
12mod uuid_id;
13
14#[proc_macro_derive(Select, attributes(select))]
15pub fn select(item: TokenStream) -> TokenStream {
16 let input = parse_macro_input!(item as syn::DeriveInput);
17 select::select_impl(&input).unwrap_or_else(|e| e.to_compile_error().into())
18}
19
20#[proc_macro_derive(Insert, attributes(insert))]
21pub fn insert(item: TokenStream) -> TokenStream {
22 let input = parse_macro_input!(item as syn::DeriveInput);
23 insert::insert_impl(&input).unwrap_or_else(|e| e.to_compile_error().into())
24}
25
26#[proc_macro_derive(Update, attributes(update))]
27pub fn update(item: TokenStream) -> TokenStream {
28 let input = parse_macro_input!(item as syn::DeriveInput);
29 update::update_impl(&input).unwrap_or_else(|e| e.to_compile_error().into())
30}
31
32#[proc_macro_derive(DbBmc, attributes(db_bmc))]
33pub fn db_bmc(item: TokenStream) -> TokenStream {
34 let input = parse_macro_input!(item as syn::DeriveInput);
35 db_bmc::db_bmc_impl(&input).unwrap_or_else(|e| e.to_compile_error().into())
36}
37
38#[proc_macro_derive(JsonValue)]
39pub fn json_value(item: TokenStream) -> TokenStream {
40 let input = parse_macro_input!(item as syn::DeriveInput);
41 json_value::json_value_impl(&input).unwrap_or_else(|e| e.to_compile_error().into())
42}
43
44#[proc_macro_attribute]
45pub fn uuid_id(attr_args: TokenStream, item: TokenStream) -> TokenStream {
46 let attr_args = match NestedMeta::parse_meta_list(attr_args.into()) {
47 Ok(v) => v,
48 Err(e) => return TokenStream::from(darling::Error::from(e).write_errors()),
49 };
50
51 let args = match uuid_id::UuidArgs::from_list(&attr_args) {
52 Ok(v) => v,
53 Err(e) => return TokenStream::from(e.write_errors()),
54 };
55
56 let input = syn::parse_macro_input!(item as syn::ItemStruct);
57
58 uuid_id::uuid_id_impl(args, input).unwrap_or_else(|e| e.to_compile_error().into())
59}
60
61#[proc_macro_attribute]
62pub fn store_enum(attr_args: TokenStream, item: TokenStream) -> TokenStream {
63 let attr_args = match NestedMeta::parse_meta_list(attr_args.into()) {
64 Ok(v) => v,
65 Err(e) => return TokenStream::from(darling::Error::from(e).write_errors()),
66 };
67
68 let args = match store_enum::StoreEnumArgs::from_list(&attr_args) {
69 Ok(v) => v,
70 Err(e) => return TokenStream::from(e.write_errors()),
71 };
72
73 let input = syn::parse_macro_input!(item as syn::ItemEnum);
74
75 store_enum::store_enum_impl(args, input).unwrap_or_else(|e| e.to_compile_error().into())
76}