Crates.io | async_channel_io |
lib.rs | async_channel_io |
version | 0.3.0 |
source | src |
created_at | 2024-04-15 03:10:20.568299 |
updated_at | 2024-04-15 03:10:20.568299 |
description | `AsyncRead` and `AsyncWrite` implementations for `async_channel` |
homepage | |
repository | https://github.com/TristanStreich/async_channel_io |
max_upload_size | |
id | 1208763 |
size | 16,916 |
Wrappers around async_channel
Sender
and Receiver
which implement AsyncRead
and AsyncWrite
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!")
}
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);
}