From 9dbaaceb80999c10408ac36f45b21a64477d2295 Mon Sep 17 00:00:00 2001 From: Jeff Baskin Date: Mon, 9 Feb 2026 23:32:14 -0500 Subject: [PATCH] Moved addition into action. --- src/action.rs | 2 + src/action/addition.rs | 94 ++++++++++++++++++++++++++++++++++++++ src/action/message.rs | 5 +- src/action/request_data.rs | 2 +- src/document/create.rs | 4 +- src/document/session.rs | 4 +- src/lib.rs | 5 +- src/message/wrapper.rs | 94 -------------------------------------- 8 files changed, 107 insertions(+), 103 deletions(-) create mode 100644 src/action/addition.rs diff --git a/src/action.rs b/src/action.rs index 3e20ad9..9d06931 100644 --- a/src/action.rs +++ b/src/action.rs @@ -1,4 +1,5 @@ mod action_type; +mod addition; mod calculation; mod message; mod query; @@ -10,6 +11,7 @@ pub use crate::document::{ field::{Field, FieldType}, }; pub use action_type::Action; +pub use addition::Addition; pub use calculation::{CalcValue, Calculation, Operand}; pub use message::MsgAction; pub use query::Query; diff --git a/src/action/addition.rs b/src/action/addition.rs new file mode 100644 index 0000000..e6a5e97 --- /dev/null +++ b/src/action/addition.rs @@ -0,0 +1,94 @@ +use super::{CalcValue, Field, RequestData}; +use crate::name::NameType; +use uuid::Uuid; + +#[derive(Clone, Debug)] +pub struct Addition { + data: RequestData, +} + +impl Addition { + pub fn new() -> Self { + Self { + data: RequestData::new(), + } + } + + #[allow(dead_code)] + pub fn add_field(&mut self, name: NT, field: CV) + where + CV: Into, + NT: Into, + { + self.data.add_field(name, field); + } + + pub fn iter(&self) -> impl Iterator { + self.data.iter() + } +} + +#[cfg(test)] +mod additions { + use super::*; + use crate::name::Name; + + #[test] + fn can_add_static_string() { + let mut add = Addition::new(); + let name = Name::english(Uuid::new_v4().to_string().as_str()); + let ntype: NameType = name.clone().into(); + let data = Uuid::new_v4().to_string(); + add.add_field(name.clone(), data.clone()); + assert_eq!(add.iter().count(), 1); + for (field_name, value) in add.iter() { + assert_eq!(field_name, &ntype); + match value { + CalcValue::Value(result) => match result { + Field::StaticString(output) => assert_eq!(output, &data), + _ => unreachable!("got {:?}, should have been a string", result), + }, + _ => unreachable!("got {:?}: should have received value", value), + } + } + } + + #[test] + fn can_add_uuid() { + let mut add = Addition::new(); + let name = Name::english(Uuid::new_v4().to_string().as_str()); + let ntype: NameType = name.clone().into(); + let data = Uuid::new_v4(); + add.add_field(name.clone(), data.clone()); + assert_eq!(add.iter().count(), 1); + for (field_name, value) in add.iter() { + assert_eq!(field_name, &ntype); + match value { + CalcValue::Value(result) => match result { + Field::Uuid(output) => assert_eq!(output, &data), + _ => unreachable!("got {:?}, should have been a string", result), + }, + _ => unreachable!("got {:?}: should have received value", value), + } + } + } + + /* + #[test] + fn can_get_document() { + let mut add = Addition::new(); + let name = Name::english(Uuid::new_v4().to_string().as_str()); + let data = Uuid::new_v4(); + add.add_field(name.clone(), data.clone()); + let doc = add.get_document(); + let output = doc.get_field(&name); + match output { + CalcValue::Value(holder) => match holder { + Field::Uuid(result) => assert_eq!(result, &data), + _ => unreachable!("should have received uuid"), + }, + _ => unreachable!("got {:?}: should have received value", output), + } + } + */ +} diff --git a/src/action/message.rs b/src/action/message.rs index b704d12..78e98d0 100644 --- a/src/action/message.rs +++ b/src/action/message.rs @@ -1,6 +1,6 @@ -use super::{DocDef, Query, UserAction}; +use super::{Addition, DocDef, Query, UserAction}; use crate::{ - message::wrapper::{Addition, Delete, Records, Reply, Update}, + message::wrapper::{Delete, Records, Reply, Update}, mtterror::MTTError, name::NameType, queue::data_director::Register, @@ -27,6 +27,7 @@ pub enum MsgAction { impl MsgAction { fn doc_name(&self) -> NameType { match self { + Self::Addition(data) => NameType::None, Self::Query(data) => data.doc_name(), _ => NameType::None, } diff --git a/src/action/request_data.rs b/src/action/request_data.rs index 882dead..3b360e6 100644 --- a/src/action/request_data.rs +++ b/src/action/request_data.rs @@ -10,7 +10,7 @@ pub struct RequestData { } impl RequestData { - fn new() -> Self { + pub fn new() -> Self { Self { data: HashMap::new(), } diff --git a/src/document/create.rs b/src/document/create.rs index da66979..05e829e 100644 --- a/src/document/create.rs +++ b/src/document/create.rs @@ -811,9 +811,9 @@ impl DocumentFile { mod document_files { use super::*; use crate::{ - action::Operand, + action::{Addition, Operand}, document::field::FieldType, - message::wrapper::{Addition, Delete}, + message::wrapper::Delete, name::{Name, Names}, support_tests::TIMEOUT, }; diff --git a/src/document/session.rs b/src/document/session.rs index 8d45997..b377fc4 100644 --- a/src/document/session.rs +++ b/src/document/session.rs @@ -85,13 +85,13 @@ impl Session { mod sessions { use super::*; use crate::{ - action::{MsgAction, Query}, + action::{Addition, MsgAction, Query}, document::{ clock::{clock_test_support::gen_clock_message, Clock}, create::CreateDoc, field::Field, }, - message::wrapper::{Addition, Records}, + message::wrapper::Records, mtterror::MTTError, name::{Name, NameType, Names}, queue::data_director::{Include, Path, RegMsg, Register}, diff --git a/src/lib.rs b/src/lib.rs index 7ffc08c..f8d6f0c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,10 +6,11 @@ mod name; mod queue; use action::{ - Action, CalcValue, Calculation, DocDef, Field, FieldType, MsgAction, Operand, Query, UserAction, + Action, Addition, CalcValue, Calculation, DocDef, Field, FieldType, MsgAction, Operand, Query, + UserAction, }; use document::{clock::Clock, create::CreateDoc, session::Session}; -use message::wrapper::{Addition, Message}; +use message::wrapper::Message; use queue::{ data_director::{Include, Path, RegMsg, Register}, router::Queue, diff --git a/src/message/wrapper.rs b/src/message/wrapper.rs index b3dc5f3..a844930 100644 --- a/src/message/wrapper.rs +++ b/src/message/wrapper.rs @@ -237,100 +237,6 @@ mod messages { } } -#[derive(Clone, Debug)] -pub struct Addition { - data: Document, -} - -impl Addition { - pub fn new() -> Self { - Self { - data: Document::new(), - } - } - - #[allow(dead_code)] - pub fn add_field(&mut self, name: NT, field: CV) - where - CV: Into, - NT: Into, - { - self.data.add_field(name, field); - } - - #[allow(dead_code)] - fn get_field(&self, name: NT) -> &CalcValue - where - NT: Into, - { - self.data.get_field(name) - } - - #[allow(dead_code)] - fn get_document(&self) -> Document { - self.data.clone() - } - - pub fn iter(&self) -> impl Iterator { - self.data.iter() - } -} - -#[cfg(test)] -mod additions { - use super::*; - use crate::name::Name; - - #[test] - fn can_add_static_string() { - let mut add = Addition::new(); - let name = Name::english(Uuid::new_v4().to_string().as_str()); - let data = Uuid::new_v4().to_string(); - add.add_field(name.clone(), data.clone()); - let result = add.get_field(&name); - match result { - CalcValue::Value(result) => match result { - Field::StaticString(output) => assert_eq!(output, &data), - _ => unreachable!("got {:?}, should have been a string", result), - }, - _ => unreachable!("got {:?}: should have received value", result), - } - } - - #[test] - fn can_add_uuid() { - let mut add = Addition::new(); - let name = Name::english(Uuid::new_v4().to_string().as_str()); - let data = Uuid::new_v4(); - add.add_field(name.clone(), data.clone()); - let output = add.get_field(&name); - match output { - CalcValue::Value(result) => match result { - Field::Uuid(result) => assert_eq!(result, &data), - _ => unreachable!("got {:?}: should have received uuid", result), - }, - _ => unreachable!("got {:?}: should have received value", output), - } - } - - #[test] - fn can_get_document() { - let mut add = Addition::new(); - let name = Name::english(Uuid::new_v4().to_string().as_str()); - let data = Uuid::new_v4(); - add.add_field(name.clone(), data.clone()); - let doc = add.get_document(); - let output = doc.get_field(&name); - match output { - CalcValue::Value(holder) => match holder { - Field::Uuid(result) => assert_eq!(result, &data), - _ => unreachable!("should have received uuid"), - }, - _ => unreachable!("got {:?}: should have received value", output), - } - } -} - #[allow(dead_code)] #[derive(Clone, Debug)] pub struct Operation {