mod client;
mod server;
pub use client::{Client, ClientReceiver, ClientSender};
pub use server::Server;
use crate::RunSync;
use std::sync::mpsc;
pub use crate::binary::messages;
pub fn new_pair<R>(runner: R) -> (Client, Server<R>)
where
R: RunSync + Send + 'static,
R::Prepared: Send + Clone,
{
let (client_tx, server_rx) = mpsc::channel();
let (server_tx, client_rx) = mpsc::channel();
let client = Client::new(client_tx, client_rx);
let server = Server::new(server_rx, server_tx, runner);
(client, server)
}
#[cfg(test)]
mod tests {
use super::*;
use lutra_bin::rr;
struct MockRunner;
impl RunSync for MockRunner {
type Error = String;
type Prepared = ();
fn prepare_sync(&mut self, _program: rr::Program) -> Result<Self::Prepared, Self::Error> {
Ok(())
}
fn execute_sync(
&mut self,
_handle: &Self::Prepared,
input: &[u8],
) -> Result<Vec<u8>, Self::Error> {
Ok(input.to_vec())
}
}
#[test]
fn test_channel_compiles() {
let runner = MockRunner;
let (client, server) = new_pair(runner);
drop(client);
drop(server);
}
}