Added backend.
All checks were successful
MoreThanText/morethantext/pipeline/head This commit looks good

This commit is contained in:
Jeff Baskin 2025-03-02 10:36:03 -05:00
parent b761791044
commit d824220fab
5 changed files with 88 additions and 62 deletions

50
src/backend.rs Normal file
View File

@ -0,0 +1,50 @@
use crate::queue::Message;
use std::{
sync::mpsc::{channel, Receiver, Sender},
thread::spawn,
};
struct BackEnd {
tx: Sender<Message>,
rx: Receiver<Message>,
}
impl BackEnd {
fn new(tx: Sender<Message>, rx: Receiver<Message>) -> Self {
Self {
tx: tx,
rx: rx,
}
}
fn start(queue_tx: Sender<Message>) {
spawn(move || {
let (tx, rx) = channel();
let service = Self::new(queue_tx.clone(), rx);
queue_tx.send(tx.clone().into()).unwrap();
service.listen();
});
}
fn listen(&self) {
loop {
self.rx.recv().unwrap();
}
}
}
#[cfg(test)]
mod backends {
use std::time::Duration;
use super::*;
#[test]
fn get_registered() {
let (tx, rx) = channel();
BackEnd::start(tx);
match rx.recv_timeout(Duration::from_millis(500)).unwrap() {
Message::Register(_) => {},
_ => unreachable!("should register the service"),
}
}
}

View File

