]> saetta.ns0.it Git - rust/zakform/commitdiff
Form validate.
authorAndrea Zagli <azagli@libero.it>
Wed, 27 Sep 2023 13:39:54 +0000 (15:39 +0200)
committerAndrea Zagli <azagli@libero.it>
Wed, 27 Sep 2023 13:39:54 +0000 (15:39 +0200)
src/fields.rs
src/form.rs
src/validators.rs

index 98615d5c1e2b83a48d9f6c845ce5df6a85aa2691..5cd958d25cfb3790b7238d4ad2b8eda071bba3da 100644 (file)
@@ -81,16 +81,25 @@ pub trait TField {
 }
 
 fn validate_std(f: &Field) -> String {
-       let mut s = String::from("<ul>\n");
+       let mut first = true;
+
+       let mut s = String::from("");
 
        for v in &f.validators {
                let msg = v.validate(&f.value);
                if msg != "" {
+                       if first {
+                               s.push_str("<ul>\n");
+                               first = false;
+                       }
+
                        s.push_str(format!("<li>{}</li>\n", &msg).as_str());
                }
        }
 
-       s.push_str("</ul>");
+       if s != "" {
+               s.push_str("</ul>");
+       }
 
        s
 }
index a01558c7250695ee32f298f6370555508a32dd5e..7257c17647bbb70e900cd1f961e4d23aea9a25d0 100644 (file)
@@ -1,3 +1,5 @@
+use crate::fields;
+
 pub struct Form {
        fields: Vec<Box<dyn super::fields::TField>>,
 }
@@ -43,4 +45,18 @@ impl Form {
 
                Err(())
        }
+
+       pub fn validate(&mut self) -> bool {
+               let mut r = true;
+
+               for f in &mut self.fields {
+                       let msg = f.validate();
+                       if msg != "" {
+                               r = false;
+                               f.set_help(&msg);
+                       }
+               }
+
+               r
+       }
 }
index 65428a3d1f470fc14b91e4f69ed71cde51a8ee46..23fdc1074ab651887050cf39158b2a633488734a 100644 (file)
@@ -34,7 +34,7 @@ impl TValidator for ValidatorNotEmpty {
        }
 
        fn validate(&self, value: &String) -> String {
-               if value != "" {
+               if value == "" {
                        self.get_message()
                } else {
                        String::from("")
@@ -43,7 +43,7 @@ impl TValidator for ValidatorNotEmpty {
 }
 
 impl ValidatorNotEmpty {
-       pub fn new(name: &String) -> Self {
+       pub fn new(name: &str) -> Self {
                let mut v: ValidatorNotEmpty = Default::default();
                v.validator.name = String::from(name);
                v.validator.message = String::from("Mandatory field");
@@ -77,7 +77,7 @@ impl TValidator for ValidatorRegex {
 }
 
 impl ValidatorRegex {
-       pub fn new(name: &String, regex: &str) -> Self {
+       pub fn new(name: &str, regex: &str) -> Self {
                let mut v: ValidatorRegex = Default::default();
                v.validator.name = String::from(name);
                v.validator.message = String::from("Invalid value");