1pub(crate) fn to_base_field(field: &str) -> &str {
2 field.split_once('[').map_or(field, |(base, _)| base)
3}
4
5macro_rules! include_generated {
6 ($file:literal) => {
7 include!(concat!(
8 env!("CARGO_MANIFEST_DIR"),
9 "/src/generated/",
10 $file,
11 ".rs"
12 ));
13 };
14}
15
16macro_rules! byte_enum {
17 (
18 $( #[$attr:meta] )*
19 $pub:vis enum $name:ident {
20 $(
21 $( #[$variant_attr:meta] )*
22 $variant:ident = $value:expr
23 ),+
24 $(,)?
25 }
26 ) => {
27 $( #[$attr] )*
28 $pub enum $name {
29 $( $( #[$variant_attr] )* $variant = $value ),+
30 }
31
32 impl $name {
33 #[allow(dead_code)]
34 pub(crate) const fn from_byte(byte: u8) -> Option<Self> {
35 match byte {
36 $( $value => Some(Self::$variant), )+
37 _ => None,
38 }
39 }
40
41 #[allow(dead_code)]
42 pub(crate) fn from_num_str(s: &str) -> Option<Self> {
43 match s {
44 $( stringify!($value) => Some(Self::$variant), )+
45 _ => None,
46 }
47 }
48 }
49
50 impl From<$name> for u8 {
51 fn from(from: $name) -> u8 {
52 match from {
53 $( $name::$variant => $value ),+
54 }
55 }
56 }
57 }
58}