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 |