Expand description
This crate provides traits and utilities for completion-based IO.
§Contents
§Fundamental
- AsyncRead: Async read into a buffer implements- IoBufMut
- AsyncReadAt: Async read into a buffer implements- IoBufMutwith offset
- AsyncWrite: Async write from a buffer implements- IoBuf
- AsyncWriteAt: Async write from a buffer implements- IoBufwith offset
§Buffered IO
- AsyncBufRead: Trait of async read with buffered content
- BufReader: An async reader with internal buffer
- BufWriter: An async writer with internal buffer
§Extension
- AsyncReadExt: Extension trait for- AsyncRead
- AsyncReadAtExt: Extension trait for- AsyncReadAt
- AsyncWriteExt: Extension trait for- AsyncWrite
- AsyncWriteAtExt: Extension trait for- AsyncWriteAt
§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 fromAsyncRead
- Wraps a writer and buffers its output.
- The readable half of a value returned fromsplit.
- The writable half of a value returned fromsplit.
Traits§
- AsyncBufRead
- AsyncRead
- AsyncReadAt
- Implemented as an extension trait, adding utility methods to allAsyncReadAttypes. Callers will tend to import this trait instead ofAsyncReadAt.
- AsyncWrite
- AsyncWriteAt
- Implemented as an extension trait, adding utility methods to allAsyncWriteAttypes. Callers will tend to import this trait instead ofAsyncWriteAt.
- Implemented as an extension trait, adding utility methods to allAsyncWritetypes. Callers will tend to import this trait instead ofAsyncWrite.
Functions§
- Splits a single value implementingAsyncRead + AsyncWriteinto separateAsyncReadandAsyncWritehandles.