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