1#![warn(missing_docs)]
4
5use proc_macro::TokenStream;
6use proc_macro_error::proc_macro_error;
7
8#[cfg(all(feature = "defmt", feature = "log"))]
9compile_error!("defmt and log are mutually exclusive");
10
11#[cfg(feature = "defmt")]
17#[proc_macro_attribute]
18#[proc_macro_error]
19pub fn format(_: TokenStream, input: TokenStream) -> TokenStream {
20 let input = syn::parse_macro_input!(input as syn::DeriveInput);
21 quote::quote!(
22 #[allow(unused)]
23 use l0g::__internal::*;
24 #[derive(defmt::Format)]
25 #input
26 )
27 .into()
28}
29
30#[cfg(feature = "log")]
36#[proc_macro_attribute]
37#[proc_macro_error]
38pub fn format(_: TokenStream, input: TokenStream) -> TokenStream {
39 let input = syn::parse_macro_input!(input as syn::DeriveInput);
40 quote::quote!(
41 #[derive(core::fmt::Debug)]
42 #input
43 )
44 .into()
45}
46
47#[cfg(all(not(feature = "defmt"), not(feature = "log")))]
53#[proc_macro_attribute]
54#[proc_macro_error]
55pub fn format(_: TokenStream, input: TokenStream) -> TokenStream {
56 input
57}