Made name ids available to document file.
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 1s

This commit is contained in:
Jeff Baskin 2025-11-08 11:29:17 -05:00
parent df4671761c
commit 4d54b07276

View File

@ -201,7 +201,7 @@ mod msgactions {
let value = DocDef::new(name.clone()); let value = DocDef::new(name.clone());
let result: MsgAction = value.into(); let result: MsgAction = value.into();
match result { match result {
MsgAction::Create(def) => assert_eq!(def.get_document_name(), &name), MsgAction::Create(def) => assert_eq!(def.get_document_names(), &[name].to_vec()),
_ => unreachable!("Got {:?}: dhould have been create", result), _ => unreachable!("Got {:?}: dhould have been create", result),
} }
} }
@ -590,18 +590,22 @@ impl Names {
} }
} }
fn add_name(&mut self, name: Name) -> Result<Uuid, MTTError> { fn add_names(&mut self, names: Vec<Name>) -> Result<Uuid, MTTError> {
for name in names.iter() {
if self.names.contains_key(&name) { if self.names.contains_key(&name) {
return Err(MTTError::NameDuplicate(name)); return Err(MTTError::NameDuplicate(name.clone()));
}
} }
let mut id = Uuid::new_v4(); let mut id = Uuid::new_v4();
while self.ids.contains_key(&id) { while self.ids.contains_key(&id) {
id = Uuid::new_v4(); id = Uuid::new_v4();
} }
for name in names.iter() {
self.names.insert(name.clone(), id.clone()); self.names.insert(name.clone(), id.clone());
let mut holder: HashMap<Language, Name> = HashMap::new(); let mut holder: HashMap<Language, Name> = HashMap::new();
holder.insert(name.get_language().clone(), name); holder.insert(name.get_language().clone(), name.clone());
self.ids.insert(id.clone(), holder); self.ids.insert(id.clone(), holder);
}
Ok(id) Ok(id)
} }
@ -701,7 +705,7 @@ mod names {
let mut ids: HashSet<Uuid> = HashSet::new(); let mut ids: HashSet<Uuid> = HashSet::new();
for item in data.iter() { for item in data.iter() {
let name = Name::english(item.clone()); let name = Name::english(item.clone());
ids.insert(names.add_name(name).unwrap()); ids.insert(names.add_names([name].to_vec()).unwrap());
} }
assert_eq!(ids.len(), data.len()); assert_eq!(ids.len(), data.len());
} }
@ -713,7 +717,7 @@ mod names {
let mut ids: HashMap<Name, Uuid> = HashMap::new(); let mut ids: HashMap<Name, Uuid> = HashMap::new();
for item in data.iter() { for item in data.iter() {
let name = Name::english(item.clone()); let name = Name::english(item.clone());
ids.insert(name.clone(), names.add_name(name).unwrap()); ids.insert(name.clone(), names.add_names([name].to_vec()).unwrap());
} }
for (name, id) in ids.iter() { for (name, id) in ids.iter() {
assert_eq!( assert_eq!(
@ -759,7 +763,7 @@ mod names {
let mut names = Names::new(); let mut names = Names::new();
let name = Name::english("task"); let name = Name::english("task");
let lang = Language::from_639_1("ja").unwrap(); let lang = Language::from_639_1("ja").unwrap();
let id = names.add_name(name).unwrap(); let id = names.add_names([name].to_vec()).unwrap();
let result = names.get_name(&id, &lang); let result = names.get_name(&id, &lang);
match result { match result {
Ok(_) => unreachable!("got {:?}, should be invalid id error", result), Ok(_) => unreachable!("got {:?}, should be invalid id error", result),
@ -775,8 +779,8 @@ mod names {
let mut names = Names::new(); let mut names = Names::new();
let data = "test"; let data = "test";
let name = Name::english(data); let name = Name::english(data);
let id = names.add_name(name.clone()); let id = names.add_names([name.clone()].to_vec());
let output = names.add_name(name.clone()); let output = names.add_names([name.clone()].to_vec());
match output { match output {
Ok(_) => unreachable!( Ok(_) => unreachable!(
"got {:?}, should have produced duplicate name error", "got {:?}, should have produced duplicate name error",
@ -796,7 +800,7 @@ mod names {
let alt = "テスト"; let alt = "テスト";
let english = Name::english(data); let english = Name::english(data);
let japanese = Name::japanese(alt); let japanese = Name::japanese(alt);
let id = names.add_name(english.clone()).unwrap(); let id = names.add_names([english.clone()].to_vec()).unwrap();
let result = names.add_translation(english, japanese.clone()).unwrap(); let result = names.add_translation(english, japanese.clone()).unwrap();
assert_eq!(result, id); assert_eq!(result, id);
let output = names.get_name(&id, &Language::from_639_1("ja").unwrap()); let output = names.get_name(&id, &Language::from_639_1("ja").unwrap());
@ -828,8 +832,8 @@ mod names {
let alt = "テスト"; let alt = "テスト";
let english = Name::english(data); let english = Name::english(data);
let japanese = Name::japanese(alt); let japanese = Name::japanese(alt);
let id = names.add_name(english.clone()).unwrap(); let id = names.add_names([english.clone()].to_vec()).unwrap();
let id = names.add_name(japanese.clone()).unwrap(); let id = names.add_names([japanese.clone()].to_vec()).unwrap();
let result = names.add_translation(english, japanese.clone()); let result = names.add_translation(english, japanese.clone());
match result { match result {
Ok(_) => unreachable!( Ok(_) => unreachable!(
@ -848,7 +852,7 @@ mod names {
let mut names = Names::new(); let mut names = Names::new();
let data = "data"; let data = "data";
let english = Name::english(data); let english = Name::english(data);
let id = names.add_name(english.clone()).unwrap(); let id = names.add_names([english.clone()].to_vec()).unwrap();
let msg_id = Uuid::new_v4(); let msg_id = Uuid::new_v4();
let action = Action::Query; let action = Action::Query;
let path = Path::new( let path = Path::new(
@ -867,7 +871,7 @@ mod names {
let mut names = Names::new(); let mut names = Names::new();
let data = "data"; let data = "data";
let english = Name::english(data); let english = Name::english(data);
let id = names.add_name(english.clone()).unwrap(); let id = names.add_names([english.clone()].to_vec()).unwrap();
let msg_id = Uuid::new_v4(); let msg_id = Uuid::new_v4();
let action = Action::Error; let action = Action::Error;
let path = Path::new( let path = Path::new(
@ -960,7 +964,8 @@ mod names {
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
enum RegMsg { enum RegMsg {
AddRoute(Path), AddRoute(Path),
AddDocName(Name), AddDocName(Vec<Name>),
DocumentNameID(Uuid),
Error(MTTError), Error(MTTError),
Ok, Ok,
} }
@ -1205,8 +1210,8 @@ impl DocRegistry {
fn register_action(&mut self, reg: &Register) -> Register { fn register_action(&mut self, reg: &Register) -> Register {
match reg.get_msg() { match reg.get_msg() {
RegMsg::AddDocName(name) => match self.doc_names.add_name(name.clone()) { RegMsg::AddDocName(names) => match self.doc_names.add_names(names.clone()) {
Ok(_) => reg.response(RegMsg::Ok), Ok(id) => reg.response(RegMsg::DocumentNameID(id.clone())),
Err(err) => reg.response(RegMsg::Error(err)), Err(err) => reg.response(RegMsg::Error(err)),
}, },
RegMsg::AddRoute(path) => { RegMsg::AddRoute(path) => {
@ -1388,7 +1393,7 @@ mod queues {
fn add_document(&mut self, name: Name) { fn add_document(&mut self, name: Name) {
let (tx, rx) = channel(); let (tx, rx) = channel();
let id = self.queue.add_sender(tx); let id = self.queue.add_sender(tx);
let reg_msg = Register::new(id.clone(), RegMsg::AddDocName(name.clone())); let reg_msg = Register::new(id.clone(), RegMsg::AddDocName([name.clone()].to_vec()));
let msg = Message::new(NameType::None, reg_msg); let msg = Message::new(NameType::None, reg_msg);
self.queue.send(msg.clone()).unwrap(); self.queue.send(msg.clone()).unwrap();
let result = rx.recv_timeout(TIMEOUT).unwrap(); let result = rx.recv_timeout(TIMEOUT).unwrap();
@ -1456,13 +1461,21 @@ mod queues {
} }
#[test] #[test]
fn can_register_document_name() { fn document_names_have_unique_id() {
let mut tester = TestQueue::new(); let mut tester = TestQueue::new();
let mut queue = tester.get_queue(); let mut queue = tester.get_queue();
let doc_name = Name::english(Uuid::new_v4().to_string().as_str()); let names = [
Name::english("one"),
Name::english("two"),
Name::english("three"),
Name::english("four"),
Name::english("five"),
];
let mut ids: Vec<Uuid> = Vec::new();
for name in names.iter() {
let reg_msg = Register::new( let reg_msg = Register::new(
tester.get_preset_id().clone(), tester.get_preset_id().clone(),
RegMsg::AddDocName(doc_name.clone()), RegMsg::AddDocName([name.clone()].to_vec()),
); );
let msg = Message::new(NameType::None, reg_msg); let msg = Message::new(NameType::None, reg_msg);
queue.send(msg.clone()).unwrap(); queue.send(msg.clone()).unwrap();
@ -1471,12 +1484,27 @@ mod queues {
let action = result.get_action(); let action = result.get_action();
match action { match action {
MsgAction::Register(data) => match data.get_msg() { MsgAction::Register(data) => match data.get_msg() {
RegMsg::Ok => {} RegMsg::DocumentNameID(data) => {
assert!(!ids.contains(data), "{} already in {:?}", data, ids);
ids.push(data.clone());
}
_ => unreachable!("got {:?}, should have been register ok", action), _ => unreachable!("got {:?}, should have been register ok", action),
}, },
_ => unreachable!("got {:?}, should have been register ok", action), _ => unreachable!("got {:?}, should have been register ok", action),
} }
} }
}
#[test]
fn can_register_multiple_names_at_once() {
let mut tester = TestQueue::new();
let mut queue = tester.get_queue();
let names = [Name::english("one"), Name::japanese("")].to_vec();
let reg_msg = Register::new(
tester.get_preset_id().clone(),
RegMsg::AddDocName(names.clone()),
);
}
#[test] #[test]
fn errors_on_duplicate_names() { fn errors_on_duplicate_names() {
@ -1486,7 +1514,7 @@ mod queues {
let doc_name = Name::english(Uuid::new_v4().to_string().as_str()); let doc_name = Name::english(Uuid::new_v4().to_string().as_str());
let reg_msg = Register::new( let reg_msg = Register::new(
tester.get_preset_id().clone(), tester.get_preset_id().clone(),
RegMsg::AddDocName(doc_name.clone()), RegMsg::AddDocName([doc_name.clone()].to_vec()),
); );
let msg = Message::new(NameType::None, reg_msg.clone()); let msg = Message::new(NameType::None, reg_msg.clone());
queue.send(msg.clone()).unwrap(); queue.send(msg.clone()).unwrap();
@ -2475,9 +2503,19 @@ impl IndexType {
} }
} }
#[derive(Clone, Debug)]
struct Triggers {
/*
* HashMap<DocumentName, HashMap<ActionType, MsgAction>>
* document name
* action type
* response action
*/
}
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
struct DocDef { struct DocDef {
doc_name: Name, doc_names: Vec<Name>,
field_names: Names, field_names: Names,
fields: HashMap<Uuid, FieldSetting>, fields: HashMap<Uuid, FieldSetting>,
indexes: HashMap<Uuid, IndexType>, indexes: HashMap<Uuid, IndexType>,
@ -2486,15 +2524,19 @@ struct DocDef {
impl DocDef { impl DocDef {
fn new(name: Name) -> Self { fn new(name: Name) -> Self {
Self { Self {
doc_name: name, doc_names: [name].to_vec(),
field_names: Names::new(), field_names: Names::new(),
fields: HashMap::new(), fields: HashMap::new(),
indexes: HashMap::new(), indexes: HashMap::new(),
} }
} }
fn get_document_name(&self) -> &Name { fn with_names(names: Name) -> Self {
&self.doc_name todo!("with an existing list of names");
}
fn get_document_names(&self) -> &Vec<Name> {
&self.doc_names
} }
fn get_field_names(&self) -> &Names { fn get_field_names(&self) -> &Names {
@ -2506,7 +2548,7 @@ impl DocDef {
} }
fn add_field(&mut self, name: Name, ftype: FieldType) { fn add_field(&mut self, name: Name, ftype: FieldType) {
let id = self.field_names.add_name(name).unwrap(); let id = self.field_names.add_names([name].to_vec()).unwrap();
self.fields.insert(id, FieldSetting::new(ftype)); self.fields.insert(id, FieldSetting::new(ftype));
} }
@ -3546,7 +3588,7 @@ mod records {
let mut name_ids: HashMap<Name, Uuid> = HashMap::new(); let mut name_ids: HashMap<Name, Uuid> = HashMap::new();
for id in ids.iter() { for id in ids.iter() {
let name = Name::english(id.clone().to_string().as_str()); let name = Name::english(id.clone().to_string().as_str());
let field_id = names.add_name(name.clone()).unwrap(); let field_id = names.add_names([name.clone()].to_vec()).unwrap();
name_ids.insert(name, field_id); name_ids.insert(name, field_id);
} }
let mut rec = Record::new(names); let mut rec = Record::new(names);
@ -3606,7 +3648,7 @@ mod records {
fn does_get_error_on_missing_data() { fn does_get_error_on_missing_data() {
let mut names = Names::new(); let mut names = Names::new();
let name = Name::english("empty"); let name = Name::english("empty");
names.add_name(name.clone()).unwrap(); names.add_names([name.clone()].to_vec()).unwrap();
let mut rec = Record::new(names); let mut rec = Record::new(names);
match rec.get(&name) { match rec.get(&name) {
Ok(_) => unreachable!("should return not found error"), Ok(_) => unreachable!("should return not found error"),
@ -3621,7 +3663,7 @@ mod records {
fn can_records_hold_multiple_entries() { fn can_records_hold_multiple_entries() {
let field_name = Name::english("field"); let field_name = Name::english("field");
let mut names = Names::new(); let mut names = Names::new();
names.add_name(field_name.clone()); names.add_names([field_name.clone()].to_vec());
let count: isize = 5; let count: isize = 5;
let mut recs = RecordIter::new(); let mut recs = RecordIter::new();
assert_eq!(recs.len(), 0, "should contain no records"); assert_eq!(recs.len(), 0, "should contain no records");
@ -3648,7 +3690,7 @@ mod records {
for i in 0..count { for i in 0..count {
let name = Name::english(i.to_string().as_str()); let name = Name::english(i.to_string().as_str());
let mut names = Names::new(); let mut names = Names::new();
names.add_name(name); names.add_names([name].to_vec());
recs.push(Record::new(names)); recs.push(Record::new(names));
} }
let mut rec_iter = RecordIter::new(); let mut rec_iter = RecordIter::new();
@ -3667,8 +3709,8 @@ mod records {
let mut names = Names::new(); let mut names = Names::new();
let name1 = Name::english("first"); let name1 = Name::english("first");
let name2 = Name::english("second"); let name2 = Name::english("second");
names.add_name(name1.clone()).unwrap(); names.add_names([name1.clone()].to_vec()).unwrap();
names.add_name(name2.clone()).unwrap(); names.add_names([name2.clone()].to_vec()).unwrap();
let mut rec1 = Record::new(names.clone()); let mut rec1 = Record::new(names.clone());
rec1.insert(&name1, 1); rec1.insert(&name1, 1);
rec1.insert(&name2, 2); rec1.insert(&name2, 2);
@ -4207,46 +4249,48 @@ impl DocumentFile {
MsgAction::Create(data) => data.clone(), MsgAction::Create(data) => data.clone(),
_ => unreachable!("got {:?}: should have been a create message", action), _ => unreachable!("got {:?}: should have been a create message", action),
}; };
let name = docdef.get_document_name(); let names = docdef.get_document_names();
let id = queue.add_sender(tx); let id = queue.add_sender(tx);
let reg_msg = Register::new(id, RegMsg::AddDocName(name.clone())); let reg_msg = Register::new(id, RegMsg::AddDocName(names.clone()));
let rmsg = msg.response(reg_msg.clone()); let rmsg = msg.response(reg_msg.clone());
queue.send(rmsg.clone()).unwrap(); queue.send(rmsg.clone()).unwrap();
let name_result = rx.recv().unwrap(); let name_result = rx.recv().unwrap();
match name_result.get_action() { let name_id = match name_result.get_action() {
MsgAction::Register(data) => match data.get_msg() { MsgAction::Register(data) => match data.get_msg() {
RegMsg::DocumentNameID(data) => data,
RegMsg::Error(err) => { RegMsg::Error(err) => {
queue.remove_sender(&id); queue.remove_sender(&id);
queue.send(msg.response(err.clone())).unwrap(); queue.send(msg.response(err.clone())).unwrap();
return;
} }
_ => {} _ => unreachable!("should only return a name id or an error"),
}, },
_ => unreachable!("should return registration"), _ => unreachable!("should only return a name id or an error"),
} };
let routes = [ let routes = [
Path::new( Path::new(
Include::All, Include::All,
Include::Some(name.into()), Include::Some(name_id.into()),
Include::Some(Action::Addition), Include::Some(Action::Addition),
), ),
Path::new( Path::new(
Include::All, Include::All,
Include::Some(name.into()), Include::Some(name_id.into()),
Include::Some(Action::Delete), Include::Some(Action::Delete),
), ),
Path::new( Path::new(
Include::All, Include::All,
Include::Some(name.into()), Include::Some(name_id.into()),
Include::Some(Action::Query), Include::Some(Action::Query),
), ),
Path::new( Path::new(
Include::All, Include::All,
Include::Some(name.into()), Include::Some(name_id.into()),
Include::Some(Action::Show), Include::Some(Action::Show),
), ),
Path::new( Path::new(
Include::All, Include::All,
Include::Some(name.into()), Include::Some(name_id.into()),
Include::Some(Action::Update), Include::Some(Action::Update),
), ),
]; ];
@ -4556,12 +4600,15 @@ mod document_files {
where where
A: Into<MsgAction>, A: Into<MsgAction>,
{ {
let msg = Message::new(self.docdef.get_document_name().clone(), action); let msg = Message::new(self.docdef.get_document_names()[0].clone(), action);
self.queue.send(msg) self.queue.send(msg)
} }
fn start(&mut self) { fn start(&mut self) {
let msg = Message::new(self.docdef.get_document_name().clone(), self.docdef.clone()); let msg = Message::new(
self.docdef.get_document_names()[0].clone(),
self.docdef.clone(),
);
DocumentFile::start(self.queue.clone(), msg); DocumentFile::start(self.queue.clone(), msg);
for route in self.routes.iter() { for route in self.routes.iter() {
let request = let request =
@ -4672,7 +4719,10 @@ mod document_files {
let mut test_doc: TestDocument = docdef.into(); let mut test_doc: TestDocument = docdef.into();
test_doc.start(); test_doc.start();
let queue = test_doc.get_queue(); let queue = test_doc.get_queue();
let reg_msg = Register::new(test_doc.get_sender_id(), RegMsg::AddDocName(alt.clone())); let reg_msg = Register::new(
test_doc.get_sender_id(),
RegMsg::AddDocName([alt.clone()].to_vec()),
);
let setup = Message::new(NameType::None, reg_msg.clone()); let setup = Message::new(NameType::None, reg_msg.clone());
queue.send(setup).unwrap(); queue.send(setup).unwrap();
test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap();
@ -4798,7 +4848,7 @@ mod document_files {
addition.add_field(name.clone(), "doesn't matter"); addition.add_field(name.clone(), "doesn't matter");
queue queue
.send(Message::new( .send(Message::new(
test_doc.get_docdef().get_document_name(), test_doc.get_docdef().get_document_names()[0].clone(),
addition, addition,
)) ))
.unwrap(); .unwrap();
@ -4820,7 +4870,7 @@ mod document_files {
let mut addition = Addition::new(); let mut addition = Addition::new();
addition.add_field(Name::english("field0"), "string"); addition.add_field(Name::english("field0"), "string");
queue.send(Message::new( queue.send(Message::new(
test_doc.get_docdef().get_document_name(), test_doc.get_docdef().get_document_names()[0].clone(),
addition, addition,
)); ));
let result = test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); let result = test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap();
@ -4847,7 +4897,7 @@ mod document_files {
let mut addition = Addition::new(); let mut addition = Addition::new();
addition.add_field(Name::english("field0"), 1); addition.add_field(Name::english("field0"), 1);
queue.send(Message::new( queue.send(Message::new(
test_doc.get_docdef().get_document_name(), test_doc.get_docdef().get_document_names()[0].clone(),
addition, addition,
)); ));
let result = test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); let result = test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap();
@ -4877,7 +4927,7 @@ mod document_files {
let mut query = Query::new(); let mut query = Query::new();
query.add(Name::english("field0"), calc); query.add(Name::english("field0"), calc);
queue.send(Message::new( queue.send(Message::new(
test_doc.get_docdef().get_document_name(), test_doc.get_docdef().get_document_names()[0].clone(),
query, query,
)); ));
let result = test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); let result = test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap();
@ -4917,7 +4967,7 @@ mod document_files {
let mut query = Query::new(); let mut query = Query::new();
query.add(Name::english("field0"), calc); query.add(Name::english("field0"), calc);
queue.send(Message::new( queue.send(Message::new(
test_doc.get_docdef().get_document_name(), test_doc.get_docdef().get_document_names()[0].clone(),
query, query,
)); ));
let result = test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); let result = test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap();
@ -5068,7 +5118,7 @@ mod document_files {
fn errors_on_bad_field_name() { fn errors_on_bad_field_name() {
let mut doc = TestDocument::new(Vec::new()); let mut doc = TestDocument::new(Vec::new());
doc.start(); doc.start();
let doc_name = doc.get_docdef().get_document_name().clone(); let doc_name = doc.get_docdef().get_document_names()[0].clone();
let queue = doc.get_queue(); let queue = doc.get_queue();
let rx = doc.get_receiver(); let rx = doc.get_receiver();
let field_name = Name::english("wrong"); let field_name = Name::english("wrong");
@ -5255,7 +5305,7 @@ mod document_files {
fn changes_information_requested() { fn changes_information_requested() {
let mut doc = TestDocument::new([FieldType::Uuid, FieldType::StaticString].to_vec()); let mut doc = TestDocument::new([FieldType::Uuid, FieldType::StaticString].to_vec());
doc.start(); doc.start();
let doc_name = doc.get_docdef().get_document_name().clone(); let doc_name = doc.get_docdef().get_document_names()[0].clone();
let old = "old"; let old = "old";
let new = "new"; let new = "new";
let id = Uuid::new_v4(); let id = Uuid::new_v4();
@ -5294,7 +5344,7 @@ mod document_files {
fn changes_only_the_queried() { fn changes_only_the_queried() {
let mut doc = TestDocument::new([FieldType::Integer, FieldType::StaticString].to_vec()); let mut doc = TestDocument::new([FieldType::Integer, FieldType::StaticString].to_vec());
doc.start(); doc.start();
let doc_name = doc.get_docdef().get_document_name().clone(); let doc_name = doc.get_docdef().get_document_names()[0].clone();
let old = "old"; let old = "old";
let new = "new"; let new = "new";
let count = 5; let count = 5;
@ -5352,7 +5402,7 @@ mod document_files {
fn can_handle_multiple_updates() { fn can_handle_multiple_updates() {
let mut doc = TestDocument::new([FieldType::Integer, FieldType::StaticString].to_vec()); let mut doc = TestDocument::new([FieldType::Integer, FieldType::StaticString].to_vec());
doc.start(); doc.start();
let doc_name = doc.get_docdef().get_document_name().clone(); let doc_name = doc.get_docdef().get_document_names()[0].clone();
let old = "old"; let old = "old";
let new = "new"; let new = "new";
let count = 5; let count = 5;
@ -5845,7 +5895,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(Name::english("clock"))); let reg_msg = Register::new(id, RegMsg::AddDocName([Name::english("clock")].to_vec()));
let msg = Message::new(NameType::None, reg_msg.clone()); let msg = Message::new(NameType::None, reg_msg.clone());
queue.send(msg).unwrap(); queue.send(msg).unwrap();
rx.recv().unwrap(); rx.recv().unwrap();