Added message queue.
This commit is contained in:
43
src/lib.rs
43
src/lib.rs
@ -2,6 +2,7 @@ mod client;
|
||||
mod data;
|
||||
mod error;
|
||||
mod message;
|
||||
mod queue;
|
||||
mod router;
|
||||
mod session;
|
||||
|
||||
@ -12,7 +13,7 @@ use session::{Session, SessionData, SessionMsg};
|
||||
use std::{
|
||||
collections::HashMap,
|
||||
ops::Deref,
|
||||
sync::mpsc::{channel, Sender},
|
||||
sync::mpsc::{channel, Receiver, Sender},
|
||||
};
|
||||
use uuid::Uuid;
|
||||
|
||||
@ -105,12 +106,14 @@ mod fields {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
struct Request {
|
||||
id: Option<Field>,
|
||||
tx: Sender<Response>,
|
||||
}
|
||||
|
||||
impl Request {
|
||||
fn new<F>(mut id: Option<F>) -> Self
|
||||
fn new<F>(id: Option<F>) -> (Self, Receiver<Response>)
|
||||
where
|
||||
F: Into<Field>,
|
||||
{
|
||||
@ -121,7 +124,22 @@ impl Request {
|
||||
}
|
||||
None => result = None,
|
||||
}
|
||||
Self { id: result }
|
||||
let (tx, rx) = channel();
|
||||
(Self { id: result, tx: tx }, rx)
|
||||
}
|
||||
|
||||
fn get_session(&self) -> &Option<Field> {
|
||||
return &self.id;
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod create_request {
|
||||
use super::*;
|
||||
|
||||
pub fn empty_request() -> (Request, Receiver<Response>) {
|
||||
let id: Option<String> = None;
|
||||
Request::new(id)
|
||||
}
|
||||
}
|
||||
|
||||
@ -132,14 +150,14 @@ mod requests {
|
||||
#[test]
|
||||
fn create_request_no_id() {
|
||||
let input: Option<String> = None;
|
||||
let req = Request::new(input);
|
||||
let (req, _) = Request::new(input);
|
||||
assert!(req.id.is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn create_request_with_uuid() {
|
||||
let id = Uuid::new_v4();
|
||||
let req = Request::new(Some(id));
|
||||
let (req, _) = Request::new(Some(id));
|
||||
match req.id {
|
||||
Some(field) => match (field) {
|
||||
Field::Uuid(data) => assert_eq!(data, id),
|
||||
@ -148,6 +166,21 @@ mod requests {
|
||||
None => unreachable!("Should producer data"),
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn return_session() {
|
||||
let id = Uuid::new_v4();
|
||||
let (req, _) = Request::new(Some(id));
|
||||
match req.get_session() {
|
||||
Some(result) => {
|
||||
match result {
|
||||
Field::Uuid(data) => assert_eq!(data, &id),
|
||||
_ => unreachable!("should have returned a uuid field"),
|
||||
};
|
||||
}
|
||||
None => unreachable!("should have returned a uuid"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct Record {
|
||||
|
Reference in New Issue
Block a user