use std::io;
use log::trace;
use tokio::sync::mpsc::Sender;
use tokio::sync::mpsc::error::SendError;
use tokio::sync::oneshot::{Receiver, channel};
use crate::Payload;
use crate::actor::message::Message;
use crate::utils::HexSlice;
type Response = Receiver<io::Result<()>>;
#[derive(Clone, Debug)]
pub struct Proxy {
inner: Sender<Message>,
}
impl Proxy {
pub async fn send(&self, payload: Payload) -> Result<Response, SendError<Message>> {
let (response_tx, response_rx) = channel();
trace!("Sending chunk: {:#04X}", HexSlice::new(&payload));
self.inner
.send(Message::Payload {
payload: Box::new(payload),
response_tx,
})
.await?;
Ok(response_rx)
}
}
impl From<Sender<Message>> for Proxy {
fn from(inner: Sender<Message>) -> Self {
Self { inner }
}
}