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}