Expand description

Defines a trait built on top of io::Write to write things into it.

Instead of writing blanket implementations it its better to use wrappers with write_into function because there might be implementation conflicts (e.g. between WriteInto for u8 and WriteInto for any std::iter::IntoIterator).

Example

use leb128;
use std::{convert, io};
use write_into::{WriteInto, write_into};

// https://en.wikipedia.org/wiki/LEB128
struct Leb128<T>(T);

impl<T> WriteInto for Leb128<T>
where
    // `leb128` crate uses `u64` and I'm too lazy to write multiple implementations (._.)
    T: convert::Into<u64>,
{
    type Output = ();

    fn write_into(self, sink: &mut impl io::Write) -> io::Result<Self::Output> {
        leb128::write::unsigned(sink, self.0.into())?;
        Ok(())
    }
}

let mut buffer = Vec::new();
write_into(&mut buffer, Leb128(1337u32)).unwrap();

The crate also provides implementations for endianness-aware writing for primitive integral types (see BigEndian and LittleEndian wrappers).

Structs

Used to write values in big endian byte order.

Used to write values in little endian byte order.

Traits

Writes value into I/O sink.

Functions

An alias for WriteInto::write_into for writing write_into(sink, Wrapper(...)) instead of Wrapper(...).write_into(sink).