use proc_macro2::TokenStream;
use quote::quote;
use crate::analyze::model::analyze_model;
use crate::generate::db_enum::generate_db_enum;
use crate::generate::model::generate_model;
use crate::generate::patch::generate_patch;
use crate::parse::db_enum::parse_db_enum;
use crate::parse::model::parse_model;
use crate::parse::patch::parse_patch;
mod analyze;
mod generate;
mod parse;
mod utils;
pub fn derive_db_enum(input: TokenStream, config: MacroConfig) -> TokenStream {
match parse_db_enum(input) {
Ok(model) => generate_db_enum(&model, &config),
Err(error) => error.write_errors(),
}
}
pub fn derive_model(input: TokenStream, config: MacroConfig) -> TokenStream {
match parse_model(input).and_then(analyze_model) {
Ok(model) => generate_model(&model, &config),
Err(error) => error.write_errors(),
}
}
pub fn derive_patch(input: TokenStream, config: MacroConfig) -> TokenStream {
match parse_patch(input) {
Ok(patch) => generate_patch(&patch, &config),
Err(error) => error.write_errors(),
}
}
#[cfg_attr(doc, non_exhaustive)]
pub struct MacroConfig {
pub rorm_path: TokenStream,
#[cfg(not(doc))]
pub non_exhaustive: private::NonExhaustive,
}
mod private {
pub struct NonExhaustive;
}
impl Default for MacroConfig {
fn default() -> Self {
Self {
rorm_path: quote! { ::rorm },
non_exhaustive: private::NonExhaustive,
}
}
}