use std::sync::mpsc::{Sender, Receiver, channel};
use base::Datable;
use app::Request;
use app::Response;
pub type RequestSender<A, P> = Sender<Request<A, P>>;
pub type RequestReceiver<A, P> = Receiver<Request<A, P>>;
#[derive(Debug)]
pub struct RequestChannel<A, P>
where A: Ord + Datable,
P: Datable,
{
pub sender: RequestSender<A, P>,
pub receiver: RequestReceiver<A, P>,
}
impl<A, P> RequestChannel<A, P>
where A: Ord + Datable,
P: Datable,
{
pub fn new() -> Self {
let (sender, receiver) = channel();
RequestChannel {
sender: sender,
receiver: receiver,
}
}
}
pub type ResponseSender<A, R> = Sender<Response<A, R>>;
pub type ResponseReceiver<A, R> = Receiver<Response<A, R>>;
#[derive(Debug)]
pub struct ResponseChannel<A, R>
where A: Ord + Datable,
R: Datable,
{
pub sender: ResponseSender<A, R>,
pub receiver: ResponseReceiver<A, R>,
}
impl<A, R> ResponseChannel<A, R>
where A: Ord + Datable,
R: Datable,
{
pub fn new() -> Self {
let (sender, receiver) = channel();
ResponseChannel {
sender: sender,
receiver: receiver,
}
}
}
#[derive(Debug)]
pub struct Channels<A, P, R>
where A: Ord + Datable,
P: Datable,
R: Datable,
{
pub request: RequestChannel<A, P>,
pub response: ResponseChannel<A, R>,
}
impl<A, P, R> Channels<A, P, R>
where A: Ord + Datable,
P: Datable,
R: Datable,
{
pub fn new() -> Self {
let request_channel = RequestChannel::new();
let response_channel = ResponseChannel::new();
Channels {
request: request_channel,
response: response_channel,
}
}
}