1use proc_macro::TokenStream;
2use proc_macro_crate::{FoundCrate, crate_name};
3use quote::{format_ident, quote};
4
5#[proc_macro_derive(Record, attributes(field, column, table, db))]
6pub fn derive_record(input: TokenStream) -> TokenStream {
7 mool_macros_impl::record::derive_record(input.into(), runtime_path()).into()
8}
9
10#[proc_macro_derive(Model, attributes(field, column, table, db))]
11pub fn derive_model(input: TokenStream) -> TokenStream {
12 mool_macros_impl::model::derive_model(input.into(), runtime_path()).into()
13}
14
15#[proc_macro_derive(Filterable, attributes(filter, db))]
16pub fn derive_filterable(input: TokenStream) -> TokenStream {
17 mool_macros_impl::filterable::derive_filterable(input.into(), runtime_path()).into()
18}
19
20#[proc_macro_derive(SqlEnum, attributes(sql_enum, db))]
21pub fn derive_sql_enum(input: TokenStream) -> TokenStream {
22 mool_macros_impl::sql_enum::derive_sql_enum(input.into(), runtime_path()).into()
23}
24
25fn runtime_path() -> proc_macro2::TokenStream {
26 match crate_name("mool") {
27 Ok(FoundCrate::Itself) => quote! { crate },
28 Ok(FoundCrate::Name(name)) => {
29 let ident = format_ident!("{}", name.replace('-', "_"));
30 quote! { ::#ident }
31 }
32 Err(_) => quote! { ::mool },
33 }
34}