Rust I/O for no_std

Overview

acid_io

A pared-down version of Rust's std::io usable in no_std contexts.


Rust's std::io provides common interfaces that are used widely in the Rust ecosystem for reading and writing data. However, as of 2022, these interfaces are not available in no_std builds.

This crate provides drop-in replacements for the types and traits exposed by std::io which can be used with no_std.

Example

#![no_std]

use acid_io::{
    byteorder::{BE, LE, ReadBytesExt, WriteBytesExt},
    Cursor, Read, Seek, SeekFrom, Write,
};

let mut buf = [0u8; 10];
let mut curs = Cursor::new(&mut buf);

curs.write_u8(1)?;
curs.write_u16::<BE>(2)?;
curs.write_u32::<LE>(3)?;

curs.seek(SeekFrom::Start(0))?;

assert_eq!(curs.read_u8()?, 1);
assert_eq!(curs.read_u16::<BE>()?, 2);
assert_eq!(curs.read_u32::<LE>()?, 3);

Feature flags

  • std

    Replaces all items with re-exports of their counterparts in std::io. This effectively makes acid_io an alias of std::io, but missing any items that acid_io wouldn't otherwise provide.

  • alloc

    Exposes BufReader and BufWriter, as well as those trait methods which take or return Vec or String.

  • byteorder

    Exposes acid_io::byteorder, which contains implementations of ReadBytesExt and WriteBytesExt for acid_io's Read and Write traits. Also re-exports the rest of byteorder.

Acknowledgments

Much of this library is copied verbatim or with slight modifications from other Rust projects:

If you find this crate useful, please consider sponsoring members of the Library team on GitHub.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Comments
  • Drop unused and vulnerable dependency on the `windows` crate

    Drop unused and vulnerable dependency on the `windows` crate

    As highlighted in #19, this crate does not support Windows platforms properly yet. There is a conditional dependency on the windows crate declared on the Cargo.toml manifest for Windows platforms, but as far as I can see that dependency is unused by the source code, so it's unnecessary.

    Normally, this unused dependency would only make Cargo download more crates than really needed when building, but otherwise be unnoticed by most people. However, the version of the windows crate declared as a dependency, 0.29.0, is affected by the RUSTSEC-2022-0008 advisory, which makes automated analysis tools such as GitHub security vulnerability scanning complain:

    GitHub complaining about the advisory

    Link to the relevant security advisory: https://rustsec.org/advisories/RUSTSEC-2022-0008.html

    Address the situation by commenting out the troublesome dependency on the Cargo.toml file. In the future, it can be uncommented by anyone interested in implementing Windows support. I have tested the change by running cargo test on a Linux box.

    opened by AlexTMjugador 0
  • Bare metal support

    Bare metal support

    This adds support for non-Windows and non-Unix targets by:

    • Making sure memchr is used without the std feature,
    • Making sure RawIoSliceMut is also implemented on non-Unix targets,
    • Providing small implementations for the libc c_void and iovec types.
    opened by theCapypara 0
  • feat: add BufWriter; port doctests; remove redundant attrs

    feat: add BufWriter; port doctests; remove redundant attrs

    • Add BufWriter and Linewriter behind #[cfg(feature = "alloc")]
    • Convert all doctests in io_core to use acid_io instead of std::io
    • Remove redundant cfg attrs from io_alloc
    opened by dataphract 0
  • refactor, add BufRead and more Read/Write methods

    refactor, add BufRead and more Read/Write methods

    • Move core I/O traits and implementations to io_core
    • Move alloc-dependent implementations to io_alloc
    • When std is available, re-export its items directly
    • Implement IoSlice (currently unix-only)
    opened by dataphract 0
  • Request: Windows Support

    Request: Windows Support

    Hello, I discovered your crate as dependency of dynamorio-rs / drstd which are rust safe bindings over dynamorio-sys. DynamoRIO is a cross platform binary instrumentation platform for Windows and Linux for debugging and tracing software. I see some cfg variables in your toml referring to Windows but the use of iovec is causing build failures. Did I miss something or is Windows support still WIP? I would be a happy customer if it worked on Windows. Thanks!

    opened by richinseattle 0
Owner
null
Simple autoclicker written in Rust, to learn the Rust language.

RClicker is an autoclicker written in Rust, written to learn more about the Rust programming language. RClicker was was written by me to learn more ab

null 7 Nov 15, 2022
Rust programs written entirely in Rust

mustang Programs written entirely in Rust Mustang is a system for building programs built entirely in Rust, meaning they do not depend on any part of

Dan Gohman 561 Dec 26, 2022
Rust 核心库和标准库的源码级中文翻译,可作为 IDE 工具的智能提示 (Rust core library and standard library translation. can be used as IntelliSense for IDE tools)

