Crate bitendian

Source
Expand description

Convenience methods for encoding and decoding numbers in either big-endian or little-endian.

Primitive integers implement BitEndian.

use bitendian::BitEndian;

let it: u16 = 256;
assert_eq!(BitEndian::to_be_bytes(it), [1, 0]);
assert_eq!(BitEndian::to_le_bytes(it), [0, 1]);

Extension methods provide convenient readers and writers.

use bitendian::{io::WriteExt as _, tokio::AsyncReadExt as _};

let mut buf = vec![];
buf.write_be(1u16)?;
let swapped = buf.as_slice().read_le().await?;
assert_eq!(256u16, swapped);

§Comparison with byteorder.

  • This crate leverages type inference to avoid defining dozens of e.g write_uXX methods.
    use byteorder::{ReadBytesExt as _, BE, LE};
    use bitendian::io::ReadExt as _;
    use std::io;
    
    fn read_header(mut r: impl io::Read) -> io::Result<Header> {
        // before...
        Ok(Header {
            count: r.read_u16::<BE>()?,
                       // ^ this can be inferred
            offset: r.read_i32::<LE>()?
                              // ^ this could be a plain method
        })
        // after
        Ok(Header {
            count: r.read_be()?,
            offset: r.read_le()?,
        })
    }
  • This crate supports run-time endianness.
  • This crate supports futures::io and tokio::io via the futures and tokio features respectively.
  • This crate only supports rust’s built-in types, not, eg. u24.
  • Both crates support #![no_std] by disabling the default std feature.

Modules§

futuresfutures
Extension methods for asynchronous IO with futures.
iostd
Extension methods for standard library IO.
tokiotokio
Extension methods for asynchronous IO with tokio.

Enums§

Endian

Traits§

BitEndian
A type that can be infallibly written to or read from an array in an endian-dependent manner.