From 445cbb57f13b0e99fe1e4a575863bc5f18ad1b79 Mon Sep 17 00:00:00 2001 From: Jeff Baskin Date: Sat, 7 Feb 2026 23:13:24 -0500 Subject: [PATCH] Added request information. --- src/action.rs | 2 + src/action/request_data.rs | 88 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 src/action/request_data.rs diff --git a/src/action.rs b/src/action.rs index c694a25..7f6d9e6 100644 --- a/src/action.rs +++ b/src/action.rs @@ -1,6 +1,7 @@ mod action_type; mod message; mod query; +mod request_data; mod user; pub use action_type::Action; @@ -8,3 +9,4 @@ pub use crate::document::{definition::DocDef, field::FieldType}; pub use message::MsgAction; pub use query::Query; pub use user::UserAction; +use request_data::RequestData; diff --git a/src/action/request_data.rs b/src/action/request_data.rs new file mode 100644 index 0000000..92ff3e6 --- /dev/null +++ b/src/action/request_data.rs @@ -0,0 +1,88 @@ +use crate::{ + document::field::Field, + message::wrapper::CalcValue, + name::NameType, +}; +use std::collections::HashMap; + +#[derive(Clone, Debug)] +pub struct RequestData { + data: HashMap, +} + +impl RequestData { + fn new() -> Self { + Self { + data: HashMap::new(), + } + } + + pub fn add_field(&mut self, name: NT, field: CV) + where + CV: Into, + NT: Into, + { + self.data.insert(name.into(), field.into()); + } + + fn get_field(&self, name: NT) -> &CalcValue + where + NT: Into, + { + match self.data.get(&name.into()) { + Some(data) => data, + None => &CalcValue::None, + } + } + + fn get_all(&self) -> Vec<(NameType, Field)> { + let mut output = Vec::new(); + for (key, value) in self.data.iter() { + output.push((key.clone(), value.get(&Field::None))); + } + output + } + + pub fn iter(&self) -> impl Iterator { + self.data.iter() + } +} + +#[cfg(test)] +mod request_datum { + use super::*; + use crate::name::Name; + use uuid::Uuid; + + #[test] + fn can_add_static_string() { + let mut add = RequestData::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(holder) => match holder { + Field::StaticString(result) => assert_eq!(result, &data), + _ => unreachable!("got {:?}: should have received static string", holder), + }, + _ => unreachable!("got {:?}, should have been value", result), + } + } + + #[test] + fn can_add_uuid() { + let mut add = RequestData::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 result = add.get_field(&name); + match result { + CalcValue::Value(holder) => match holder { + Field::Uuid(result) => assert_eq!(result, &data), + _ => unreachable!("got {:?}: should have received static string", holder), + }, + _ => unreachable!("got {:?}, should have been value", result), + } + } +}