diff --git a/actix_admin/actix_admin_macros/src/lib.rs b/actix_admin/actix_admin_macros/src/lib.rs index 4364fb9..2ff38f6 100644 --- a/actix_admin/actix_admin_macros/src/lib.rs +++ b/actix_admin/actix_admin_macros/src/lib.rs @@ -51,8 +51,8 @@ pub fn derive_crud_fns(input: proc_macro::TokenStream) -> proc_macro::TokenStrea impl From for ActiveModel { fn from(model: ActixAdminModel) -> Self { ActiveModel { - title: Set("test".to_string()), - text: Set("test".to_string()), + title: Set(model.values.get("title").unwrap().to_string()), + text: Set(model.values.get("text").unwrap().to_string()), ..Default::default() } } diff --git a/actix_admin/src/lib.rs b/actix_admin/src/lib.rs index 56bc72a..8883c7a 100644 --- a/actix_admin/src/lib.rs +++ b/actix_admin/src/lib.rs @@ -15,11 +15,19 @@ const DEFAULT_ENTITIES_PER_PAGE: usize = 5; macro_rules! hashmap { ($( $key: expr => $val: expr ),*) => {{ let mut map = ::std::collections::HashMap::new(); - $( map.insert($key, $val); )* + $( map.insert($key.to_string(), $val.to_string()); )* map }} } +#[macro_export] +macro_rules! make_fields { + ($($element: ident: $ty: ty),*) => { + $($element: $ty),* + } +} + + // globals lazy_static! { static ref TERA: Tera = @@ -54,7 +62,7 @@ pub trait ActixAdminModelTrait { #[derive(Clone, Debug, Serialize)] pub struct ActixAdminModel { - pub values: HashMap<&'static str, String> + pub values: HashMap } // ActixAdminViewModel @@ -100,6 +108,22 @@ impl ActixAdmin { } } +impl From for ActixAdminModel { + fn from(string: String) -> Self { + let mut hashmap = HashMap::new(); + let key_values: Vec<&str> = string.split('&').collect(); + for key_value in key_values { + let mut iter = key_value.splitn(2, '='); + hashmap.insert(iter.next().unwrap().to_string(), iter.next().unwrap().to_string()); + } + + ActixAdminModel { + // TODO: create dynamically + values: hashmap + } + } +} + pub async fn index(data: web::Data) -> Result { let entity_names = &data.get_actix_admin().entity_names; let mut ctx = Context::new(); @@ -166,11 +190,8 @@ pub async fn create_post(_req: Htt let actix_admin = data.get_actix_admin(); let view_model = actix_admin.view_models.get(&entity_name).unwrap(); - let mut model = ActixAdminModel{ values: HashMap::new() }; - model = E::create_entity(db, model).await; - - println!("{}", &entity_name); - println!("{}", &text); + let mut admin_model = ActixAdminModel::from(text); + admin_model = E::create_entity(db, admin_model).await; Ok(HttpResponse::Found() .append_header((header::LOCATION, format!("/admin/{}/list", view_model.entity_name))) diff --git a/database.db b/database.db index f47e70a..1060506 100644 Binary files a/database.db and b/database.db differ diff --git a/database.db-wal b/database.db-wal index 966c0bb..0604328 100644 Binary files a/database.db-wal and b/database.db-wal differ