1use proc_macro::TokenStream;
2use quote::ToTokens;
3use syn::ItemStruct;
4use syn::parse_macro_input;
5
6mod naming;
7mod traits;
8
9use crate::entity::EntityStruct;
10mod entity;
11mod qb;
12mod sql;
13
14mod attrs;
15mod gen_columns;
16mod relations;
17
18#[proc_macro_derive(Entity, attributes(sql))]
19pub fn entity(input: TokenStream) -> TokenStream {
20 let es = parse_macro_input!(input as EntityStruct);
21 entity::handle(es).into()
22}
23
24#[proc_macro_attribute]
25pub fn table(_: TokenStream, input: TokenStream) -> TokenStream {
26 let model = parse_macro_input!(input as ItemStruct);
27 let model = model.to_token_stream();
28
29 quote::quote! {
30 #[derive(::sqlorm::sqlx::FromRow,::sqlorm::Entity)]
31 #model
32 }
33 .into()
34}