io-adapters

Crates.ioio-adapters
lib.rsio-adapters
version
sourcesrc
created_at2023-12-06 23:47:10.143143
updated_at2024-10-26 14:33:14.698345
descriptionAdapters to convert between different writable APIs.
homepage
repositoryhttps://github.com/SUPERCILEX/io-adapters
max_upload_size
id1060532
Cargo.toml error:TOML parse error at line 19, column 1 | 19 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include`
size0
Alex Saveau (SUPERCILEX)

documentation

README

I/O adapters

This crate provides adapters to compose writeable traits in the standard library. The following conversions are available:

  • fmt::Write -> io::Write
  • io::Write -> hash::Hasher

Use case

Suppose you are writing a function which emits human-readable data in a zero-alloc way. The best interface looks something like this:

fn foo<Out: fmt::Write>(mut output: Out, ...) {
    // Do stuff
    writeln!(output, "My computation: {result}").unwrap();
}

Notice the use of fmt::Write: using this trait provides a type-system guarantee that the data written is valid UTF-8, hence why it should be preferred over io::Write.

Now users of this API can gather data into a String, provide their own fmt::Write implementation, etc. The problem you'll run into is if you'd like to send the output of this function to stdout: there is no built-in way to do so! That's where this crate comes in by providing an adapter, so you can write the following:

foo(&mut io::stdout().write_adapter());
Commit count: 14

cargo fmt