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 |
AtomicI16_le | Alias for |
AtomicI32_be | Alias for |
AtomicI32_le | Alias for |
AtomicI64_be | Alias for |
AtomicI64_le | Alias for |
AtomicU16_be | Alias for |
AtomicU16_le | Alias for |
AtomicU32_be | Alias for |
AtomicU32_le | Alias for |
AtomicU64_be | Alias for |
AtomicU64_le | Alias for |
NonZeroI16_be | Alias for |
NonZeroI16_le | Alias for |
NonZeroI32_be | Alias for |
NonZeroI32_le | Alias for |
NonZeroI64_be | Alias for |
NonZeroI64_le | Alias for |
NonZeroI128_be | Alias for |
NonZeroI128_le | Alias for |
NonZeroU16_be | Alias for |
NonZeroU16_le | Alias for |
NonZeroU32_be | Alias for |
NonZeroU32_le | Alias for |
NonZeroU64_be | Alias for |
NonZeroU64_le | Alias for |
NonZeroU128_be | Alias for |
NonZeroU128_le | Alias for |
char_be | Alias for |
char_le | Alias for |
f32_be | Alias for |
f32_le | Alias for |
f64_be | Alias for |
f64_le | Alias for |
i16_be | Alias for |
i16_le | Alias for |
i32_be | Alias for |
i32_le | Alias for |
i64_be | Alias for |
i64_le | Alias for |
i128_be | Alias for |
i128_le | Alias for |
u16_be | Alias for |
u16_le | Alias for |
u32_be | Alias for |
u32_le | Alias for |
u64_be | Alias for |
u64_le | Alias for |
u128_be | Alias for |
u128_le | Alias for |