From ed2a303d1c815d83de13eaf2e94cd5c5052bed7b Mon Sep 17 00:00:00 2001 From: Jeff Baskin Date: Thu, 12 Feb 2026 00:05:33 -0500 Subject: [PATCH] Made addition require document name. --- src/action/addition.rs | 26 ++++++++++++++++++++---- src/document/create.rs | 44 ++++++++++++++++++++--------------------- src/document/session.rs | 12 +++++------ src/lib.rs | 8 ++++++-- 4 files changed, 56 insertions(+), 34 deletions(-) diff --git a/src/action/addition.rs b/src/action/addition.rs index e6a5e97..e23b538 100644 --- a/src/action/addition.rs +++ b/src/action/addition.rs @@ -5,16 +5,24 @@ use uuid::Uuid; #[derive(Clone, Debug)] pub struct Addition { data: RequestData, + doc_name: NameType, } impl Addition { - pub fn new() -> Self { + pub fn new(name: NT) -> Self + where + NT: Into, + { Self { data: RequestData::new(), + doc_name: name.into(), } } - #[allow(dead_code)] + pub fn doc_name(&self) -> NameType { + self.doc_name.clone() + } + pub fn add_field(&mut self, name: NT, field: CV) where CV: Into, @@ -33,9 +41,18 @@ mod additions { use super::*; use crate::name::Name; + #[test] + fn is_default_addition_empty() { + let doc_name = Name::english(Uuid::new_v4().to_string().as_str()); + let add = Addition::new(doc_name.clone()); + assert_eq!(add.doc_name(), doc_name.into()); + assert_eq!(add.iter().count(), 0); + } + #[test] fn can_add_static_string() { - let mut add = Addition::new(); + let doc_name = Name::english(Uuid::new_v4().to_string().as_str()); + let mut add = Addition::new(doc_name); let name = Name::english(Uuid::new_v4().to_string().as_str()); let ntype: NameType = name.clone().into(); let data = Uuid::new_v4().to_string(); @@ -55,7 +72,8 @@ mod additions { #[test] fn can_add_uuid() { - let mut add = Addition::new(); + let doc_name = Name::english(Uuid::new_v4().to_string().as_str()); + let mut add = Addition::new(doc_name); let name = Name::english(Uuid::new_v4().to_string().as_str()); let ntype: NameType = name.clone().into(); let data = Uuid::new_v4(); diff --git a/src/document/create.rs b/src/document/create.rs index 05e829e..f84f740 100644 --- a/src/document/create.rs +++ b/src/document/create.rs @@ -907,7 +907,7 @@ mod document_files { } fn populate(&self, data: Vec) { - let mut add = Addition::new(); + let mut add = Addition::new(self.doc_name()); let mut count = 0; for item in data.iter() { add.add_field( @@ -968,9 +968,9 @@ mod document_files { test_doc.start(standard_paths()); let queue = test_doc.get_queue(); let msg_actions = [ - MsgAction::Addition(Addition::new()), + MsgAction::Addition(Addition::new(name.clone())), MsgAction::Delete(Delete::new(Query::internal())), - MsgAction::Query(Query::internal().into()), + MsgAction::Query(Query::new(name.clone())), MsgAction::Show, MsgAction::Update(Update::new(Query::internal())), ]; @@ -1019,9 +1019,9 @@ mod document_files { queue.send(setup); test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); let msg_actions = [ - MsgAction::Addition(Addition::new()), + MsgAction::Addition(Addition::new(alt.clone())), MsgAction::Create(DocDef::new(name.clone())), - MsgAction::Delete(Delete::new(Query::internal())), + MsgAction::Delete(Delete::new(Query::new(alt.clone()))), MsgAction::Query(Query::internal().into()), MsgAction::Show, MsgAction::Update(Update::new(Query::internal())), @@ -1103,7 +1103,7 @@ mod document_files { Include::Just(Action::OnAddition), )]; test_doc.start(routes); - let mut add = Addition::new(); + let mut add = Addition::new(doc_name.clone()); add.add_field(field_name.clone(), data.clone()); let msg = Message::new(doc_name.clone(), add); queue.send(msg.clone()); @@ -1229,7 +1229,7 @@ mod document_files { let mut test_doc: TestDocument = docdef.clone().into(); test_doc.start(standard_paths()); let queue = test_doc.get_queue(); - let mut new_doc = Addition::new(); + let mut new_doc = Addition::new(doc_name.clone()); new_doc.add_field(name.clone(), data.clone()); let testing = |msg: Message| { queue.send(msg.clone()); @@ -1267,7 +1267,7 @@ mod document_files { let queue = test_doc.get_queue(); let count = 5; for i in 0..count { - let mut new_doc = Addition::new(); + let mut new_doc = Addition::new(doc_name.clone()); new_doc.add_field(name.clone(), i); queue.send(Message::new(doc_name.clone(), new_doc)); test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); @@ -1310,7 +1310,7 @@ mod document_files { test_doc.start(standard_paths()); let queue = test_doc.get_queue(); let name = Name::english("bad"); - let mut addition = Addition::new(); + let mut addition = Addition::new(test_doc.doc_name()); addition.add_field(name.clone(), "doesn't matter"); queue.send(Message::new( test_doc.get_docdef().get_document_names()[0].clone(), @@ -1331,7 +1331,7 @@ mod document_files { let mut test_doc = TestDocument::new([FieldType::Uuid].to_vec()); test_doc.start(standard_paths()); let queue = test_doc.get_queue(); - let mut addition = Addition::new(); + let mut addition = Addition::new(test_doc.doc_name()); addition.add_field(Name::english("field0"), "string"); queue.send(Message::new( test_doc.get_docdef().get_document_names()[0].clone(), @@ -1358,7 +1358,7 @@ mod document_files { let mut test_doc = TestDocument::new([FieldType::Integer, FieldType::Integer].to_vec()); test_doc.start(standard_paths()); let queue = test_doc.get_queue(); - let mut addition = Addition::new(); + let mut addition = Addition::new(test_doc.doc_name()); addition.add_field(Name::english("field0"), 1); queue.send(Message::new( test_doc.get_docdef().get_document_names()[0].clone(), @@ -1691,7 +1691,7 @@ mod document_files { test_doc.start(standard_paths()); let queue = test_doc.get_queue(); let rx = test_doc.get_receiver(); - let new_doc = Addition::new(); + let new_doc = Addition::new(doc_name.clone()); let msg = Message::new(doc_name, new_doc); queue.send(msg); let result = rx.recv_timeout(TIMEOUT).unwrap(); @@ -1719,7 +1719,7 @@ mod document_files { test_doc.start(standard_paths()); let queue = test_doc.get_queue(); let rx = test_doc.get_receiver(); - let new_doc = Addition::new(); + let new_doc = Addition::new(doc_name.clone()); let msg = Message::new(doc_name, new_doc); queue.send(msg); let result = rx.recv_timeout(TIMEOUT).unwrap(); @@ -1747,7 +1747,7 @@ mod document_files { test_doc.start(standard_paths()); let queue = test_doc.get_queue(); let rx = test_doc.get_receiver(); - let mut new_doc = Addition::new(); + let mut new_doc = Addition::new(doc_name.clone()); new_doc.add_field(&field_name, Uuid::nil()); let msg = Message::new(doc_name, new_doc); queue.send(msg); @@ -2023,9 +2023,9 @@ mod document_files { update.get_values_mut().add_field(&fname, new); test_doc.send(update); test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); - let mut should_clear = Addition::new(); + let mut should_clear = Addition::new(test_doc.doc_name()); should_clear.add_field(fname.clone(), old); - let mut should_error = Addition::new(); + let mut should_error = Addition::new(test_doc.doc_name()); should_error.add_field(fname.clone(), new); test_doc.send(should_clear); let result = test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); @@ -2064,10 +2064,10 @@ mod document_files { let f0data = Uuid::new_v4(); let f1bad_data = "NotUuid"; let f1good_data = Uuid::nil(); - let mut bad_addition = Addition::new(); + let mut bad_addition = Addition::new(test_doc.doc_name()); bad_addition.add_field(&f0name, f0data.clone()); bad_addition.add_field(&f1name, f1bad_data); - let mut good_addition = Addition::new(); + let mut good_addition = Addition::new(test_doc.doc_name()); good_addition.add_field(&f0name, f0data.clone()); good_addition.add_field(&f1name, f1good_data.clone()); test_doc.send(bad_addition); @@ -2110,7 +2110,7 @@ mod document_files { update.get_values_mut().add_field(fname.clone(), new); doc.send(update); doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); - let mut old_addition = Addition::new(); + let mut old_addition = Addition::new(doc.doc_name()); old_addition.add_field(&fname, old); doc.send(old_addition); let result = doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); @@ -2124,7 +2124,7 @@ mod document_files { } _ => unreachable!("got {:?}: should have gotten a reply", action), } - let mut new_addition = Addition::new(); + let mut new_addition = Addition::new(doc.doc_name()); new_addition.add_field(fname.clone(), new); doc.send(new_addition); let result = doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); @@ -2208,7 +2208,7 @@ mod document_files { let mut calc = Calculation::new(Operand::Add); calc.add_value(FieldType::DateTime).unwrap(); calc.add_value(duration.clone()).unwrap(); - let mut addition = Addition::new(); + let mut addition = Addition::new(doc.doc_name()); addition.add_field(&fname, calc); let start = Utc::now() + duration; doc.send(addition); @@ -2302,7 +2302,7 @@ mod document_files { doc.populate([value.into()].to_vec()); doc.send(Delete::new(Query::internal())); doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); - let mut addition = Addition::new(); + let mut addition = Addition::new(doc.doc_name()); addition.add_field(&fname, value.clone()); doc.send(addition); let result = doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); diff --git a/src/document/session.rs b/src/document/session.rs index b377fc4..ac86e3a 100644 --- a/src/document/session.rs +++ b/src/document/session.rs @@ -188,7 +188,7 @@ mod sessions { let mut ids: HashSet = HashSet::new(); let count = 10; for _ in 0..count { - let msg = Setup::message(Addition::new()); + let msg = Setup::message(Addition::new(Session::doc_names()[0].clone())); setup.send(msg); let result = setup.recv().unwrap(); match result.get_action() { @@ -211,7 +211,7 @@ mod sessions { #[test] fn expire_default_is_an_hour_from_now() { let setup = Setup::new(); - let msg = Setup::message(Addition::new()); + let msg = Setup::message(Addition::new(Session::doc_names()[0].clone())); let start_time = Utc::now() + Duration::from_hours(1); setup.send(msg); let result = setup.recv().unwrap(); @@ -238,7 +238,7 @@ mod sessions { fn session_ids_error_when_not_unique() { let setup = Setup::new(); let id = Uuid::new_v4(); - let mut addition = Addition::new(); + let mut addition = Addition::new(Session::doc_names()[0].clone()); addition.add_field(Name::english("id"), id); setup.send(Setup::message(addition.clone())); setup.recv().unwrap(); @@ -259,7 +259,7 @@ mod sessions { let setup = Setup::new(); let id = Uuid::new_v4(); let timestamp = Utc::now() + Duration::from_secs(60); - let mut addition = Addition::new(); + let mut addition = Addition::new(Session::doc_names()[0].clone()); addition.add_field(Name::english("id"), id.clone()); addition.add_field(Name::english("expire"), timestamp); setup.send(Setup::message(addition)); @@ -314,10 +314,10 @@ mod sessions { let duration = Duration::from_secs(60); let expire1 = Utc::now() + duration; let expire2 = Utc::now() - duration; - let mut addition1 = Addition::new(); + let mut addition1 = Addition::new(Session::doc_names()[0].clone()); addition1.add_field(Name::english("id"), id1.clone()); addition1.add_field(Name::english("expire"), expire1); - let mut addition2 = Addition::new(); + let mut addition2 = Addition::new(Session::doc_names()[0].clone()); addition2.add_field(Name::english("id"), id2); addition2.add_field(Name::english("expire"), expire2); setup.send(Setup::message(addition1)); diff --git a/src/lib.rs b/src/lib.rs index f8d6f0c..1e9f1e1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -54,7 +54,11 @@ impl MoreThanText { match result.get_action() { MsgAction::Records(data) => { if data.len() == 0 { - self.recursive_session_request(rx, Addition::new().into(), msg) + self.recursive_session_request( + rx, + Addition::new(Session::doc_names()[0].clone()).into(), + msg, + ) } else { let rec = data.iter().last().unwrap(); let field = rec.get(Name::english("id")).unwrap(); @@ -71,7 +75,7 @@ impl MoreThanText { pub fn validate_session(&mut self, session: Option) -> Uuid { let (tx, rx) = channel(); let sender_id = self.queue.add_sender(tx); - let new_session: MsgAction = Addition::new().into(); + let new_session: MsgAction = Addition::new(Session::doc_names()[0].clone()).into(); let action = match session { Some(data) => match Uuid::try_from(data.as_str()) { Ok(id) => {