mod api;
mod commands;
mod dto;
mod events;
mod hooks;
mod insertable;
mod mappers;
mod migrations;
pub mod parse;
mod policy;
mod projection;
mod query;
mod repository;
mod row;
mod sql;
mod streams;
mod transaction;
use proc_macro::TokenStream;
use quote::quote;
use syn::{DeriveInput, parse_macro_input};
use self::parse::EntityDef;
pub fn derive(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
match EntityDef::from_derive_input(&input) {
Ok(entity) => generate(entity),
Err(err) => err.write_errors().into()
}
}
fn generate(entity: EntityDef) -> TokenStream {
let dto = dto::generate(&entity);
let projections = projection::generate(&entity);
let query_struct = query::generate(&entity);
let events = events::generate(&entity);
let hooks = hooks::generate(&entity);
let commands = commands::generate(&entity);
let policy = policy::generate(&entity);
let streams = streams::generate(&entity);
let transaction = transaction::generate(&entity);
let api = api::generate(&entity);
let repository = repository::generate(&entity);
let row = row::generate(&entity);
let insertable = insertable::generate(&entity);
let mappers = mappers::generate(&entity);
let sql = sql::generate(&entity);
let migrations = migrations::generate(&entity);
let expanded = quote! {
#dto
#projections
#query_struct
#events
#hooks
#commands
#policy
#streams
#transaction
#api
#repository
#row
#insertable
#mappers
#sql
#migrations
};
expanded.into()
}