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 65 66
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 FieldTypeStringVec { pub required: bool, pub name: String, pub validators: Validators<String>, pub _enum: Option<Vec<String>>, } impl ModelField for FieldTypeStringVec { 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 accepts_for_set(&self, value: &ObjectValue, _context: &ValidatorContext) -> bool { match value { ObjectValue::String(_) => true, _ => false, } } fn accepts_model(&self, _model: &Model) -> bool { return false; } fn validate( &self, value: &ObjectValue, context: &ValidatorContext, ) -> Result<Option<Vec<ValidationError>>, HitError> { match value { ObjectValue::Null => check_if_required(self.required), ObjectValue::String(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 is_vec_reference(&self) -> bool { false } fn is_vec_subobject(&self) -> bool { false } }