1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#![macro_use]
#![allow(unknown_lints, unused_macro_rules)]

macro_rules! typestate {
    ($name:ident, $doc:expr) => {
        paste::paste! {
            #[doc = "[Typestate] for " $doc "."]
            ///
            /// [Typestate]: https://docs.rust-embedded.org/book/static-guarantees/typestate-programming.html
            #[derive(Debug, PartialEq, Eq, Clone, Copy)]
            #[cfg_attr(feature = "defmt", derive(defmt::Format))]
            pub struct $name {
                _priv: (),
            }
        }

        impl $name {
            #[allow(dead_code)]
            pub(crate) const fn new() -> Self {
                Self { _priv: () }
            }
        }
    };
    ($name:ident) => {
        paste::paste! {
            #[derive(Debug, PartialEq, Eq, Clone, Copy)]
            #[cfg_attr(feature = "defmt", derive(defmt::Format))]
            struct $name {
                _priv: (),
            }
        }

        impl $name {
            #[allow(dead_code)]
            pub(crate) const fn new() -> Self {
                Self { _priv: () }
            }
        }
    };
}

// helper for conditional compilation
#[cfg(any(feature = "stm32wl5x_cm4", feature = "stm32wle5"))]
macro_rules! c1_c2 {
    ($c1:expr, $c2:expr) => {
        $c1
    };
    ($c1:expr, $c2:expr,) => {
        $c1
    };
}

#[cfg(feature = "stm32wl5x_cm0p")]
macro_rules! c1_c2 {
    ($c1:expr, $c2:expr) => {
        $c2
    };
    ($c1:expr, $c2:expr,) => {
        $c2
    };
}