1 unstable release
0.3.0 | Apr 15, 2024 |
---|
#2126 in Asynchronous
16KB
237 lines
async_channel_io
Wrappers around async_channel
Sender
and Receiver
which implement AsyncRead
and AsyncWrite
Examples
Writer
use tokio::time;
use async_channel_io::ChannelWriter;
use futures::AsyncWriteExt;
async fn example() {
let (send, recv) = async_channel::unbounded();
let mut async_writer = ChannelWriter::new(send);
async_writer.write(b"Hello").await.unwrap();
tokio::spawn(async move {
time::sleep(time::Duration::from_millis(50)).await;
async_writer.write(b" World!").await.unwrap();
});
let mut message = String::new();
while let Ok(received) = recv.recv().await {
message.push_str(std::str::from_utf8(&received).unwrap())
};
assert_eq!(message, "Hello World!")
}
Reader
use tokio::time;
use async_channel_io::ChannelReader;
use futures::AsyncReadExt;
async fn example() {
let (send, recv) = async_channel::unbounded();
let mut async_reader = ChannelReader::new(recv);
// Have some waiting in receiver
send.send(String::from("hello").into()).await.unwrap();
tokio::spawn(async move {
// send some later
time::sleep(time::Duration::from_millis(50)).await;
send.send(String::from(" world").into()).await.unwrap();
});
let mut buf = vec![0; 11];
async_reader.read_exact(&mut buf).await.unwrap();
let read = String::from_utf8_lossy(&buf).to_string();
assert_eq!("hello world", read);
}
Dependencies
~1.5MB
~23K SLoC