From c57e01a56c18e3b6b730f638ed952d44a63fea0d Mon Sep 17 00:00:00 2001 From: Andrea Zagli Date: Mon, 25 Sep 2023 15:46:20 +0200 Subject: [PATCH] Started field validators. --- src/fields.rs | 27 +++++++++++++++++ src/lib.rs | 1 + src/validators.rs | 74 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 102 insertions(+) create mode 100644 src/validators.rs diff --git a/src/fields.rs b/src/fields.rs index be1f9ca..fffff93 100644 --- a/src/fields.rs +++ b/src/fields.rs @@ -29,6 +29,7 @@ struct Field { db_type: FieldDbType, tmpl: tera::Tera, filters: Vec, + validators: Vec>, } pub trait TField { @@ -68,6 +69,8 @@ pub trait TField { fn filter(&mut self); + fn add_validator(&mut self, validator: Box); + fn set_template(&mut self, template: &str); fn render(&self) -> String; @@ -177,6 +180,10 @@ impl TField for FieldText { } } + fn add_validator(&mut self, validator: Box) { + self.field.validators.push(validator); + } + fn set_template(&mut self, template: &str) { match self.field.tmpl.add_raw_template("field", template) { Err(e) => { println!("{:?}", e) }, @@ -349,6 +356,10 @@ impl TField for FieldTextArea { } } + fn add_validator(&mut self, validator: Box) { + self.field.validators.push(validator); + } + fn set_template(&mut self, template: &str) { match self.field.tmpl.add_raw_template("field", template) { Err(e) => { println!("{:?}", e) }, @@ -530,6 +541,10 @@ impl TField for FieldRadio { } } + fn add_validator(&mut self, validator: Box) { + self.field.validators.push(validator); + } + fn set_template(&mut self, template: &str) { match self.field.tmpl.add_raw_template("field", template) { Err(e) => { println!("{:?}", e) }, @@ -739,6 +754,10 @@ impl TField for FieldSelect { } } + fn add_validator(&mut self, validator: Box) { + self.field.validators.push(validator); + } + fn set_template(&mut self, template: &str) { match self.field.tmpl.add_raw_template("field", template) { Err(e) => { println!("{:?}", e) }, @@ -913,6 +932,10 @@ impl TField for FieldCheck { } } + fn add_validator(&mut self, validator: Box) { + self.field.validators.push(validator); + } + fn set_template(&mut self, template: &str) { match self.field.tmpl.add_raw_template("field", template) { Err(e) => { println!("{:?}", e) }, @@ -1067,6 +1090,10 @@ impl TField for FieldButton { } } + fn add_validator(&mut self, validator: Box) { + self.field.validators.push(validator); + } + fn set_template(&mut self, template: &str) { match self.field.tmpl.add_raw_template("field", template) { Err(e) => { println!("{:?}", e) }, diff --git a/src/lib.rs b/src/lib.rs index 39c5808..f2ec9f0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,4 @@ pub mod filters; +pub mod validators; pub mod fields; pub mod form; diff --git a/src/validators.rs b/src/validators.rs new file mode 100644 index 0000000..a4cf75e --- /dev/null +++ b/src/validators.rs @@ -0,0 +1,74 @@ +use std::default::Default; + +#[derive(Default)] +struct Validator { + name: String, +} + +pub trait TValidator { + fn get_name(&self) -> String; + + fn validate(&self, value: &String) -> bool; +} + +#[derive(Default)] +pub struct ValidatorNotEmpty { + validator: Validator, +} + +impl TValidator for ValidatorNotEmpty { + fn get_name(&self) -> String { + String::from(&self.validator.name) + } + + fn validate(&self, value: &String) -> bool { + if value != "" { + true + } else { + false + } + } +} + +impl ValidatorNotEmpty { + pub fn new(name: &String) -> Self { + let mut v: ValidatorNotEmpty = Default::default(); + v.validator.name = String::from(name); + + v + } +} + +#[derive(Default)] +pub struct ValidatorRegex { + validator: Validator, + regex: String, +} + +impl TValidator for ValidatorRegex { + fn get_name(&self) -> String { + String::from(&self.validator.name) + } + + fn validate(&self, value: &String) -> bool { + true + } +} + +impl ValidatorRegex { + pub fn new(name: &String, regex: &str) -> Self { + let mut v: ValidatorRegex = Default::default(); + v.validator.name = String::from(name); + v.regex = String::from(regex); + + v + } + + pub fn get_regex(&self) -> String { + String::from(&self.regex) + } + + pub fn set_regex(&mut self, regex: &str) { + self.regex = String::from(regex); + } +} -- 2.49.0