Expand description
This crate provides traits and utilities for completion-based IO.
§Contents
§Fundamental
AsyncRead
: Async read into a buffer implementsIoBufMut
AsyncReadAt
: Async read into a buffer implementsIoBufMut
with offsetAsyncWrite
: Async write from a buffer implementsIoBuf
AsyncWriteAt
: Async write from a buffer implementsIoBuf
with offset
§Buffered IO
AsyncBufRead
: Trait of async read with buffered contentBufReader
: An async reader with internal bufferBufWriter
: An async writer with internal buffer
§Extension
AsyncReadExt
: Extension trait forAsyncRead
AsyncReadAtExt
: Extension trait forAsyncReadAt
AsyncWriteExt
: Extension trait forAsyncWrite
AsyncWriteAtExt
: Extension trait forAsyncWriteAt
§Examples
§Read
use compio_buf::BufResult;
use compio_io::AsyncRead;
let mut reader = "Hello, world!".as_bytes();
let (res, buf) = reader.read(Vec::with_capacity(20)).await.unwrap();
assert_eq!(buf.as_slice(), b"Hello, world!");
assert_eq!(res, 13);
§Write
Writing to a fixed-size buffer wrapped by Cursor
. The
implementation will write the content start at the current
position
:
use std::io::Cursor;
use compio_buf::BufResult;
use compio_io::AsyncWrite;
let mut writer = Cursor::new([0; 6]);
writer.set_position(2);
let (n, buf) = writer.write(vec![1, 1, 1, 1, 1, 1]).await.unwrap();
assert_eq!(n, 4);
assert_eq!(writer.into_inner(), [0, 0, 1, 1, 1, 1]);
Writing to Vec<u8>
, which is extendable. Notice that the implementation
will append the content to the end:
use compio_buf::BufResult;
use compio_io::AsyncWrite;
let mut writer = vec![1, 2, 3];
let (_, buf) = writer.write(vec![3, 2, 1]).await.unwrap();
assert_eq!(writer, [1, 2, 3, 3, 2, 1]);
This crate doesn’t depend on a specific runtime. It can work with tokio
well:
use compio_buf::BufResult;
use compio_io::AsyncWrite;
#[tokio::main(flavor = "current_thread")]
async fn main() {
let mut writer = vec![1, 2, 3];
let (_, buf) = writer.write(vec![3, 2, 1]).await.unwrap();
assert_eq!(writer, [1, 2, 3, 3, 2, 1]);
}
Re-exports§
Modules§
- IO related utilities functions for ease of use.
Structs§
- Wraps a reader and buffers input from
AsyncRead
- Wraps a writer and buffers its output.
- The readable half of a value returned from
split
. - The writable half of a value returned from
split
.
Traits§
- AsyncBufRead
- AsyncRead
- AsyncReadAt
- Implemented as an extension trait, adding utility methods to all
AsyncReadAt
types. Callers will tend to import this trait instead ofAsyncReadAt
. - AsyncWrite
- AsyncWriteAt
- Implemented as an extension trait, adding utility methods to all
AsyncWriteAt
types. Callers will tend to import this trait instead ofAsyncWriteAt
. - Implemented as an extension trait, adding utility methods to all
AsyncWrite
types. Callers will tend to import this trait instead ofAsyncWrite
.
Functions§
- Splits a single value implementing
AsyncRead + AsyncWrite
into separateAsyncRead
andAsyncWrite
handles.