pub(crate) mod handshake;
pub use handshake::ClientInitiatorHandshake;
use futures::{AsyncRead, AsyncWrite};
use tor_rtcompat::{CoarseTimeProvider, SleepProvider, StreamOps};
use crate::memquota::ChannelAccount;
#[derive(Default)]
#[non_exhaustive]
pub struct ClientChannelBuilder {
target: Option<tor_linkspec::ChannelMethod>,
}
impl ClientChannelBuilder {
pub fn new() -> Self {
ClientChannelBuilder::default()
}
pub fn set_declared_method(&mut self, target: tor_linkspec::ChannelMethod) {
self.target = Some(target);
}
pub fn launch<T, S>(
self,
tls: T,
sleep_prov: S,
memquota: ChannelAccount,
) -> ClientInitiatorHandshake<T, S>
where
T: AsyncRead + AsyncWrite + StreamOps + Send + Unpin + 'static,
S: CoarseTimeProvider + SleepProvider,
{
handshake::ClientInitiatorHandshake::new(tls, self.target, sleep_prov, memquota)
}
}