15 releases (breaking)
0.12.2 | Mar 29, 2023 |
---|---|
0.12.0 | Nov 27, 2022 |
0.10.0 | Jun 23, 2022 |
0.9.0 | Feb 1, 2022 |
0.3.0 | Mar 5, 2021 |
#1381 in Rust patterns
47 downloads per month
Used in nameless
85KB
2K
SLoC
Think of an I/O array as a Vec<u8>
which lives outside the program. You can
index into it and copy data in and out. You can append to it or shrink it from
the back.
In I/O terms, an I/O array is an abstraction of a "file". It supports doing I/O
at arbitrary offsets, appending, and truncating. You can read from it in a
streaming fashion using ReadAt::read_via_stream_at
.
TODO: Writing to an array in a streaming fashion is not yet supported.
This crate defines ReadAt
, WriteAt
, and EditAt
traits which define
interfaces to random-access or seekable devices, such as normal files, block
devices, disk partitions, and memory buffers.
It also defines ArrayReader
, ArrayWriter
, and ArrayEditor
types which
implement the above traits and and can be constructed from any file-like type.
On Posix-ish platforms, with support for WASI in development, these types just
contain a single file descriptor (and implement AsRawFd
), plus any
resources needed to safely hold the file descriptor live. On Windows, they
contain a single file handle (and implement AsRawHandle
).
Support for async-std is temporarily disabled until those crates contain the needed implementations of the I/O safety traits.
Dependencies
~1.7–7.5MB
~127K SLoC