]> saetta.ns0.it Git - rust/zakform/commitdiff
Form as_json_string.
authorAndrea Zagli <azagli@libero.it>
Fri, 6 Jan 2023 11:10:23 +0000 (12:10 +0100)
committerAndrea Zagli <azagli@libero.it>
Fri, 6 Jan 2023 11:10:23 +0000 (12:10 +0100)
Cargo.toml
examples/form.rs
src/lib.rs

index 10aa291c426923b07232385bb92170516c649d37..ebae6c19b545f35dd9a899716a798cb5382d3a96 100644 (file)
@@ -12,5 +12,6 @@ tera = "1.8.0"
 [dev-dependencies]
 serde = "1"
 serde_derive = "1"
+serde_json = "1"
 config = "0.13"
 actix-web = "4"
index fa85845688d53a52ac8625a292b84b785ad1af50..661f9a790e0821cf18687659b4707861334bd78b 100644 (file)
@@ -2,8 +2,10 @@ extern crate zakform;
 
 use zakform::filters;
 
+use std::collections::HashMap;
+
 use config::{Config, ConfigError};
-use serde_derive::Deserialize;
+use serde_derive::{Serialize,Deserialize};
 
 use actix_web::{
     body::BoxBody,
@@ -41,7 +43,7 @@ struct AppState {
        settings: Settings,
 }
 
-#[derive(Deserialize)]
+#[derive(Serialize,Deserialize)]
 struct FormData {
        name: String,
        notes: String,
@@ -60,9 +62,13 @@ async fn index_post(
 
        let mut f = zakform::Form::new();
 
+       let strform = serde_json::to_string(&form).unwrap();
+       println!("{:#?}",strform);
+       let map: HashMap<String, String> = serde_json::from_str(&strform).unwrap();
+
        let mut fi = zakform::Field::new(zakform::FType::Text, "name");
        fi.set_label("Name");
-       fi.set_value(form.name.as_str());
+       fi.set_value(map.get(fi.name().as_str()).unwrap().as_str());
        fi.add_filter(filters::filter_uppercase);
        fi.filter();
        f.add_field(fi);
@@ -70,7 +76,7 @@ async fn index_post(
        let mut fi = zakform::Field::new(zakform::FType::TextArea, "notes");
        fi.set_label("Notes");
        fi.set_rows(15);
-       fi.set_value(form.notes.as_str());
+       fi.set_value(map.get(fi.name().as_str()).unwrap().as_str());
        fi.add_filter(filters::filter_trim);
        fi.filter();
        f.add_field(fi);
@@ -80,6 +86,9 @@ async fn index_post(
                s.push_str(fi.render().as_str());
        }
 
+       let js: HashMap<String, String> = serde_json::from_str(f.as_json_string().as_str()).unwrap();
+       println!("{:#?}", js);
+
        s.push_str(r#"<button type="submit">Send</button>"#);
 
        s.push_str("</form>\n");
index 918fc1cd1d5acef6e607d77b8da83c91e1d99064..60d2878a5befcfc0b5d332af16bdf556eb2accef 100644 (file)
@@ -175,4 +175,17 @@ impl Form {
 
                Err(())
        }
+
+       pub fn as_json_string(&mut self) -> String {
+               let mut s = String::from("{");
+
+               for f in &mut self.fields {
+                       s.push_str(format!(r#""{}": "{}","#, f.name, f.value).as_str());
+               }
+
+               s.truncate(s.len() - 1);
+               s.push_str("}");
+
+               s
+       }
 }