1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
use crate::{ errors::ValidationError, model::field_types::{check_if_required, run_validators}, HitError, }; use crate::model::validators::{ValidatorContext, Validators}; use crate::model::{Model, ModelField}; use crate::object_data::ObjectValue; use std::default::Default; #[derive(Default)] pub struct FieldTypeBool { pub required: bool, pub name: String, pub validators: Validators<bool>, } impl ModelField for FieldTypeBool { fn on_kernel_init(&mut self, model_name: &str) -> Result<(), HitError> { for validator in self.validators.iter_mut() { validator.on_kernel_init(&self.name, model_name)?; } Ok(()) } fn get_name(&self) -> String { return String::from(&self.name); } fn validate( &self, value: &ObjectValue, context: &ValidatorContext, ) -> Result<Option<Vec<ValidationError>>, HitError> { match value { ObjectValue::Null => check_if_required(self.required), ObjectValue::Bool(value) => { let mut errors: Vec<ValidationError> = vec![]; run_validators(&self.validators, value, &mut errors, context)?; if errors.len() > 0 { return Ok(Some(errors)); } return Ok(None); } _ => Err(HitError::InvalidDataType()), } } fn accepts_for_set(&self, value: &ObjectValue, _context: &ValidatorContext) -> bool { match value { ObjectValue::Null => !self.required, ObjectValue::Bool(_) => true, _ => false, } } fn accepts_model(&self, _model: &Model) -> bool { return false; } fn is_vec_reference(&self) -> bool { false } fn is_vec_subobject(&self) -> bool { false } }