We need an async form of the Read and Write traits. There are multiple versions of this in the ecosystem: futures: [AsyncRead](https://docs.rs/futures/latest/futures/io/trait.AsyncRead.html), [AsyncWrite](https://docs.rs/futures/latest/futures/io/trait.AsyncWrite.html) tokio: [AsyncRead](https://docs.rs/tokio/latest/tokio/io/trait.AsyncRead.html), [AsyncWrite](https://docs.rs/tokio/latest/tokio/io/trait.AsyncWrite.html) async_std: [Read](https://docs.rs/async-std/latest/async_std/io/trait.Read.html), [Write](https://docs.rs/async-std/latest/async_std/io/trait.Write.html) Relevant design decisions: - How to handle `ReadBuf` (https://github.com/rust-lang/rust/issues/78485), should we include a method without it like `Read` has - Whether to include vectored I/O