mydb 0.0.1

This is a plugin that works with mydb_sqlx to make database operation easier
Documentation
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)*
    }
  })
}