Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/sunfishcode/io-arrays

Random-access I/O
https://github.com/sunfishcode/io-arrays

library rust

Last synced: 5 days ago
JSON representation

Random-access I/O

Awesome Lists containing this project

README

        


io-arrays


Random-access I/O


Github Actions CI Status
crates.io page
docs.rs docs


Think of an *I/O array* as a `Vec` 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.

[`ReadAt`]: https://docs.rs/io-arrays/latest/io_arrays/trait.ReadAt.html
[`WriteAt`]: https://docs.rs/io-arrays/latest/io_arrays/trait.WriteAt.html
[`EditAt`]: https://docs.rs/io-arrays/latest/io_arrays/trait.EditAt.html
[`ArrayReader`]: https://docs.rs/io-arrays/latest/io_arrays/struct.ArrayReader.html
[`ArrayWriter`]: https://docs.rs/io-arrays/latest/io_arrays/struct.ArrayWriter.html
[`ArrayEditor`]: https://docs.rs/io-arrays/latest/io_arrays/struct.ArrayEditor.html
[`AsRawFd`]: https://doc.rust-lang.org/std/os/unix/io/trait.AsRawFd.html
[`AsRawHandle`]: https://doc.rust-lang.org/std/os/windows/io/trait.AsRawHandle.html
[`ReadAt::read_via_stream_at`]: https://docs.rs/io-arrays/latest/io_arrays/trait.ReadAt.html#tymethod.read_via_stream_at