bitendian

Crates.iobitendian
lib.rsbitendian
version0.2.0
sourcesrc
created_at2023-11-07 00:45:23.366282
updated_at2023-11-07 01:13:09.688315
descriptionErgonomic library for reading/writing numbers in big-endian and little-endian with async support.
homepagehttps://github.com/aatifsyed/bitendian
repositoryhttps://github.com/aatifsyed/bitendian
max_upload_size
id1027391
size30,484
Aatif Syed (aatifsyed)

documentation

https://docs.rs/bitendian

README

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.
Commit count: 24

cargo fmt