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 throughbytecheck
§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.
- Little
Endian - A wrapper for big-endian types.
- Native
Endian - A wrapper for native-endian types.
Traits§
- Primitive
- A type that has an associated cross-endian storage type.
Type Aliases§
- Atomic
I16_ be - Alias for
BigEndian<AtomicI16>
. - Atomic
I16_ le - Alias for
LittleEndian<AtomicI16>
. - Atomic
I16_ ne - Alias for
NativeEndian<AtomicI16>
. - Atomic
I32_ be - Alias for
BigEndian<AtomicI32>
. - Atomic
I32_ le - Alias for
LittleEndian<AtomicI32>
. - Atomic
I32_ ne - Alias for
NativeEndian<AtomicI32>
. - Atomic
I64_ be - Alias for
BigEndian<AtomicI64>
. - Atomic
I64_ le - Alias for
LittleEndian<AtomicI64>
. - Atomic
I64_ ne - Alias for
NativeEndian<AtomicI64>
. - Atomic
U16_ be - Alias for
BigEndian<AtomicU16>
. - Atomic
U16_ le - Alias for
LittleEndian<AtomicU16>
. - Atomic
U16_ ne - Alias for
NativeEndian<AtomicU16>
. - Atomic
U32_ be - Alias for
BigEndian<AtomicU32>
. - Atomic
U32_ le - Alias for
LittleEndian<AtomicU32>
. - Atomic
U32_ ne - Alias for
NativeEndian<AtomicU32>
. - Atomic
U64_ be - Alias for
BigEndian<AtomicU64>
. - Atomic
U64_ le - Alias for
LittleEndian<AtomicU64>
. - Atomic
U64_ ne - Alias for
NativeEndian<AtomicU64>
. - NonZero
I16_ be - Alias for
BigEndian<NonZeroI16>
. - NonZero
I16_ le - Alias for
LittleEndian<NonZeroI16>
. - NonZero
I16_ ne - Alias for
NativeEndian<NonZeroI16>
. - NonZero
I32_ be - Alias for
BigEndian<NonZeroI32>
. - NonZero
I32_ le - Alias for
LittleEndian<NonZeroI32>
. - NonZero
I32_ ne - Alias for
NativeEndian<NonZeroI32>
. - NonZero
I64_ be - Alias for
BigEndian<NonZeroI64>
. - NonZero
I64_ le - Alias for
LittleEndian<NonZeroI64>
. - NonZero
I64_ ne - Alias for
NativeEndian<NonZeroI64>
. - NonZero
I128_ be - Alias for
BigEndian<NonZeroI128>
. - NonZero
I128_ le - Alias for
LittleEndian<NonZeroI128>
. - NonZero
I128_ ne - Alias for
NativeEndian<NonZeroI128>
. - NonZero
U16_ be - Alias for
BigEndian<NonZeroU16>
. - NonZero
U16_ le - Alias for
LittleEndian<NonZeroU16>
. - NonZero
U16_ ne - Alias for
NativeEndian<NonZeroU16>
. - NonZero
U32_ be - Alias for
BigEndian<NonZeroU32>
. - NonZero
U32_ le - Alias for
LittleEndian<NonZeroU32>
. - NonZero
U32_ ne - Alias for
NativeEndian<NonZeroU32>
. - NonZero
U64_ be - Alias for
BigEndian<NonZeroU64>
. - NonZero
U64_ le - Alias for
LittleEndian<NonZeroU64>
. - NonZero
U64_ ne - Alias for
NativeEndian<NonZeroU64>
. - NonZero
U128_ be - Alias for
BigEndian<NonZeroU128>
. - NonZero
U128_ le - Alias for
LittleEndian<NonZeroU128>
. - NonZero
U128_ 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>
.