mool-macros 0.1.2

Derive macros for the Mool database toolkit
Documentation
use proc_macro::TokenStream;
use proc_macro_crate::{FoundCrate, crate_name};
use quote::{format_ident, quote};

mod embedded;

#[proc_macro]
pub fn embedded_migrations(input: TokenStream) -> TokenStream {
    embedded::embedded_migrations(input, runtime_path())
}

#[proc_macro_derive(Record, attributes(field, column, table, db))]
pub fn derive_record(input: TokenStream) -> TokenStream {
    mool_macros_impl::record::derive_record(input.into(), runtime_path()).into()
}

#[proc_macro_derive(Model, attributes(field, column, table, db))]
pub fn derive_model(input: TokenStream) -> TokenStream {
    mool_macros_impl::model::derive_model(input.into(), runtime_path()).into()
}

#[proc_macro_derive(Filterable, attributes(filter, db))]
pub fn derive_filterable(input: TokenStream) -> TokenStream {
    mool_macros_impl::filterable::derive_filterable(input.into(), runtime_path()).into()
}

#[proc_macro_derive(SqlEnum, attributes(sql_enum, db))]
pub fn derive_sql_enum(input: TokenStream) -> TokenStream {
    mool_macros_impl::sql_enum::derive_sql_enum(input.into(), runtime_path()).into()
}

fn runtime_path() -> proc_macro2::TokenStream {
    match crate_name("mool") {
        Ok(FoundCrate::Itself) => quote! { ::mool },
        Ok(FoundCrate::Name(name)) => {
            let ident = format_ident!("{}", name.replace('-', "_"));
            quote! { ::#ident }
        }
        Err(_) => quote! { ::mool },
    }
}