Crate rend

Source
Expand description

§rend

rend is a library that provides endian-aware primitives for Rust.

It’s similar in design to simple_endian, but has support for more builtin types such as atomics and nonzero integers. It also has support for const functions since it does not rely on traits.

rend does not provide endian-aware types for types that are inherently endian-agnostic, such as bool and u8. It does not provide endian-aware types for types that have an architecture-dependent size, such as isize and usize. It’s also not extensible to custom types.

rend is intended to be used to build portable types that can be shared between different architectures, especially with zero-copy deserialization.

§Features

  • std: Enables standard library support (enabled by default)
  • validation: Enables validation support through bytecheck

§Example:

use rend::*;

let little_int = i32_le::new(0x12345678);
// Internal representation is little-endian
assert_eq!(
    [0x78, 0x56, 0x34, 0x12],
    unsafe { ::core::mem::transmute::<_, [u8; 4]>(little_int) }
);

// Can also be made with `.into()`
let little_int: i32_le = 0x12345678.into();
// Still formats correctly
assert_eq!("305419896", format!("{}", little_int));
assert_eq!("0x12345678", format!("0x{:x}", little_int));

let big_int = i32_be::new(0x12345678);
// Internal representation is big-endian
assert_eq!(
    [0x12, 0x34, 0x56, 0x78],
    unsafe { ::core::mem::transmute::<_, [u8; 4]>(big_int) }
);

// Can also be made with `.into()`
let big_int: i32_be = 0x12345678.into();
// Still formats correctly
assert_eq!("305419896", format!("{}", big_int));
assert_eq!("0x12345678", format!("0x{:x}", big_int));

Structs§

BigEndian
A wrapper for little-endian types.
LittleEndian
A wrapper for big-endian types.
NativeEndian
A wrapper for native-endian types.

Traits§

Primitive
A type that has an associated cross-endian storage type.

Type Aliases§

AtomicI16_be
Alias for BigEndian<AtomicI16> .
AtomicI16_le
Alias for LittleEndian<AtomicI16> .
AtomicI16_ne
Alias for NativeEndian<AtomicI16> .
AtomicI32_be
Alias for BigEndian<AtomicI32> .
AtomicI32_le
Alias for LittleEndian<AtomicI32> .
AtomicI32_ne
Alias for NativeEndian<AtomicI32> .
AtomicI64_be
Alias for BigEndian<AtomicI64> .
AtomicI64_le
Alias for LittleEndian<AtomicI64> .
AtomicI64_ne
Alias for NativeEndian<AtomicI64> .
AtomicU16_be
Alias for BigEndian<AtomicU16> .
AtomicU16_le
Alias for LittleEndian<AtomicU16> .
AtomicU16_ne
Alias for NativeEndian<AtomicU16> .
AtomicU32_be
Alias for BigEndian<AtomicU32> .
AtomicU32_le
Alias for LittleEndian<AtomicU32> .
AtomicU32_ne
Alias for NativeEndian<AtomicU32> .
AtomicU64_be
Alias for BigEndian<AtomicU64> .
AtomicU64_le
Alias for LittleEndian<AtomicU64> .
AtomicU64_ne
Alias for NativeEndian<AtomicU64> .
NonZeroI16_be
Alias for BigEndian<NonZeroI16> .
NonZeroI16_le
Alias for LittleEndian<NonZeroI16> .
NonZeroI16_ne
Alias for NativeEndian<NonZeroI16> .
NonZeroI32_be
Alias for BigEndian<NonZeroI32> .
NonZeroI32_le
Alias for LittleEndian<NonZeroI32> .
NonZeroI32_ne
Alias for NativeEndian<NonZeroI32> .
NonZeroI64_be
Alias for BigEndian<NonZeroI64> .
NonZeroI64_le
Alias for LittleEndian<NonZeroI64> .
NonZeroI64_ne
Alias for NativeEndian<NonZeroI64> .
NonZeroI128_be
Alias for BigEndian<NonZeroI128> .
NonZeroI128_le
Alias for LittleEndian<NonZeroI128> .
NonZeroI128_ne
Alias for NativeEndian<NonZeroI128> .
NonZeroU16_be
Alias for BigEndian<NonZeroU16> .
NonZeroU16_le
Alias for LittleEndian<NonZeroU16> .
NonZeroU16_ne
Alias for NativeEndian<NonZeroU16> .
NonZeroU32_be
Alias for BigEndian<NonZeroU32> .
NonZeroU32_le
Alias for LittleEndian<NonZeroU32> .
NonZeroU32_ne
Alias for NativeEndian<NonZeroU32> .
NonZeroU64_be
Alias for BigEndian<NonZeroU64> .
NonZeroU64_le
Alias for LittleEndian<NonZeroU64> .
NonZeroU64_ne
Alias for NativeEndian<NonZeroU64> .
NonZeroU128_be
Alias for BigEndian<NonZeroU128> .
NonZeroU128_le
Alias for LittleEndian<NonZeroU128> .
NonZeroU128_ne
Alias for NativeEndian<NonZeroU128> .
char_be
Alias for BigEndian<char> .
char_le
Alias for LittleEndian<char> .
char_ne
Alias for NativeEndian<char> .
f32_be
Alias for BigEndian<f32> .
f32_le
Alias for LittleEndian<f32> .
f32_ne
Alias for NativeEndian<f32> .
f64_be
Alias for BigEndian<f64> .
f64_le
Alias for LittleEndian<f64> .
f64_ne
Alias for NativeEndian<f64> .
i16_be
Alias for BigEndian<i16> .
i16_le
Alias for LittleEndian<i16> .
i16_ne
Alias for NativeEndian<i16> .
i32_be
Alias for BigEndian<i32> .
i32_le
Alias for LittleEndian<i32> .
i32_ne
Alias for NativeEndian<i32> .
i64_be
Alias for BigEndian<i64> .
i64_le
Alias for LittleEndian<i64> .
i64_ne
Alias for NativeEndian<i64> .
i128_be
Alias for BigEndian<i128> .
i128_le
Alias for LittleEndian<i128> .
i128_ne
Alias for NativeEndian<i128> .
u16_be
Alias for BigEndian<u16> .
u16_le
Alias for LittleEndian<u16> .
u16_ne
Alias for NativeEndian<u16> .
u32_be
Alias for BigEndian<u32> .
u32_le
Alias for LittleEndian<u32> .
u32_ne
Alias for NativeEndian<u32> .
u64_be
Alias for BigEndian<u64> .
u64_le
Alias for LittleEndian<u64> .
u64_ne
Alias for NativeEndian<u64> .
u128_be
Alias for BigEndian<u128> .
u128_le
Alias for LittleEndian<u128> .
u128_ne
Alias for NativeEndian<u128> .