From aa4a5b9b7c58ea9ca0bb749ad34f26507adcd10a Mon Sep 17 00:00:00 2001 From: Jeff Baskin Date: Tue, 3 Feb 2026 08:56:42 -0500 Subject: [PATCH] Moved actions into separate sub-module. --- src/document/clock.rs | 5 +- src/document/create.rs | 9 +- src/document/definition.rs | 5 +- src/document/session.rs | 10 +- src/lib.rs | 6 +- src/main.rs | 7 +- src/message.rs | 1 + src/message/action.rs | 185 +++++++++++++++++++++++++++++++++++++ src/message/wrapper.rs | 12 +-- src/queue/data_director.rs | 7 +- src/queue/router.rs | 4 +- 11 files changed, 230 insertions(+), 21 deletions(-) create mode 100644 src/message/action.rs diff --git a/src/document/clock.rs b/src/document/clock.rs index 373f216..1b72edd 100644 --- a/src/document/clock.rs +++ b/src/document/clock.rs @@ -1,5 +1,8 @@ use crate::{ - message::wrapper::{Message, MsgAction, Records}, + message::{ + action::MsgAction, + wrapper::{Message, Records}, + }, name::{Name, NameType, Names}, queue::{ data_director::{RegMsg, Register}, diff --git a/src/document/create.rs b/src/document/create.rs index 5738158..70a5987 100644 --- a/src/document/create.rs +++ b/src/document/create.rs @@ -3,9 +3,12 @@ use crate::{ definition::{DocDef, DocFuncType}, field::Field, }, - message::wrapper::{ - Action, CalcValue, Calculation, InternalRecord, InternalRecords, Message, MsgAction, Oid, - Query, Records, Reply, Update, + message::{ + action::{Action, MsgAction}, + wrapper::{ + CalcValue, Calculation, InternalRecord, InternalRecords, Message, Oid, Query, Records, + Reply, Update, + }, }, mtterror::MTTError, name::NameType, diff --git a/src/document/definition.rs b/src/document/definition.rs index c55b2ec..1b8b02a 100644 --- a/src/document/definition.rs +++ b/src/document/definition.rs @@ -3,7 +3,10 @@ use crate::{ create::IndexType, field::{Field, FieldType}, }, - message::wrapper::{Action, CalcValue, MsgAction}, + message::{ + action::{Action, MsgAction}, + wrapper::CalcValue, + }, mtterror::MTTError, name::{Name, NameType, Names}, queue::data_director::{Include, Path}, diff --git a/src/document/session.rs b/src/document/session.rs index f2ab8ac..5a5043b 100644 --- a/src/document/session.rs +++ b/src/document/session.rs @@ -4,7 +4,10 @@ use crate::{ definition::{DocDef, DocFuncType}, field::FieldType, }, - message::wrapper::{Action, CalcValue, Calculation, Delete, Message, Operand, Query, Update}, + message::{ + action::Action, + wrapper::{CalcValue, Calculation, Delete, Message, Operand, Query, Update}, + }, name::{Name, NameType}, queue::{ data_director::{Include, Path, RegMsg, Register}, @@ -89,7 +92,10 @@ mod sessions { use super::*; use crate::{ document::{clock::Clock, create::CreateDoc, field::Field}, - message::wrapper::{Addition, MsgAction, Query, Records}, + message::{ + action::MsgAction, + wrapper::{Addition, Query, 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 0e742b2..b8c1d63 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -10,8 +10,10 @@ use document::{ field::{Field, FieldType}, session::Session, }; -use message::wrapper::{Action, Addition, CalcValue, Calculation, Message, Operand}; -pub use message::wrapper::{MsgAction, Query}; +use message::{ + action::{Action, MsgAction}, + wrapper::{Addition, CalcValue, Calculation, Message, Operand, Query}, +}; use name::{Name, NameType}; use queue::{ data_director::{Include, Path, RegMsg, Register}, diff --git a/src/main.rs b/src/main.rs index 58b15c9..e2bc65e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,7 +7,8 @@ use axum::{ }; use clap::Parser; //use morethantext::{ActionType, ErrorType, MoreThanText}; -use morethantext::{MoreThanText, MsgAction, Query}; +//use morethantext::{MoreThanText, MsgAction, Query}; +use morethantext::MoreThanText; use std::{collections::HashMap, convert::Infallible}; use tokio::{spawn, sync::mpsc::channel}; use tower_cookies::{Cookie, CookieManagerLayer, Cookies}; @@ -90,13 +91,15 @@ async fn mtt_conn( _body: String, ) -> impl IntoResponse { let (tx, mut rx) = channel(1); + /* let _action = match method { - Method::GET => MsgAction::Query(Query::new()), + //Method::GET => MsgAction::Query(Query::new()), //Method::GET => ActionType::Get, //Method::POST => ActionType::Add, //Method::PATCH => ActionType::Update, _ => unreachable!("reouter should prevent this"), }; + */ let _doc = match path.get("document") { Some(result) => result.clone(), None => "root".to_string(), diff --git a/src/message.rs b/src/message.rs index e4ea5ca..0f3213c 100644 --- a/src/message.rs +++ b/src/message.rs @@ -1 +1,2 @@ +pub mod action; pub mod wrapper; diff --git a/src/message/action.rs b/src/message/action.rs new file mode 100644 index 0000000..e0ab67b --- /dev/null +++ b/src/message/action.rs @@ -0,0 +1,185 @@ +use crate::{ + document::definition::DocDef, + message::wrapper::{Addition, Delete, Query, Records, Reply, Update}, + mtterror::MTTError, + queue::data_director::Register, +}; + +#[derive(Clone, Debug, Eq, Hash, PartialEq)] +pub enum Action { + Addition, + Create, + Delete, + Error, + OnAddition, + OnDelete, + OnQuery, + OnUpdate, + Query, + Records, + Register, + Reply, + Show, + Update, +} + +impl From for Action { + fn from(value: MsgAction) -> Self { + match value { + MsgAction::Addition(_) => Action::Addition, + MsgAction::Create(_) => Action::Create, + MsgAction::Delete(_) => Action::Delete, + MsgAction::Error(_) => Action::Error, + MsgAction::OnAddition(_) => Action::OnAddition, + MsgAction::OnDelete(_) => Action::OnDelete, + MsgAction::OnQuery(_) => Action::OnQuery, + MsgAction::OnUpdate(_) => Action::OnUpdate, + MsgAction::Query(_) => Action::Query, + MsgAction::Records(_) => Action::Records, + MsgAction::Register(_) => Action::Register, + MsgAction::Reply(_) => Action::Reply, + MsgAction::Show => Action::Show, + MsgAction::Update(_) => Action::Update, + } + } +} + +impl From<&MsgAction> for Action { + fn from(value: &MsgAction) -> Self { + let action = value.clone(); + Self::from(action) + } +} + +#[derive(Clone, Debug)] +pub enum MsgAction { + Addition(Addition), + Create(DocDef), + Error(MTTError), + OnAddition(Records), + OnDelete(Records), + OnQuery(Records), + OnUpdate(Records), + Query(Query), + Records(Records), + Register(Register), + Reply(Reply), + Show, + Delete(Delete), + Update(Update), +} + +impl From for MsgAction { + fn from(value: Addition) -> Self { + MsgAction::Addition(value) + } +} + +impl From for MsgAction { + fn from(value: Delete) -> Self { + MsgAction::Delete(value) + } +} + +impl From for MsgAction { + fn from(value: DocDef) -> Self { + MsgAction::Create(value) + } +} + +impl From for MsgAction { + fn from(value: MTTError) -> Self { + MsgAction::Error(value) + } +} + +impl From for MsgAction { + fn from(value: Query) -> Self { + MsgAction::Query(value) + } +} + +impl From for MsgAction { + fn from(value: Records) -> Self { + MsgAction::Records(value) + } +} + +impl From for MsgAction { + fn from(value: Register) -> Self { + MsgAction::Register(value) + } +} + +impl From for MsgAction { + fn from(value: Reply) -> Self { + MsgAction::Reply(value) + } +} + +impl From for MsgAction { + fn from(value: Update) -> Self { + MsgAction::Update(value) + } +} + +#[cfg(test)] +mod msgactions { + use super::*; + use crate::name::Name; + use uuid::Uuid; + + #[test] + fn turn_document_definition_into_action() { + let name = Name::english(Uuid::new_v4().to_string().as_str()); + let value = DocDef::new(name.clone()); + let result: MsgAction = value.into(); + match result { + MsgAction::Create(def) => assert_eq!(def.get_document_names(), &[name].to_vec()), + _ => unreachable!("Got {:?}: dhould have been create", result), + } + } + + #[test] + fn turn_error_into_action() { + let data = "data".to_string(); + let value = MTTError::DocumentAlreadyExists(data.clone()); + let result: MsgAction = value.into(); + match result { + MsgAction::Error(result) => match result { + MTTError::DocumentAlreadyExists(output) => assert_eq!(output, data), + _ => unreachable!("Got {:?}: dhould have been create", result), + }, + _ => unreachable!("Got {:?}: dhould have been create", result), + } + let value = MTTError::DocumentNotFound(data.clone()); + let result: MsgAction = value.into(); + match result { + MsgAction::Error(result) => match result { + MTTError::DocumentNotFound(output) => assert_eq!(output, data), + _ => unreachable!("Got {:?}: dhould have been create", result), + }, + _ => unreachable!("Got {:?}: dhould have been create", result), + } + } + + #[test] + fn turn_query_into_action() { + let value = Query::new(); + let result: MsgAction = value.into(); + match result { + MsgAction::Query(_) => {} + _ => unreachable!("Got {:?}: dhould have been query", result), + } + } + + #[test] + fn turn_reply_into_action() { + let value = Reply::new(); + let result: MsgAction = value.into(); + match result { + MsgAction::Reply(_) => {} + _ => unreachable!("Got {:?}: dhould have been reply", result), + } + } +} diff --git a/src/message/wrapper.rs b/src/message/wrapper.rs index ba2f942..3d4e532 100644 --- a/src/message/wrapper.rs +++ b/src/message/wrapper.rs @@ -1,11 +1,9 @@ use crate::{ - document::{ - definition::DocDef, - field::{Field, FieldType}, - }, + document::field::{Field, FieldType}, + message::action::MsgAction, mtterror::MTTError, name::{NameType, Names}, - queue::data_director::{Include, Path, Register, Route}, + queue::data_director::{Include, Path, Route}, }; use chrono::prelude::*; use std::{ @@ -14,6 +12,7 @@ use std::{ }; use uuid::Uuid; +/* #[derive(Clone, Debug, Eq, Hash, PartialEq)] pub enum Action { Addition, @@ -209,6 +208,7 @@ mod msgactions { } } } +*/ #[derive(Clone, Debug)] pub struct Message { @@ -286,7 +286,7 @@ impl Message { #[cfg(test)] mod messages { use super::*; - use crate::name::Name; + use crate::{document::definition::DocDef, name::Name}; #[test] fn can_the_document_be_a_named_reference() { diff --git a/src/queue/data_director.rs b/src/queue/data_director.rs index 409d79f..911fd05 100644 --- a/src/queue/data_director.rs +++ b/src/queue/data_director.rs @@ -1,5 +1,8 @@ use crate::{ - message::wrapper::{Action, Message, MsgAction}, + message::{ + action::{Action, MsgAction}, + wrapper::Message, + }, mtterror::MTTError, name::{Name, NameType, Names}, queue::router::Queue, @@ -120,7 +123,7 @@ impl Path { mod paths { use super::*; use crate::{ - message::wrapper::{MsgAction, Records}, + message::{action::MsgAction, wrapper::Records}, name::{Name, Names}, }; diff --git a/src/queue/router.rs b/src/queue/router.rs index 7b1e1ee..a305043 100644 --- a/src/queue/router.rs +++ b/src/queue/router.rs @@ -97,7 +97,7 @@ impl Queue { mod routers { use super::*; use crate::{ - message::wrapper::{MsgAction, Query}, + message::{action::MsgAction, wrapper::Query}, name::Name, support_tests::TIMEOUT, }; @@ -242,7 +242,7 @@ mod routers { mod queues { use super::*; use crate::{ - message::wrapper::MsgAction, + message::action::MsgAction, mtterror::MTTError, name::Name, queue::data_director::{Include, Path},