use std::future::Future;
use std::pin::Pin;
use crate::transport::BoxedTransport;
use crate::TransportError;
use super::types::HostId;
pub trait HostTransportFactory: Send + Sync + 'static {
fn open_transport(
&self,
host_id: HostId,
) -> Pin<Box<dyn Future<Output = Result<BoxedTransport, TransportError>> + Send + '_>>;
}
impl<F, Fut> HostTransportFactory for F
where
F: Fn(HostId) -> Fut + Send + Sync + 'static,
Fut: Future<Output = Result<BoxedTransport, TransportError>> + Send + 'static,
{
fn open_transport(
&self,
host_id: HostId,
) -> Pin<Box<dyn Future<Output = Result<BoxedTransport, TransportError>> + Send + '_>> {
Box::pin(self(host_id))
}
}