From ad3ad3295f8356bf2a69deacef1d6ddfb8be8228 Mon Sep 17 00:00:00 2001 From: Jeff Baskin Date: Sat, 30 Aug 2025 10:58:34 -0400 Subject: [PATCH] Allowed optional entry checks. --- src/message.rs | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/src/message.rs b/src/message.rs index ae75c44..b3a57f2 100644 --- a/src/message.rs +++ b/src/message.rs @@ -1109,16 +1109,20 @@ impl FieldSetting { &self.default_setting } - fn check(&self, value: &Field) -> Result { - let output = value.clone(); - let vft: FieldType = value.into(); - if vft != self.fieldtype { - return Err(MTTError::DocumentFieldWrongDataType( - self.fieldtype.clone(), - vft, - )); + fn check(&self, value: Option) -> Result { + match value { + Some(data) => { + let vft: FieldType = (&data).into(); + if vft != self.fieldtype { + return Err(MTTError::DocumentFieldWrongDataType( + self.fieldtype.clone(), + vft, + )); + } + Ok(data.clone()) + } + None => Err(MTTError::DocumentFieldMissing("".to_string())), } - Ok(output) } } @@ -1130,7 +1134,7 @@ mod fieldsettings { fn checks_field_type() { let fset = FieldSetting::new(FieldType::Uuid); let value: Field = Uuid::new_v4().into(); - match fset.check(&value) { + match fset.check(Some(value.clone())) { Ok(data) => assert_eq!(data, value), Err(err) => unreachable!("got {:?}: should have gotten a value", err), } @@ -1140,7 +1144,7 @@ mod fieldsettings { fn checks_for_bad_field_type() { let fset = FieldSetting::new(FieldType::Uuid); let value: Field = "text".into(); - match fset.check(&value) { + match fset.check(Some(value)) { Ok(data) => unreachable!("got {:?}: should have gotten an error", data), Err(err) => match err { MTTError::DocumentFieldWrongDataType(expected, got) => { @@ -1152,6 +1156,18 @@ mod fieldsettings { } } + #[test] + fn no_default_returns_error() { + let fset = FieldSetting::new(FieldType::Uuid); + match fset.check(None) { + Ok(data) => unreachable!("got {:?}: should have gotten an error", data), + Err(err) => match err { + MTTError::DocumentFieldMissing(data) => assert_eq!(data, ""), + _ => unreachable!("got {:?}: should have gotten a value", err), + }, + } + } + #[test] fn can_field_type_be_assigned() { let ftypes = [FieldType::StaticString, FieldType::Uuid]; @@ -1820,7 +1836,7 @@ impl DocumentFile { let doc = self.docs.get_mut(oid).unwrap(); for (key, value) in update.get_values().iter() { match self.docdef.get_field(key) { - Ok(fset) => match fset.check(value) { + Ok(fset) => match fset.check(Some(value.clone())) { Ok(field) => doc.add_field(key.clone(), field.clone()), Err(err) => return err.into(), },