Rust 标准库中文版 这是翻译 Rust 库 的地方, 相关源代码来自于 https://github.com/rust-lang/rust。 如果您不会说英语,那么拥有使用中文的文档至关重要,即使您会说英语,使用母语也仍然能让您感到愉快。Rust 标准库是高质量的,不管是新手还是老手,都可以从中

wtklbm 493 Jan 4, 2023
A library for extracting #[no_mangle] pub extern "C" functions (https://docs.rust-embedded.org/book/interoperability/rust-with-c.html#no_mangle)

A library for extracting #[no_mangle] pub extern "C" functions In order to expose a function with C binary interface for interoperability with other p

Dmitrii - Demenev 0 Feb 17, 2022
clone of grep cli written in Rust. From Chapter 12 of the Rust Programming Language book

minigrep is a clone of the grep cli in rust Minigrep will find a query string in a file. To test it out, clone the project and run cargo run body poem

Raunak Singh 1 Dec 14, 2021
Rust-blog - Educational blog posts for Rust beginners

pretzelhammer's Rust blog ?? I write educational content for Rust beginners and Rust advanced beginners. My posts are listed below in reverse chronolo

kirill 5.2k Jan 1, 2023
The ray tracer challenge in rust - Repository to follow my development of "The Raytracer Challenge" book by Jamis Buck in the language Rust

The Ray Tracer Challenge This repository contains all the code written, while step by implementing Ray Tracer, based on the book "The Ray Tracer Chall

Jakob Westhoff 54 Dec 25, 2022
Learn-rust-the-hard-way - "Learn C The Hard Way" by Zed Shaw Converted to Rust

Learn Rust The Hard Way This is an implementation of Zed Shaw's Learn X The Hard Way for the Rust Programming Language. Installing Rust TODO: Instruct

Ryan Levick 309 Dec 8, 2022
Learn to write Rust procedural macros [Rust Latam conference, Montevideo Uruguay, March 2019]

Rust Latam: procedural macros workshop This repo contains a selection of projects designed to learn to write Rust procedural macros — Rust code that g

David Tolnay 2.5k Dec 29, 2022
The Rust Compiler Collection is a collection of compilers for various languages, written with The Rust Programming Language.

rcc The Rust Compiler Collection is a collection of compilers for various languages, written with The Rust Programming Language. Compilers Language Co

null 2 Jan 17, 2022
Integra8 rust integration test framework Rust with a focus on productivity, extensibility, and speed.

integra8 Integra8 rust integration test framework Rust with a focus on productivity, extensibility, and speed. | This repo is in a "work in progress"

exceptional 3 Sep 26, 2022
Neofetch but in Rust (rust-toml-fetch)

rtfetch Configuration Recompile each time you change the config file logo = "arch.logo" # in src/assets. info = [ "", "", "<yellow>{host_n

Paolo Bettelini 6 Jun 6, 2022
Rust Sandbox [code for 15 concepts of Rust language]

Rust-Programming-Tutorial Rust Sandbox [code for 15 concepts of Rust language]. The first time I've been introduced to Rust was on January 2022, you m

Bek Brace 4 Aug 30, 2022
TypeRust - simple Rust playground where you can build or run your Rust code and share it with others

Rust playground Welcome to TypeRust! This is a simple Rust playground where you can build or run your Rust code and share it with others. There are a

Kirill Vasiltsov 28 Dec 12, 2022
Rust Imaging Library: A high-level Rust imaging crate.

ril Rust Imaging Library: A performant and high-level Rust imaging crate. Documentation • Crates.io • Discord What's this? This is a Rust crate design

Jay3332 18 Jan 5, 2023
In this repository you can find modules with code and comments that explain rust syntax and all about Rust lang.

Learn Rust What is this? In this repository you can find modules with code and comments that explain rust syntax and all about Rust lang. This is usef

Domagoj Ratko 5 Nov 5, 2022
Game Boy Emulator written in Rust, as a way to fully grasp the Rust programming language

Flan's Game Boy Emulator Game Boy Emulator written in Rust, as a way to get hands-on with the Rust programming language, and creating a proper project

Flan 3 Dec 31, 2022
Code Examples in Rust. Reviewing RUST

There are some RUST example code here. Run like this cargo run --example enums cargo run --example iterator ... You can learn about RUST coding from

James Johnson 9 Oct 1, 2022
Rust implementation of Andrej Karpathy's micrograd for purposes of learning both ML and Rust.

micrograd_rs Rust implementation of Andrej Karpathy's micrograd for purposes of learning both ML and Rust. Main takeaways Basically the same takeaways

null 3 Oct 28, 2022