binary_layout/
endianness.rs

1/// An enum representing the endianness used in a layout for accessing primitive integer fields.
2pub enum EndianKind {
3    Big,
4    Little,
5    Native,
6}
7
8/// This marker trait represents the endianness used in a layout for accessing primitive integer fields.
9pub trait Endianness {
10    /// Accessor to the endianness as a const value
11    const KIND: EndianKind;
12}
13
14/// This is a marker type to mark layouts using big endian encoding. The alternative is [LittleEndian] and [NativeEndian] encoding.
15///
16/// # Example
17/// ```
18/// use binary_layout::prelude::*;
19///
20/// binary_layout!(my_layout, BigEndian, {
21///   field1: i16,
22///   field2: u32,
23/// });
24/// ```
25pub struct BigEndian {}
26impl Endianness for BigEndian {
27    const KIND: EndianKind = EndianKind::Big;
28}
29
30/// This is a marker type to mark layouts using little endian encoding. The alternative is [BigEndian] and [NativeEndian] encoding.
31///
32/// # Example
33/// ```
34/// use binary_layout::prelude::*;
35///
36/// binary_layout!(my_layout, LittleEndian, {
37///   field1: i16,
38///   field2: u32,
39/// });
40/// ```
41pub struct LittleEndian {}
42impl Endianness for LittleEndian {
43    const KIND: EndianKind = EndianKind::Little;
44}
45
46/// This is a marker type to mark layouts using native endian encoding. The alternative is [BigEndian] and [LittleEndian] encoding.
47///
48/// # Example
49/// ```
50/// use binary_layout::prelude::*;
51///
52/// binary_layout!(my_layout, NativeEndian, {
53///   field1: i16,
54///   field2: u32,
55/// });
56/// ```
57pub struct NativeEndian {}
58impl Endianness for NativeEndian {
59    const KIND: EndianKind = EndianKind::Native;
60}