Skip to main content

mool_macros/
lib.rs

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}