hit_data/model/validators/
mod.rs1use crate::{errors::ValidationError, Hit};
2use crate::{errors::ValidationErrorLevel, HitError};
3use std::rc::Rc;
4
5pub type Validators<T> = Vec<Box<dyn Validator<T>>>;
6
7pub trait Validator<T> {
8 fn validate(
9 &self,
10 value: &T,
11 context: &ValidatorContext,
12 ) -> Result<Option<Vec<ValidationError>>, HitError>;
13
14 fn on_kernel_init(&mut self, field_name: &str, model_name: &str) -> Result<(), HitError>;
15}
16
17pub struct MaxLength {
18 pub length: u8,
19}
20pub static ERROR_MAX_LENGTH: &str = "Max length was reached.";
21
22pub struct ValidatorContext<'a> {
23 pub id: &'a str,
24 pub property: &'a str,
25 pub index: Rc<&'a Hit>,
26}
27
28static MAX_LENGTH: &str = "MAX_LENGTH";
29
30impl Validator<String> for MaxLength {
31 fn validate(
32 &self,
33 value: &String,
34 _context: &ValidatorContext,
35 ) -> Result<Option<Vec<ValidationError>>, HitError> {
36 if value.len() as u8 > self.length {
37 return Ok(Some(vec![ValidationError {
38 key: MAX_LENGTH.to_string(),
39 level: ValidationErrorLevel::Error,
40 arguments: None,
41 }]));
42 }
43 return Ok(None);
44 }
45
46 fn on_kernel_init(&mut self, _field_name: &str, _model_namee: &str) -> Result<(), HitError> {
47 Ok(())
48 }
49}