1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
mod boxed_transport; pub use boxed_transport::BoxedTransport; use futures_lite::io::{AsyncRead, AsyncWrite}; use std::any::Any; /** # The interface that the http protocol is communicated over. Transport represents any type that is AsyncRead + AsyncWrite. Examples of this include: * [async_std::net::TcpStream](https://docs.rs/async-std/1.9.0/async_std/net/struct.TcpStream.html) * [async_net::TcpStream](https://docs.rs/async-net/1.6.0/async_net/struct.TcpStream.html) * [tokio::net::TcpStream](https://docs.rs/tokio/1.6.0/tokio/net/struct.TcpStream.html) when used with [async-compat](https://docs.rs/async-compat/0.2.1/async_compat/) * [async_rustls::TlsStream](https://docs.rs/async-rustls/0.2.0/async_rustls/enum.TlsStream.html) * [async_tls::server::TlsStream](https://docs.rs/async-tls/0.11.0/async_tls/server/struct.TlsStream.html) * [async_native_tls::TlsStream](https://docs.rs/async-native-tls/0.3.3/async_native_tls/struct.TlsStream.html) * [async_net::unix::UnixStream](https://docs.rs/async-net/1.6.0/async_net/unix/struct.UnixStream.html) * [async_std:os::unix::net::UnixStream](https://docs.rs/async-std/1.9.0/async_std/os/unix/net/struct.UnixStream.html) * [tokio::net::UnixStream](https://docs.rs/tokio/1.6.0/tokio/net/struct.UnixStream.html) with [async-compat](https://docs.rs/async-compat/0.2.1/async_compat/) **Note:** Transport is currently designed around [AsyncWrite](https://docs.rs/futures/0.3.15/futures/io/trait.AsyncWrite.html) and [AsyncRead](https://docs.rs/futures/0.3.15/futures/io/trait.AsyncRead.html) from the futures crate, which are different from the tokio [AsyncRead](https://docs.rs/tokio/1.6.0/tokio/io/trait.AsyncRead.html) and [AsyncWrite](https://docs.rs/tokio/1.6.0/tokio/io/trait.AsyncWrite.html) traits. Hopefully this is a temporary situation. It is currently never necessary to manually implement this trait. */ pub trait Transport: Any + AsyncRead + AsyncWrite + Send + Sync + Unpin { /// in order to support downcasting from a `Box<dyn Transport>`, /// Transport requires implementing an `as_box_any` function. fn as_box_any(self: Box<Self>) -> Box<dyn Any>; } impl<T> Transport for T where T: Any + AsyncRead + AsyncWrite + Send + Sync + Unpin, { fn as_box_any(self: Box<Self>) -> Box<dyn Any> { self } }