Implemented compare for number validator.
authorAndrea Zagli <azagli@libero.it>
Sat, 30 Sep 2023 08:48:48 +0000 (10:48 +0200)
committerAndrea Zagli <azagli@libero.it>
Sat, 30 Sep 2023 08:48:48 +0000 (10:48 +0200)
src/validators.rs

index f5ee2dab9f5a22574454a68bffff159f0256618d..1400911ea5b929b65f58f476261c3102a098d2cc 100644 (file)
@@ -276,6 +276,8 @@ impl TValidator for ValidatorNumber {
                let tesc: String;
                let desc: String;
 
+               let mut nvalue = String::from(value);
+
                let mut sregex = String::from("^");
 
                if self.plus_minus {
@@ -289,6 +291,8 @@ impl TValidator for ValidatorNumber {
                                } else {
                                        tesc = format!("{}", t);
                                }
+
+                               nvalue = str::replace(&nvalue, t, "");
                        },
                        None => { tesc = String::new(); },
                }
@@ -300,6 +304,8 @@ impl TValidator for ValidatorNumber {
                                } else {
                                        desc = format!("{}", t);
                                }
+
+                               nvalue = str::replace(&nvalue, t, ".");
                        },
                        None => { desc = String::new(); },
                }
@@ -308,13 +314,51 @@ impl TValidator for ValidatorNumber {
                                                                tesc,
                                                                desc,
                                                                desc).as_str());
-               println!("REGEX {} - {}", sregex, value);
+
                let re = Regex::new(&sregex).unwrap();
 
                if !re.is_match(value) {
                        return self.get_message();
                }
 
+               let fvalue = match nvalue.parse::<f64>() {
+                       Ok(f) => { f },
+                       Err(_) => { 0_f64 },
+               };
+
+               match &self.compare_type {
+                       Some(t) => {
+                               match t {
+                                       ValidatorNumberCompareType::Less => {
+                                               if fvalue >= self.compare_value {
+                                                       return self.get_message();
+                                               }
+                                       },
+                                       ValidatorNumberCompareType::LessEq => {
+                                               if fvalue > self.compare_value {
+                                                       return self.get_message();
+                                               }
+                                       },
+                                       ValidatorNumberCompareType::Eq => {
+                                               if fvalue != self.compare_value {
+                                                       return self.get_message();
+                                               }
+                                       },
+                                       ValidatorNumberCompareType::Great => {
+                                               if fvalue <= self.compare_value {
+                                                       return self.get_message();
+                                               }
+                                       },
+                                       ValidatorNumberCompareType::GreatEq => {
+                                               if fvalue < self.compare_value {
+                                                       return self.get_message();
+                                               }
+                                       },
+                               };
+                       },
+                       None => { },
+               };
+
                return String::from("");
        }
 }