@ -1,9 +1,4 @@
use crate::{ use crate::{queue::Message, session2::SessionMessage, Field, Request};
Field,
Request,
queue::Message,
session2::SessionMessage,
};
use std::{ use std::{
sync::mpsc::{channel, Receiver, Sender}, sync::mpsc::{channel, Receiver, Sender},
thread::spawn, thread::spawn,
@ -16,10 +11,7 @@ struct FrontEnd {
impl FrontEnd { impl FrontEnd {
fn new(tx: Sender<Message>, rx: Receiver<Message>) -> Self { fn new(tx: Sender<Message>, rx: Receiver<Message>) -> Self {
Self { Self { tx: tx, rx: rx }
tx: tx,
rx: rx,
}
} }
fn start(queue_tx: Sender<Message>) { fn start(queue_tx: Sender<Message>) {
@ -43,9 +35,11 @@ impl FrontEnd {
#[cfg(test)] #[cfg(test)]
mod frontends { mod frontends {
use crate::create_request::empty_request;
use std::time::Duration;
use super::*; use super::*;
use crate::{
create_request::empty_request, session2::create_session_message::create_session_new,
};
use std::time::Duration;
fn run_service() -> (Sender<Message>, Receiver<Message>) { fn run_service() -> (Sender<Message>, Receiver<Message>) {
let (tx, rx) = channel(); let (tx, rx) = channel();
@ -63,8 +57,7 @@ mod frontends {
let (tx, rx) = channel(); let (tx, rx) = channel();
FrontEnd::start(tx); FrontEnd::start(tx);
match rx.recv().unwrap() { match rx.recv().unwrap() {
Message::Register(_) => { Message::Register(_) => {}
},
_ => unreachable!("should register the service"), _ => unreachable!("should register the service"),
} }
} }
@ -75,13 +68,14 @@ mod frontends {
let (req, _) = empty_request(); let (req, _) = empty_request();
tx.send(req.into()).unwrap(); tx.send(req.into()).unwrap();
match rx.recv_timeout(Duration::from_millis(500)).unwrap() { match rx.recv_timeout(Duration::from_millis(500)).unwrap() {
Message::SessMsg(output) => { Message::SessMsg(output) => match output {
match output { SessionMessage::Validate(result) => assert!(result.is_none()),
SessionMessage::Validate(result) => assert!(result.is_none()), _ => unreachable!("Should have sent a val9idate"),
_ => unreachable!("Should have sent a val9idate"),
}
}, },
_ => unreachable!("Should have generated a session message"), _ => unreachable!("Should have generated a session message"),
} }
let (new_sess, sess_id) = create_session_new();
tx.send(new_sess.into()).unwrap();
// generate backend request.
} }
} }

View File

@ -1,3 +1,4 @@
mod backend;
mod client; mod client;
mod data; mod data;
mod error; mod error;
@ -468,7 +469,7 @@ impl MoreThanText {
* tx = Queue::start(); * tx = Queue::start();
* tx.send(Session::start().into()).unwrap(); * tx.send(Session::start().into()).unwrap();
* Self { tx: tx } * Self { tx: tx }
*/ */
let (tx, rx) = channel(); let (tx, rx) = channel();
let mut senders = Vec::new(); let mut senders = Vec::new();
senders.push(Client::start(tx.clone())); senders.push(Client::start(tx.clone()));

View File

@ -1,7 +1,4 @@
use crate::{ use crate::{session2::SessionMessage, Request};
Request,
session2::SessionMessage,
};
use std::{ use std::{
sync::mpsc::{channel, Receiver, Sender}, sync::mpsc::{channel, Receiver, Sender},
thread::spawn, thread::spawn,
@ -35,10 +32,7 @@ impl From<SessionMessage> for Message {
#[cfg(test)] #[cfg(test)]
mod messages { mod messages {
use super::*; use super::*;
use crate::{ use crate::{create_request::empty_request, Field};
create_request::empty_request,
Field,
};
#[test] #[test]
fn from_request() { fn from_request() {
@ -70,11 +64,9 @@ mod messages {
let id: Option<Field> = None; let id: Option<Field> = None;
let sess_msg: SessionMessage = id.into(); let sess_msg: SessionMessage = id.into();
match sess_msg.into() { match sess_msg.into() {
Message::SessMsg(result) => { Message::SessMsg(result) => match result {
match result { SessionMessage::Validate(data) => assert!(data.is_none()),
SessionMessage::Validate(data) => assert!(data.is_none()), _ => unreachable!("should have been a validate"),
_ => unreachable!("should have been a validate"),
}
}, },
_ => unreachable!("should have been a session message"), _ => unreachable!("should have been a session message"),
} }

View File

@ -1,7 +1,4 @@
use crate::{ use crate::{queue::Message, Field};
Field,
queue::Message,
};
use std::{ use std::{
sync::mpsc::{channel, Receiver, Sender}, sync::mpsc::{channel, Receiver, Sender},
thread::spawn, thread::spawn,
@ -21,11 +18,12 @@ impl From<Option<Field>> for SessionMessage {
} }
#[cfg(test)] #[cfg(test)]
pub mod crete_session_message { pub mod create_session_message {
use super::*; use super::*;
fn create_session_new() -> SessionMessage { pub fn create_session_new() -> (SessionMessage, Uuid) {
SessionMessage::New(Uuid::new_v4().into()) let id = Uuid::new_v4();
(SessionMessage::New(id.into()), id)
} }
} }
@ -38,16 +36,12 @@ mod sessionmessages {
let text = "afield"; let text = "afield";
let id = Some(text.into()); let id = Some(text.into());
match id.into() { match id.into() {
SessionMessage::Validate(result) => { SessionMessage::Validate(result) => match result {
match result { Some(data) => match data {
Some(data) => { Field::Static(output) => assert_eq!(output, text),
match data { _ => unreachable!("should have returned static text"),
Field::Static(output) => assert_eq!(output, text), },
_ => unreachable!("should have returned static text"), None => unreachable!("shoulf have returned data"),
}
},
None => unreachable!("shoulf have returned data"),
}
}, },
_ => unreachable!("should have been a vaqlidate"), _ => unreachable!("should have been a vaqlidate"),
} }
@ -61,10 +55,7 @@ struct Session {
impl Session { impl Session {
fn new(tx: Sender<Message>, rx: Receiver<Message>) -> Self { fn new(tx: Sender<Message>, rx: Receiver<Message>) -> Self {
Self { Self { tx: tx, rx: rx }
tx: tx,
rx: rx,
}
} }
fn start(queue_tx: Sender<Message>) { fn start(queue_tx: Sender<Message>) {
@ -87,15 +78,15 @@ impl Session {
#[cfg(test)] #[cfg(test)]
mod sessions { mod sessions {
use std::time::Duration;
use super::*; use super::*;
use std::time::Duration;
#[test] #[test]
fn gets_registered() { fn gets_registered() {
let (tx, rx) = channel(); let (tx, rx) = channel();
Session::start(tx); Session::start(tx);
match rx.recv().unwrap() { match rx.recv().unwrap() {
Message::Register(_) => {}, Message::Register(_) => {}
_ => unreachable!("should register the service"), _ => unreachable!("should register the service"),
} }
} }
@ -113,11 +104,9 @@ mod sessions {
let req: SessionMessage = data.into(); let req: SessionMessage = data.into();
sender.send(req.into()).unwrap(); sender.send(req.into()).unwrap();
match rx.recv_timeout(Duration::from_millis(500)).unwrap() { match rx.recv_timeout(Duration::from_millis(500)).unwrap() {
Message::SessMsg(data) => { Message::SessMsg(data) => match data {
match data { SessionMessage::New(_) => {}
SessionMessage::New(_) => {}, _ => unreachable!("should have been a new session"),
_ => unreachable!("should have been a new session"),
}
}, },
_ => unreachable!("should have been a session message response"), _ => unreachable!("should have been a session message response"),
} }