From 2cc63b952717fed8dc816d004daa31474b99b70b Mon Sep 17 00:00:00 2001 From: Jeff Baskin Date: Thu, 21 Aug 2025 10:38:13 -0400 Subject: [PATCH] Added default value. --- src/message.rs | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/src/message.rs b/src/message.rs index 66062c1..731af8b 100644 --- a/src/message.rs +++ b/src/message.rs @@ -1217,8 +1217,6 @@ mod additions { } } -type DocDefMap = HashMap; - #[derive(Clone, Debug)] struct DocDef { fields: HashMap, @@ -1247,6 +1245,14 @@ impl DocDef { setting.set_default(DefaultSetting::FieldType); } + fn set_default_value(&mut self, field_name: &str, value: F) + where + F: Into, + { + let setting = self.fields.get_mut(field_name).unwrap(); + setting.set_default(DefaultSetting::Value(value.into())); + } + fn iter(&self) -> impl Iterator { self.fields.iter() } @@ -1622,7 +1628,7 @@ impl DocumentFile { match holder.get_field(key) { Some(_) => {} None => match value.get_default() { - DefaultSetting::Value(_) => {} + DefaultSetting::Value(data) => holder.add_field(key.clone(), data.clone()), DefaultSetting::FieldType => { holder.add_field(key.clone(), value.get_type().get_default()) } @@ -2147,6 +2153,30 @@ mod document_files { _ => unreachable!("got {:?}: should have gotten a reply", action), } } + + #[test] + fn can_a_default_value_be_set() { + let doc_name = "value"; + let mut docdef = create_docdef([FieldType::Uuid].to_vec()); + let input = Uuid::nil(); + docdef.set_default_value("field0", input.clone()); + let (queue, rx) = test_doc(doc_name, docdef, standard_routes()); + let new_doc = Addition::new(); + let msg = Message::new(doc_name, new_doc); + queue.send(msg).unwrap(); + let result = rx.recv_timeout(TIMEOUT).unwrap(); + let action = result.get_action(); + match action { + MsgAction::Reply(docs) => { + assert_eq!(docs.len(), 1); + let expected: Field = input.into(); + for doc in docs.iter() { + assert_eq!(doc.get_field("field0").unwrap(), &expected); + } + } + _ => unreachable!("got {:?}: should have gotten a reply", action), + } + } } #[cfg(test)]