From 6a61305d6e00b49d4a38bd7b13830b2ec3ce1497 Mon Sep 17 00:00:00 2001
From: Andrea Zagli <azagli@libero.it>
Date: Wed, 27 Sep 2023 15:10:25 +0200
Subject: [PATCH] Field validate.

---
 src/fields.rs     | 41 +++++++++++++++++++++++++++++++++++++++++
 src/validators.rs | 12 ++++++------
 2 files changed, 47 insertions(+), 6 deletions(-)

diff --git a/src/fields.rs b/src/fields.rs
index fffff93..98615d5 100644
--- a/src/fields.rs
+++ b/src/fields.rs
@@ -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
 	}
diff --git a/src/validators.rs b/src/validators.rs
index 5a16859..65428a3 100644
--- a/src/validators.rs
+++ b/src/validators.rs
@@ -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("")
 	}
 }
 
-- 
2.49.0