Added queue.

This commit is contained in:
2025-03-29 09:22:53 -04:00
parent 577abba5ab
commit f8bf13e91b
4 changed files with 286 additions and 62 deletions

View File

@ -1,10 +1,24 @@
use std::fmt;
use crate::queue::Message;
use std::{
fmt,
sync::mpsc::Sender,
};
use uuid::Uuid;
#[derive(Clone, Debug)]
pub enum Field {
Static(String),
Uuid(Uuid),
Tx(Sender<Message>),
}
impl Field {
pub fn to_sender(&self) -> Result<Sender<Message>, String> {
match self {
Field::Tx(sender) => Ok(sender.clone()),
_ => Err("not a sender field".to_string()),
}
}
}
impl From<String> for Field {
@ -33,17 +47,25 @@ impl From<Uuid> for Field {
}
}
impl From<Sender<Message>> for Field {
fn from(value: Sender<Message>) -> Self {
Field::Tx(value)
}
}
impl fmt::Display for Field {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Field::Uuid(data) => write!(f, "{}", data),
Field::Static(data) => write!(f, "{}", data),
Field::Tx(_) => write!(f, "{}", "message sender"),
}
}
}
#[cfg(test)]
mod fields {
use std::sync::mpsc::channel;
use super::*;
#[test]
@ -98,6 +120,19 @@ mod fields {
}
}
#[test]
fn sender_to_field() {
let (tx, rx) = channel::<Message>();
match tx.into() {
Field::Tx(sender) => {
let msg = Message::new();
sender.send(msg).unwrap();
rx.recv().unwrap();
},
_ => unreachable!("should have been a sender"),
}
}
#[test]
fn uuid_field_to_string() {
let id = Uuid::new_v4();
@ -119,4 +154,13 @@ mod fields {
let input: Field = result.clone().into();
assert_eq!(input.to_string(), result);
}
#[test]
fn get_sender() {
let (tx, rx) = channel::<Message>();
let field: Field = tx.into();
let sender = field.to_sender().unwrap();
sender.send(Message::new()).unwrap();
rx.recv().unwrap();
}
}