Made records produce a document name.
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 1s

This commit is contained in:
Jeff Baskin 2026-02-13 15:04:16 -05:00
parent 115910120c
commit 62335d8682
7 changed files with 74 additions and 20 deletions

View File

@ -31,9 +31,14 @@ impl MessageAction for MsgAction {
fn doc_name(&self) -> &NameType { fn doc_name(&self) -> &NameType {
match self { match self {
Self::Addition(data) => data.doc_name(), Self::Addition(data) => data.doc_name(),
Self::Query(data) => data.doc_name(),
Self::Create(data) => data.doc_name(), Self::Create(data) => data.doc_name(),
Self::Error(data) => data.doc_name(), Self::Error(data) => data.doc_name(),
Self::OnAddition(data) => data.doc_name(),
Self::OnDelete(data) => data.doc_name(),
Self::OnQuery(data) => data.doc_name(),
Self::OnUpdate(data) => data.doc_name(),
Self::Query(data) => data.doc_name(),
Self::Records(data) => data.doc_name(),
_ => &NameType::None, _ => &NameType::None,
} }
} }

View File

@ -22,21 +22,27 @@ impl Clock {
Self { queue: queue } Self { queue: queue }
} }
pub fn doc_names() -> Vec<Name> {
vec![Name::english("clock")]
}
/*
fn get_name() -> Name { fn get_name() -> Name {
Name::english("clock") Name::english("clock")
} }
*/
fn gen_message() -> Message { fn gen_message() -> Message {
Message::new( Message::new(
Clock::get_name(), Clock::doc_names()[0].clone(),
MsgAction::OnUpdate(Records::new(Names::new())), MsgAction::OnUpdate(Records::new(Clock::doc_names(), Names::new())),
) )
} }
pub fn get_path() -> Path { pub fn get_path() -> Path {
Path::new( Path::new(
Include::All, Include::All,
Include::Just(Clock::get_name().into()), Include::Just(Clock::doc_names()[0].clone().into()),
Include::Just(Action::OnUpdate), Include::Just(Action::OnUpdate),
) )
} }
@ -45,7 +51,7 @@ impl Clock {
let clock = Clock::new(queue.clone()); let clock = Clock::new(queue.clone());
let (tx, rx) = channel(); let (tx, rx) = channel();
let id = queue.add_sender(tx); let id = queue.add_sender(tx);
let reg_msg = Register::new(id, RegMsg::AddDocName([Clock::get_name()].to_vec())); let reg_msg = Register::new(id, RegMsg::AddDocName(Clock::doc_names()));
let msg = Message::new(NameType::None, reg_msg.clone()); let msg = Message::new(NameType::None, reg_msg.clone());
queue.send(msg); queue.send(msg);
rx.recv().unwrap(); rx.recv().unwrap();
@ -99,7 +105,7 @@ mod clocks {
let end = Utc::now(); let end = Utc::now();
assert!((end - start) > TimeDelta::seconds(1)); assert!((end - start) > TimeDelta::seconds(1));
assert!((end - start) < TimeDelta::seconds(2)); assert!((end - start) < TimeDelta::seconds(2));
let reg_request = Register::new(id, RegMsg::GetNameID(Clock::get_name())); let reg_request = Register::new(id, RegMsg::GetNameID(Clock::doc_names()[0].clone()));
queue.send(Message::new(NameType::None, reg_request)); queue.send(Message::new(NameType::None, reg_request));
rx.recv_timeout(TIMEOUT).unwrap(); rx.recv_timeout(TIMEOUT).unwrap();
for msg in holder.iter() { for msg in holder.iter() {

View File

@ -616,7 +616,10 @@ impl DocumentFile {
}; };
holder.insert(field_id.clone(), corrected.clone()); holder.insert(field_id.clone(), corrected.clone());
} }
let mut records = Records::new(self.docdef.get_field_names().clone()); let mut records = Records::new(
self.docdef.get_document_names().clone(),
self.docdef.get_field_names().clone(),
);
if !holder.is_empty() { if !holder.is_empty() {
let mut oid = Oid::new(); let mut oid = Oid::new();
while self.docs.contains_key(&oid) { while self.docs.contains_key(&oid) {
@ -653,7 +656,11 @@ impl DocumentFile {
} }
self.docs.remove(oid); self.docs.remove(oid);
} }
let rec = Records::with_data(self.docdef.get_field_names().clone(), records); let rec = Records::with_data(
self.docdef.get_document_names().clone(),
self.docdef.get_field_names().clone(),
records,
);
self.queue.send(msg.response(rec.clone())); self.queue.send(msg.response(rec.clone()));
self.queue.send(msg.response(MsgAction::OnDelete(rec))); self.queue.send(msg.response(MsgAction::OnDelete(rec)));
} }
@ -722,7 +729,11 @@ impl DocumentFile {
return; return;
} }
}; };
let recs = Records::with_data(self.docdef.get_field_names().clone(), records); let recs = Records::with_data(
self.docdef.get_document_names().clone(),
self.docdef.get_field_names().clone(),
records,
);
self.queue.send(msg.response(recs.clone())); self.queue.send(msg.response(recs.clone()));
self.queue.send(msg.response(MsgAction::OnQuery(recs))); self.queue.send(msg.response(MsgAction::OnQuery(recs)));
} }
@ -769,7 +780,11 @@ impl DocumentFile {
} }
self.docs.insert(oid.clone(), new_rec.clone()); self.docs.insert(oid.clone(), new_rec.clone());
} }
let recs = Records::with_data(self.docdef.get_field_names().clone(), updates); let recs = Records::with_data(
self.docdef.get_document_names().clone(),
self.docdef.get_field_names().clone(),
updates,
);
self.queue self.queue
.send(msg.response(MsgAction::OnUpdate(recs.clone()))); .send(msg.response(MsgAction::OnUpdate(recs.clone())));
Ok(recs) Ok(recs)
@ -822,8 +837,8 @@ impl DocumentFile {
mod document_files { mod document_files {
use super::*; use super::*;
use crate::{ use crate::{
action::{Addition, Operand}, action::{Addition, FieldType, Operand},
document::field::FieldType, document::Clock,
message::wrapper::Delete, message::wrapper::Delete,
name::{Name, Names}, name::{Name, Names},
support_tests::TIMEOUT, support_tests::TIMEOUT,
@ -2406,7 +2421,7 @@ mod document_files {
} }
let trigger = Message::new( let trigger = Message::new(
Name::english("clock"), Name::english("clock"),
MsgAction::OnUpdate(Records::new(Names::new())), MsgAction::OnUpdate(Records::new(Clock::doc_names(), Names::new())),
); );
queue.send(trigger.clone()); queue.send(trigger.clone());
sleep(TIMEOUT); sleep(TIMEOUT);

View File

@ -199,7 +199,6 @@ impl PathAction {
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct DocDef { pub struct DocDef {
doc_name: NameType,
doc_names: Vec<Name>, doc_names: Vec<Name>,
field_names: Names, field_names: Names,
fields: HashMap<Uuid, FieldSetting>, fields: HashMap<Uuid, FieldSetting>,
@ -257,7 +256,6 @@ impl DocDef {
), ),
]; ];
Self { Self {
doc_name: NameType::None,
doc_names: names, doc_names: names,
field_names: Names::new(), field_names: Names::new(),
fields: HashMap::new(), fields: HashMap::new(),
@ -376,7 +374,7 @@ impl DocDef {
impl MessageAction for DocDef { impl MessageAction for DocDef {
fn doc_name(&self) -> &NameType { fn doc_name(&self) -> &NameType {
&self.doc_name &NameType::None
} }
} }

View File

@ -1,5 +1,6 @@
use crate::{ use crate::{
action::Field, action::Field,
message::MessageAction,
mtterror::{ErrorID, MTTError}, mtterror::{ErrorID, MTTError},
name::{Name, NameType, Names}, name::{Name, NameType, Names},
}; };
@ -142,20 +143,23 @@ impl Record {
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct Records { pub struct Records {
doc_name: NameType,
names: Names, names: Names,
data: InternalRecords, data: InternalRecords,
} }
impl Records { impl Records {
pub fn new(names: Names) -> Self { pub fn new(doc_names: Vec<Name>, names: Names) -> Self {
Self { Self {
doc_name: doc_names[0].clone().into(),
names: names, names: names,
data: InternalRecords::new(), data: InternalRecords::new(),
} }
} }
pub fn with_data(names: Names, records: InternalRecords) -> Self { pub fn with_data(doc_names: Vec<Name>, names: Names, records: InternalRecords) -> Self {
Self { Self {
doc_name: doc_names[0].clone().into(),
names: names, names: names,
data: records, data: records,
} }
@ -178,6 +182,12 @@ impl Records {
} }
} }
impl MessageAction for Records {
fn doc_name(&self) -> &NameType {
&self.doc_name
}
}
struct RecordIter { struct RecordIter {
names: Names, names: Names,
recs: Vec<InternalRecord>, recs: Vec<InternalRecord>,
@ -202,3 +212,24 @@ impl Iterator for RecordIter {
} }
} }
} }
#[cfg(test)]
mod records {
use super::*;
#[test]
fn does_recourds_store_document_name() {
let doc_name = Name::english(uuid::Uuid::new_v4().to_string().as_str());
let expected: NameType = doc_name.clone().into();
let recs = Records::new(vec![doc_name.clone()], Names::new());
assert_eq!(recs.doc_name(), &expected);
}
#[test]
fn does_records_with_data_store_document_name() {
let doc_name = Name::english(uuid::Uuid::new_v4().to_string().as_str());
let expected: NameType = doc_name.clone().into();
let recs = Records::with_data(vec![doc_name.clone()], Names::new(), InternalRecords::new());
assert_eq!(recs.doc_name(), &expected);
}
}

View File

@ -266,7 +266,6 @@ impl Operation {
} }
} }
#[allow(dead_code)] #[allow(dead_code)]
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct Reply { pub struct Reply {

View File

@ -131,7 +131,7 @@ mod paths {
(Name::english("one"), MsgAction::Show), (Name::english("one"), MsgAction::Show),
( (
Name::english("two"), Name::english("two"),
MsgAction::Records(Records::new(Names::new())), MsgAction::Records(Records::new(vec![Name::english("two")], Names::new())),
), ),
]; ];
for item in input.iter() { for item in input.iter() {