Crate rend[][src]

rend

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

It’s similar in design to simple_endian, with the exception that it’s easily extendable to other endiannesses than the builtin BigEndian and LittleEndian. It also has support for more builtin types such as atomics and nonzero integers.

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

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

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

The big-endian endianness

Endian

A type stored with a particular endianness

LittleEndian

The little-endian endianness

Traits

Endianness

A type that can convert between native endianness and a target endianness.

Primitive

A type that can convert between big-endian and little-endian.

Type Definitions

AtomicI16_be

Alias for Endian<AtomicI16, BigEndian>

AtomicI16_le

Alias for Endian<AtomicI16, LittleEndian>

AtomicI32_be

Alias for Endian<AtomicI32, BigEndian>

AtomicI32_le

Alias for Endian<AtomicI32, LittleEndian>

AtomicI64_be

Alias for Endian<AtomicI64, BigEndian>

AtomicI64_le

Alias for Endian<AtomicI64, LittleEndian>

AtomicU16_be

Alias for Endian<AtomicU16, BigEndian>

AtomicU16_le

Alias for Endian<AtomicU16, LittleEndian>

AtomicU32_be

Alias for Endian<AtomicU32, BigEndian>

AtomicU32_le

Alias for Endian<AtomicU32, LittleEndian>

AtomicU64_be

Alias for Endian<AtomicU64, BigEndian>

AtomicU64_le

Alias for Endian<AtomicU64, LittleEndian>

NonZeroI16_be

Alias for Endian<NonZeroI16, BigEndian>

NonZeroI16_le

Alias for Endian<NonZeroI16, LittleEndian>

NonZeroI32_be

Alias for Endian<NonZeroI32, BigEndian>

NonZeroI32_le

Alias for Endian<NonZeroI32, LittleEndian>

NonZeroI64_be

Alias for Endian<NonZeroI64, BigEndian>

NonZeroI64_le

Alias for Endian<NonZeroI64, LittleEndian>

NonZeroI128_be

Alias for Endian<NonZeroI128, BigEndian>

NonZeroI128_le

Alias for Endian<NonZeroI128, LittleEndian>

NonZeroU16_be

Alias for Endian<NonZeroU16, BigEndian>

NonZeroU16_le

Alias for Endian<NonZeroU16, LittleEndian>

NonZeroU32_be

Alias for Endian<NonZeroU32, BigEndian>

NonZeroU32_le

Alias for Endian<NonZeroU32, LittleEndian>

NonZeroU64_be

Alias for Endian<NonZeroU64, BigEndian>

NonZeroU64_le

Alias for Endian<NonZeroU64, LittleEndian>

NonZeroU128_be

Alias for Endian<NonZeroU128, BigEndian>

NonZeroU128_le

Alias for Endian<NonZeroU128, LittleEndian>

char_be

Alias for Endian<char, BigEndian>

char_le

Alias for Endian<char, LittleEndian>

f32_be

Alias for Endian<f32, BigEndian>

f32_le

Alias for Endian<f32, LittleEndian>

f64_be

Alias for Endian<f64, BigEndian>

f64_le

Alias for Endian<f64, LittleEndian>

i16_be

Alias for Endian<i16, BigEndian>

i16_le

Alias for Endian<i16, LittleEndian>

i32_be

Alias for Endian<i32, BigEndian>

i32_le

Alias for Endian<i32, LittleEndian>

i64_be

Alias for Endian<i64, BigEndian>

i64_le

Alias for Endian<i64, LittleEndian>

i128_be

Alias for Endian<i128, BigEndian>

i128_le

Alias for Endian<i128, LittleEndian>

u16_be

Alias for Endian<u16, BigEndian>

u16_le

Alias for Endian<u16, LittleEndian>

u32_be

Alias for Endian<u32, BigEndian>

u32_le

Alias for Endian<u32, LittleEndian>

u64_be

Alias for Endian<u64, BigEndian>

u64_le

Alias for Endian<u64, LittleEndian>

u128_be

Alias for Endian<u128, BigEndian>

u128_le

Alias for Endian<u128, LittleEndian>