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

index fffff930a29151e6c852a06dfaec24da377fa1c3..98615d5c1e2b83a48d9f6c845ce5df6a85aa2691 100644 (file)
@@ -75,9 +75,26 @@ pub trait TField {
 
        fn render(&self) -> String;
 
+       fn validate(&self) -> String;
+
        fn any(&mut self) -> &mut dyn Any;
 }
 
+fn validate_std(f: &Field) -> String {
+       let mut s = String::from("<ul>\n");
+
+       for v in &f.validators {
+               let msg = v.validate(&f.value);
+               if msg != "" {
+                       s.push_str(format!("<li>{}</li>\n", &msg).as_str());
+               }
+       }
+
+       s.push_str("</ul>");
+
+       s
+}
+
 #[derive(Default)]
 pub struct FieldText {
        field: Field,
@@ -210,6 +227,10 @@ impl TField for FieldText {
                s
        }
 
+       fn validate(&self) -> String {
+               validate_std(&self.field)
+       }
+
        fn any(&mut self) -> &mut dyn Any {
                self
        }
@@ -387,6 +408,10 @@ impl TField for FieldTextArea {
                s
        }
 
+       fn validate(&self) -> String {
+               validate_std(&self.field)
+       }
+
        fn any(&mut self) -> &mut dyn Any {
                self
        }
@@ -571,6 +596,10 @@ impl TField for FieldRadio {
                s
        }
 
+       fn validate(&self) -> String {
+               validate_std(&self.field)
+       }
+
        fn any(&mut self) -> &mut dyn Any {
                self
        }
@@ -784,6 +813,10 @@ impl TField for FieldSelect {
                s
        }
 
+       fn validate(&self) -> String {
+               validate_std(&self.field)
+       }
+
        fn any(&mut self) -> &mut dyn Any {
                self
        }
@@ -961,6 +994,10 @@ impl TField for FieldCheck {
                s
        }
 
+       fn validate(&self) -> String {
+               validate_std(&self.field)
+       }
+
        fn any(&mut self) -> &mut dyn Any {
                self
        }
@@ -1120,6 +1157,10 @@ impl TField for FieldButton {
                s
        }
 
+       fn validate(&self) -> String {
+               validate_std(&self.field)
+       }
+
        fn any(&mut self) -> &mut dyn Any {
                self
        }
index 5a1685901fb22e761d01b7e7ffd690cf5253ba76..65428a3d1f470fc14b91e4f69ed71cde51a8ee46 100644 (file)
@@ -12,7 +12,7 @@ pub trait TValidator {
        fn get_message(&self) -> String;
        fn set_message(&mut self, message: &str);
 
-       fn validate(&self, value: &String) -> bool;
+       fn validate(&self, value: &String) -> String;
 }
 
 #[derive(Default)]
@@ -33,11 +33,11 @@ impl TValidator for ValidatorNotEmpty {
                self.validator.message = String::from(message);
        }
 
-       fn validate(&self, value: &String) -> bool {
+       fn validate(&self, value: &String) -> String {
                if value != "" {
-                       true
+                       self.get_message()
                } else {
-                       false
+                       String::from("")
                }
        }
 }
@@ -71,8 +71,8 @@ impl TValidator for ValidatorRegex {
                self.validator.message = String::from(message);
        }
 
-       fn validate(&self, value: &String) -> bool {
-               true
+       fn validate(&self, value: &String) -> String {
+               String::from("")
        }
 }