Crate rend[][src]

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.

Type Definitions

AtomicI16_be

Alias for BigEndian

AtomicI16_le

Alias for LittleEndian

AtomicI16_ne

Alias for NativeEndian

AtomicI32_be

Alias for BigEndian

AtomicI32_le

Alias for LittleEndian

AtomicI32_ne

Alias for NativeEndian

AtomicI64_be

Alias for BigEndian

AtomicI64_le

Alias for LittleEndian

AtomicI64_ne

Alias for NativeEndian

AtomicU16_be

Alias for BigEndian

AtomicU16_le

Alias for LittleEndian

AtomicU16_ne

Alias for NativeEndian

AtomicU32_be

Alias for BigEndian

AtomicU32_le

Alias for LittleEndian

AtomicU32_ne

Alias for NativeEndian

AtomicU64_be

Alias for BigEndian

AtomicU64_le

Alias for LittleEndian

AtomicU64_ne

Alias for NativeEndian

NonZeroI16_be

Alias for BigEndian

NonZeroI16_le

Alias for LittleEndian

NonZeroI16_ne

Alias for NativeEndian

NonZeroI32_be

Alias for BigEndian

NonZeroI32_le

Alias for LittleEndian

NonZeroI32_ne

Alias for NativeEndian

NonZeroI64_be

Alias for BigEndian

NonZeroI64_le

Alias for LittleEndian

NonZeroI64_ne

Alias for NativeEndian

NonZeroI128_be

Alias for BigEndian

NonZeroI128_le

Alias for LittleEndian

NonZeroI128_ne

Alias for NativeEndian

NonZeroU16_be

Alias for BigEndian

NonZeroU16_le

Alias for LittleEndian

NonZeroU16_ne

Alias for NativeEndian

NonZeroU32_be

Alias for BigEndian

NonZeroU32_le

Alias for LittleEndian

NonZeroU32_ne

Alias for NativeEndian

NonZeroU64_be

Alias for BigEndian

NonZeroU64_le

Alias for LittleEndian

NonZeroU64_ne

Alias for NativeEndian

NonZeroU128_be

Alias for BigEndian

NonZeroU128_le

Alias for LittleEndian

NonZeroU128_ne

Alias for NativeEndian

char_be

Alias for BigEndian

char_le

Alias for LittleEndian

char_ne

Alias for NativeEndian

f32_be

Alias for BigEndian

f32_le

Alias for LittleEndian

f32_ne

Alias for NativeEndian

f64_be

Alias for BigEndian

f64_le

Alias for LittleEndian

f64_ne

Alias for NativeEndian

i16_be

Alias for BigEndian

i16_le

Alias for LittleEndian

i16_ne

Alias for NativeEndian

i32_be

Alias for BigEndian

i32_le

Alias for LittleEndian

i32_ne

Alias for NativeEndian

i64_be

Alias for BigEndian

i64_le

Alias for LittleEndian

i64_ne

Alias for NativeEndian

i128_be

Alias for BigEndian

i128_le

Alias for LittleEndian

i128_ne

Alias for NativeEndian

u16_be

Alias for BigEndian

u16_le

Alias for LittleEndian

u16_ne

Alias for NativeEndian

u32_be

Alias for BigEndian

u32_le

Alias for LittleEndian

u32_ne

Alias for NativeEndian

u64_be

Alias for BigEndian

u64_le

Alias for LittleEndian

u64_ne

Alias for NativeEndian

u128_be

Alias for BigEndian

u128_le

Alias for LittleEndian

u128_ne

Alias for NativeEndian