1#[doc(hidden)]
7#[macro_export]
9macro_rules! before_snippet {
10 () => {
11 r#"
12# #![no_std]
13# use procmacros::handler;
14# use esp_hal::{interrupt::{self, InterruptConfigurable}, time::{Duration, Instant, Rate}};
15# macro_rules! println {
16# ($($tt:tt)*) => { };
17# }
18# macro_rules! print {
19# ($($tt:tt)*) => { };
20# }
21# #[panic_handler]
22# fn panic(_ : &core::panic::PanicInfo) -> ! {
23# loop {}
24# }
25# fn main() {
26# let _ = example();
27# }
28# struct ExampleError {}
29# impl <T> From<T> for ExampleError where T: core::fmt::Debug {
30# fn from(_value: T) -> Self {
31# Self{}
32# }
33# }
34# fn example() -> Result<(), ExampleError> {
35# let mut peripherals = esp_hal::init(esp_hal::Config::default());
36"#
37 };
38}
39
40#[doc(hidden)]
41#[macro_export]
42macro_rules! trm_markdown_link {
43 () => {
44 concat!("[Technical Reference Manual](", $crate::trm_link!(), ")")
45 };
46 ($anchor:literal) => {
47 concat!(
48 "[Technical Reference Manual](",
49 $crate::trm_link!(),
50 "#",
51 $anchor,
52 ")"
53 )
54 };
55}
56
57#[doc(hidden)]
58#[macro_export]
60macro_rules! any_enum {
61 ($(#[$meta:meta])* $vis:vis enum $name:ident {
62 $(
63 $(#[$variant_meta:meta])*
64 $variant:ident($inner:ty)
65 ),* $(,)?
66 }) => {
67 $(#[$meta])*
68 $vis enum $name {
69 $(
70 $(#[$variant_meta])*
71 $variant($inner),
72 )*
73 }
74
75 $(
76 $(#[$variant_meta])*
77 impl From<$inner> for $name {
78 fn from(inner: $inner) -> Self {
79 $name::$variant(inner)
80 }
81 }
82 )*
83 };
84}
85
86#[doc(hidden)]
87#[macro_export]
98macro_rules! any_peripheral {
99 ($(#[$meta:meta])* $vis:vis peripheral $name:ident<'d> {
100 $(
101 $(#[cfg($variant_meta:meta)])*
102 $variant:ident($inner:ty)
103 ),* $(,)?
104 }) => {
105 paste::paste! {
106 $(#[$meta])*
107 #[doc = concat!("let any_peripheral = ", stringify!($name), "::from(peripheral);")]
114 #[derive(Debug)]
116 #[cfg_attr(feature = "defmt", derive(defmt::Format))]
117 $vis struct $name<'d>([< $name Inner >]<'d>);
118
119 impl $name<'_> {
120 #[inline]
126 pub unsafe fn clone_unchecked(&self) -> Self { unsafe {
127 match &self.0 {
128 $(
129 $(#[cfg($variant_meta)])*
130 [< $name Inner >]::$variant(inner) => $name([<$name Inner>]::$variant(inner.clone_unchecked())),
131 )*
132 }
133 }}
134
135 #[inline]
140 pub fn reborrow(&mut self) -> $name<'_> {
141 unsafe { self.clone_unchecked() }
142 }
143 }
144
145 impl $crate::private::Sealed for $name<'_> {}
146
147 $(#[$meta])*
148 #[derive(Debug)]
149 enum [< $name Inner >]<'d> {
150 $(
151 $(#[cfg($variant_meta)])*
152 $variant($inner),
153 )*
154 }
155
156 #[cfg(feature = "defmt")]
157 impl defmt::Format for [< $name Inner >]<'_> {
158 fn format(&self, fmt: defmt::Formatter<'_>) {
159 match self {
160 $(
161 $(#[cfg($variant_meta)])*
162 [< $name Inner >]::$variant(inner) => inner.format(fmt),
163 )*
164 }
165 }
166 }
167
168 #[doc(hidden)]
171 pub trait [<Into $name>]: Sized + $crate::private::Sealed {
172 fn degrade<'a>(self) -> $name<'a>
173 where
174 Self: 'a;
175 }
176
177 impl<'d> [<Into $name>] for $name<'d> {
179 #[inline]
180 fn degrade<'a>(self) -> $name<'a>
181 where
182 Self: 'a,
183 {
184 self
185 }
186 }
187
188 $(
189 $(#[cfg($variant_meta)])*
191 impl<'d> [<Into $name>] for $inner {
192 #[inline]
193 fn degrade<'a>(self) -> $name<'a>
194 where
195 Self: 'a,
196 {
197 $name::from(self)
198 }
199 }
200
201 $(#[cfg($variant_meta)])*
202 impl<'d> From<$inner> for $name<'d> {
203 #[inline]
204 fn from(inner: $inner) -> Self {
205 Self([< $name Inner >]::$variant(inner))
206 }
207 }
208 )*
209 }
210 };
211}
212
213#[macro_export]
216#[doc(hidden)]
217macro_rules! if_set {
218 (, $not_set:expr) => {
219 $not_set
220 };
221 ($set:expr, $not_set:expr) => {
222 $set
223 };
224}
225
226#[macro_export]
231#[doc(hidden)]
232macro_rules! ignore {
233 ($($item:tt)*) => {};
234}
235
236#[macro_export]
244#[doc(hidden)]
245macro_rules! metadata {
246 ($category:literal, $key:ident, $value:expr) => {
247 #[unsafe(link_section = concat!(".espressif.metadata"))]
248 #[used]
249 #[unsafe(export_name = concat!($category, ".", stringify!($key)))]
250 static $key: [u8; $value.len()] = const {
251 let val_bytes = $value.as_bytes();
252 let mut val_bytes_array = [0; $value.len()];
253 let mut i = 0;
254 while i < val_bytes.len() {
255 val_bytes_array[i] = val_bytes[i];
256 i += 1;
257 }
258 val_bytes_array
259 };
260 };
261}