Got add and query working for documents.
This commit is contained in:
parent
2fa92904a9
commit
6d0876f9e9
@ -1186,15 +1186,12 @@ impl Reply {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Iterator for Reply {
|
impl IntoIterator for Reply {
|
||||||
type Item = Document;
|
type Item = Document;
|
||||||
|
type IntoIter = std::vec::IntoIter<Self::Item>;
|
||||||
|
|
||||||
fn next(&mut self) -> Option<Self::Item> {
|
fn into_iter(self) -> Self::IntoIter {
|
||||||
if self.data.len() > 0 {
|
self.data.into_iter()
|
||||||
Some(self.data.remove(0))
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1228,17 +1225,18 @@ mod replies {
|
|||||||
let mut reply = Reply::new();
|
let mut reply = Reply::new();
|
||||||
reply.add(doc1);
|
reply.add(doc1);
|
||||||
reply.add(doc2);
|
reply.add(doc2);
|
||||||
let result1 = reply.next().unwrap();
|
let mut reply_iter = reply.into_iter();
|
||||||
|
let mut result1 = reply_iter.next().unwrap();
|
||||||
match result1.get_field(&fieldname).unwrap() {
|
match result1.get_field(&fieldname).unwrap() {
|
||||||
Field::StaticString(output) => assert_eq!(output, "one"),
|
Field::StaticString(output) => assert_eq!(output, "one"),
|
||||||
_ => unreachable!("got {:?}: should have been static string", result1),
|
_ => unreachable!("got {:?}: should have been static string", result1),
|
||||||
}
|
}
|
||||||
let result2 = reply.next().unwrap();
|
let result2 = reply_iter.next().unwrap();
|
||||||
match result2.get_field(&fieldname).unwrap() {
|
match result2.get_field(&fieldname).unwrap() {
|
||||||
Field::StaticString(output) => assert_eq!(output, "two"),
|
Field::StaticString(output) => assert_eq!(output, "two"),
|
||||||
_ => unreachable!("got {:?}: should have been static string", result2),
|
_ => unreachable!("got {:?}: should have been static string", result2),
|
||||||
}
|
}
|
||||||
match reply.next() {
|
match reply_iter.next() {
|
||||||
None => {}
|
None => {}
|
||||||
Some(_) => unreachable!("should be out of data"),
|
Some(_) => unreachable!("should be out of data"),
|
||||||
}
|
}
|
||||||
@ -1300,6 +1298,7 @@ mod documents {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct DocumentFile {
|
struct DocumentFile {
|
||||||
|
docs: Vec<Document>,
|
||||||
queue: Queue,
|
queue: Queue,
|
||||||
rx: Receiver<Message>,
|
rx: Receiver<Message>,
|
||||||
}
|
}
|
||||||
@ -1307,6 +1306,7 @@ struct DocumentFile {
|
|||||||
impl DocumentFile {
|
impl DocumentFile {
|
||||||
fn new(queue: Queue, rx: Receiver<Message>) -> Self {
|
fn new(queue: Queue, rx: Receiver<Message>) -> Self {
|
||||||
Self {
|
Self {
|
||||||
|
docs: Vec::new(),
|
||||||
queue: queue,
|
queue: queue,
|
||||||
rx: rx,
|
rx: rx,
|
||||||
}
|
}
|
||||||
@ -1353,15 +1353,26 @@ impl DocumentFile {
|
|||||||
let msg = self.rx.recv().unwrap();
|
let msg = self.rx.recv().unwrap();
|
||||||
let reply = match msg.get_action() {
|
let reply = match msg.get_action() {
|
||||||
MsgAction::Addition(data) => self.add_document(data),
|
MsgAction::Addition(data) => self.add_document(data),
|
||||||
|
MsgAction::Query(query) => self.query(query),
|
||||||
_ => Reply::new(),
|
_ => Reply::new(),
|
||||||
};
|
};
|
||||||
self.queue.send(msg.reply(reply)).unwrap();
|
self.queue.send(msg.reply(reply)).unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn add_document(&mut self, new_doc: &Addition) -> Reply {
|
fn add_document(&mut self, addition: &Addition) -> Reply {
|
||||||
let mut reply = Reply::new();
|
let mut reply = Reply::new();
|
||||||
reply.add(new_doc.get_document());
|
let doc = addition.get_document();
|
||||||
|
self.docs.push(doc.clone());
|
||||||
|
reply.add(doc);
|
||||||
|
reply
|
||||||
|
}
|
||||||
|
|
||||||
|
fn query(&self, query: &Query) -> Reply {
|
||||||
|
let mut reply = Reply::new();
|
||||||
|
for doc in self.docs.iter() {
|
||||||
|
reply.add(doc.clone());
|
||||||
|
}
|
||||||
reply
|
reply
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1479,6 +1490,7 @@ mod document_files {
|
|||||||
fn can_document_be_added() {
|
fn can_document_be_added() {
|
||||||
let mut docdef = DocDef::new();
|
let mut docdef = DocDef::new();
|
||||||
let name = "field";
|
let name = "field";
|
||||||
|
let doc_name = "document";
|
||||||
let data = Uuid::new_v4();
|
let data = Uuid::new_v4();
|
||||||
docdef.add_field(name.to_string(), FieldType::Uuid);
|
docdef.add_field(name.to_string(), FieldType::Uuid);
|
||||||
let routes = [RouteRequest::new(
|
let routes = [RouteRequest::new(
|
||||||
@ -1487,17 +1499,51 @@ mod document_files {
|
|||||||
Include::Some(Action::Reply),
|
Include::Some(Action::Reply),
|
||||||
)]
|
)]
|
||||||
.to_vec();
|
.to_vec();
|
||||||
let (queue, rx) = test_doc(name, docdef, routes);
|
let (queue, rx) = test_doc(doc_name, docdef, routes);
|
||||||
let msg = Message::new(name, Addition::new());
|
let mut new_doc = Addition::new();
|
||||||
|
new_doc.add_field(name.to_string(), data.clone());
|
||||||
|
let msg = Message::new(doc_name, new_doc);
|
||||||
queue.send(msg.clone()).unwrap();
|
queue.send(msg.clone()).unwrap();
|
||||||
let result = rx.recv_timeout(TIMEOUT).unwrap();
|
let result = rx.recv_timeout(TIMEOUT).unwrap();
|
||||||
assert_eq!(result.get_message_id(), msg.get_message_id());
|
assert_eq!(result.get_message_id(), msg.get_message_id());
|
||||||
match result.get_action() {
|
match result.get_action() {
|
||||||
MsgAction::Reply(output) => assert_eq!(output.len(), 1),
|
MsgAction::Reply(output) => {
|
||||||
|
assert_eq!(output.len(), 1);
|
||||||
|
let holder = output.clone().into_iter().next().unwrap();
|
||||||
|
match holder.get_field(name) {
|
||||||
|
Some(field) => match field {
|
||||||
|
Field::Uuid(store) => assert_eq!(store, &data),
|
||||||
|
_ => unreachable!(
|
||||||
|
"got {:?}: should have received uuid",
|
||||||
|
holder.get_field(name).unwrap()
|
||||||
|
),
|
||||||
|
},
|
||||||
|
None => unreachable!("{:?} did not contain field '{}'", holder, name),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => unreachable!("got {:?}: should have been a reply", result),
|
||||||
|
}
|
||||||
|
let msg = Message::new(doc_name, Query::new());
|
||||||
|
queue.send(msg.clone()).unwrap();
|
||||||
|
let result = rx.recv_timeout(TIMEOUT).unwrap();
|
||||||
|
assert_eq!(result.get_message_id(), msg.get_message_id());
|
||||||
|
match result.get_action() {
|
||||||
|
MsgAction::Reply(output) => {
|
||||||
|
assert_eq!(output.len(), 1);
|
||||||
|
let holder = output.clone().into_iter().next().unwrap();
|
||||||
|
match holder.get_field(name) {
|
||||||
|
Some(field) => match field {
|
||||||
|
Field::Uuid(store) => assert_eq!(store, &data),
|
||||||
|
_ => unreachable!(
|
||||||
|
"got {:?}: should have received uuid",
|
||||||
|
holder.get_field(name).unwrap()
|
||||||
|
),
|
||||||
|
},
|
||||||
|
None => unreachable!("{:?} did not contain field '{}'", holder, name),
|
||||||
|
}
|
||||||
|
}
|
||||||
_ => unreachable!("got {:?}: should have been a reply", result),
|
_ => unreachable!("got {:?}: should have been a reply", result),
|
||||||
}
|
}
|
||||||
// Finish the test.
|
|
||||||
// Need to add addition message.
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user