mydb 0.0.1

This is a plugin that works with mydb_sqlx to make database operation easier
Documentation
use proc_macro2::{ Ident, Span, TokenStream };
use quote::quote;
use crate::derives::TableField;

/// Entity to Model
/// ### Usage (add TableData Automatic generation Entity)
/// ```
/// use serde::{Deserialize, Serialize};
/// use sqlx::FromRow;
/// use mydb::TableData;
/// 
/// #[derive(TableData, Debug, Clone, Default, FromRow, Deserialize, Serialize)]
/// #[mydb(table_name = "sys_user")]
/// pub struct Model {
///   pub username: String,
///   pub password: String,
///   #[table_field(exist)]
///   pub role_ids: Vec<u64>,
/// }
/// 
/// let sys_user_entity: Entity = Entity {
///   username: format!("admin"),
///   password: format!("96e79218965eb72c92a549dd5a330112"),
///   ..Default::default()
/// };
/// 
/// let m: Model = sys_user_entity.into();
/// m.role_ids = vec![1, 2];
/// println!("model : {:#?}", m);
/// ```
pub fn ts_entity_to_model(data: Vec<TableField>) -> TokenStream {
  let mut model: Vec<TokenStream> = Vec::new();
  for field in data {
    if field.exist {
      let name = Ident::new(&field.name, Span::call_site());
      model.push(
        quote! { #name: entity.#name, }
      );
    }
  }
  quote! {
    #[automatically_derived]
    impl From<Entity> for Model {
      fn from(entity: Entity) -> Model {
        Model {
          #(#model)*
          ..Default::default()
        }
      }
    }
  }
}