use crossbeam_channel::{SendError, Sender, unbounded};
use crate::{
pool_item::PoolItem,
request_with_response::RequestWithResponse,
thread_request_response::{ThreadAbortRequest, ThreadRequestResponse},
};
#[derive(Debug)]
pub struct SenderCouplet<P>
where
P: PoolItem,
{
pub return_to: Sender<ThreadRequestResponse<P>>,
pub request: ThreadRequestResponse<P>,
}
impl<P> SenderCouplet<P>
where
P: PoolItem,
{
pub fn new<T>(return_to: Sender<ThreadRequestResponse<P>>, request: T) -> Self
where
T: RequestWithResponse<P>,
{
Self {
return_to,
request: request.into(),
}
}
pub fn request(&self) -> &ThreadRequestResponse<P> {
&self.request
}
#[allow(dead_code)]
pub fn return_to(&self) -> &Sender<ThreadRequestResponse<P>> {
&self.return_to
}
}
pub(crate) fn thread_abort_send_error<P>(request_id: u64) -> SendError<SenderCouplet<P>>
where
P: PoolItem,
{
let (return_to, _) = unbounded::<ThreadRequestResponse<P>>();
SendError(SenderCouplet::new(
return_to,
ThreadAbortRequest(request_id),
))
}