use proc_macro2::{ TokenStream, Ident };
use quote::quote;
use syn::{ Attribute, Data, Result };
use crate::derives::{
TableField,
set_entitys,
set_getters,
set_setters,
ts_entity_to_model,
utils::{ get_table_name, get_table_list }
};
pub fn handle_entity_model(data: Data, attrs: Vec<Attribute>) -> Result<TokenStream> {
let table_name: String = get_table_name(attrs);
let table_list: Vec<TableField> = get_table_list(data);
let ts_entitys_to_models: TokenStream = ts_entity_to_model(table_list.clone());
let ts_entitys: TokenStream = set_entitys(table_list);
Ok(quote! {
#ts_entitys_to_models
#ts_entitys
#[automatically_derived]
impl mydb_sqlx::BaseEntity for Entity {
fn table_name() -> &'static str {
#table_name
}
}
})
}
pub fn handle_getters(data: Data, ident: Ident) -> Result<TokenStream> {
let imp_name: Ident = ident;
let table_list: Vec<TableField> = get_table_list(data);
let ts_getters: Vec<TokenStream> = set_getters(table_list);
Ok(quote! {
impl #imp_name {
#(#ts_getters)*
}
})
}
pub fn handle_setters(data: Data, ident: Ident) -> Result<TokenStream> {
let imp_name: Ident = ident;
let table_list: Vec<TableField> = get_table_list(data);
let ts_setters: Vec<TokenStream> = set_setters(table_list);
Ok(quote! {
impl #imp_name {
#(#ts_setters)*
}
})
}