Added message queue.

This commit is contained in:
2025-02-22 10:53:05 -05:00
parent 4bca78a2f8
commit e77ed83d84
2 changed files with 148 additions and 5 deletions

View File

@ -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 {