Added queue.
This commit is contained in:
46
src/field.rs
46
src/field.rs
@ -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();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user