#io-read #async-io #io-write #tokio #write #read #combine

readwrite

Combine Read and Write into a single Read+Write object

4 releases

0.2.0 Mar 8, 2021
0.1.2 May 4, 2020
0.1.1 Aug 18, 2018
0.1.0 Aug 18, 2018

#527 in Asynchronous

Download history 371/week @ 2024-07-20 350/week @ 2024-07-27 461/week @ 2024-08-03 330/week @ 2024-08-10 241/week @ 2024-08-17 257/week @ 2024-08-24 382/week @ 2024-08-31 343/week @ 2024-09-07 315/week @ 2024-09-14 416/week @ 2024-09-21 387/week @ 2024-09-28 342/week @ 2024-10-05 395/week @ 2024-10-12 482/week @ 2024-10-19 523/week @ 2024-10-26 345/week @ 2024-11-02

1,805 downloads per month
Used in 11 crates (10 directly)

MIT/Apache

14KB
268 lines

readwrite

Given two things, one of which implements std::io::Read and other implements std::io::Write, make a single socket-like object which implements Read + Write. Note that you can't write to it while waiting for data to come from read part.

Example: generate a virtual socketpair.

fn main() {
    extern crate pipe;
    extern crate readwrite;

    let (r1,w1) = pipe::pipe();
    let (r2,w2) = pipe::pipe();
    let (s1,s2) = (ReadWrite::new(r1,w2), ReadWrite::new(r2,w1));
}

There is also async implementation for combining tokio::io::AsyncRead and tokio::io::AsyncWrite into a AsyncRead + AsyncWrite. Enable the non-default tokio Cargo feature for it to work: Similarly there is futures::io::AsyncRead/AsyncWrite version gated under asyncstd Cargo feature.

[dependencies]
readwrite = {version="0.1.1", features=["tokio"]}

See also

  • duplexify - alternative implementation for async-std
  • Use version 0.1 of this crate for old tokio-core support. tokio 0.1 is not supported.

Dependencies

~0–6MB
~22K SLoC