1#[cfg(feature = "defmt")]
24pub use defmt::Format;
25
26#[allow(unused)]
28#[cfg(not(feature = "defmt"))]
29pub trait Format {}
30
31#[cfg(feature = "defmt")]
33pub use defmt::Debug2Format;
34
35#[allow(non_snake_case)]
37#[cfg(not(feature = "defmt"))]
38#[inline]
39pub fn Debug2Format<T>(value: &T) -> &T {
40 value
41}
42
43#[macro_export]
47macro_rules! trace {
48 ($($arg:tt)*) => {
49 #[cfg(feature = "defmt")]
50 defmt::trace!($($arg)*);
51
52 #[cfg(all(feature = "tracing", not(feature = "defmt")))]
53 tracing::trace!($($arg)*);
54
55 #[cfg(not(any(feature = "defmt", feature = "tracing")))]
56 { let _ = format_args!($($arg)*); } };
58}
59
60#[macro_export]
61macro_rules! debug {
62 ($($arg:tt)*) => {
63 #[cfg(feature = "defmt")]
64 defmt::debug!($($arg)*);
65
66 #[cfg(all(feature = "tracing", not(feature = "defmt")))]
67 tracing::debug!($($arg)*);
68
69 #[cfg(not(any(feature = "defmt", feature = "tracing")))]
70 { let _ = format_args!($($arg)*); } };
72}
73
74#[macro_export]
75macro_rules! info {
76 ($($arg:tt)*) => {
77 #[cfg(feature = "defmt")]
78 defmt::info!($($arg)*);
79
80 #[cfg(all(feature = "tracing", not(feature = "defmt")))]
81 tracing::info!($($arg)*);
82
83 #[cfg(not(any(feature = "defmt", feature = "tracing")))]
84 { let _ = format_args!($($arg)*); } };
86}
87
88#[macro_export]
89macro_rules! warn {
90 ($($arg:tt)*) => {
91 #[cfg(feature = "defmt")]
92 defmt::warn!($($arg)*);
93
94 #[cfg(all(feature = "tracing", not(feature = "defmt")))]
95 tracing::warn!($($arg)*);
96
97 #[cfg(not(any(feature = "defmt", feature = "tracing")))]
98 { let _ = format_args!($($arg)*); } };
100}
101
102#[macro_export]
103macro_rules! error {
104 ($($arg:tt)*) => {
105 #[cfg(feature = "defmt")]
106 defmt::error!($($arg)*);
107
108 #[cfg(all(feature = "tracing", not(feature = "defmt")))]
109 tracing::error!($($arg)*);
110
111 #[cfg(not(any(feature = "defmt", feature = "tracing")))]
112 { let _ = format_args!($($arg)*); } };
114}
115
116#[allow(unused)]
118pub use crate::{debug, error, info, trace, warn};