use std::num::NonZero;
use tokio::sync::mpsc::{Receiver, Sender};
use tokio::sync::oneshot;
use crate::transceiver::{Connection, Message};
use crate::{Callback, Error};
#[derive(Debug)]
pub struct Connectable {
pub(crate) handle: Sender<Message>,
pub(crate) callbacks: Receiver<Callback>,
}
impl Connectable {
pub async fn connect(
self,
desired_version: NonZero<u8>,
) -> Result<(Connection, Receiver<Callback>), Error> {
let (response, rx) = oneshot::channel();
self.handle
.send(Message::Connect {
desired_version,
response,
})
.await?;
rx.await??;
Ok((
Connection {
handle: self.handle,
},
self.callbacks,
))
}
}