1use proc_macro::TokenStream;
2use proc_macro2::Ident;
3use quote::ToTokens;
4use syn::{parse_macro_input, DeriveInput, Fields, Generics, Path};
5
6mod parse;
7mod predicate;
8mod to_tokens;
9
10#[proc_macro_derive(DebugPls, attributes(dbg_pls))]
11pub fn derive(input: TokenStream) -> TokenStream {
12 match DebugImpl::try_from(parse_macro_input!(input as DeriveInput)) {
13 Ok(output) => output.to_token_stream(),
14 Err(err) => err.into_compile_error().into_token_stream(),
15 }
16 .into()
17}
18
19struct DebugImpl {
20 krate: Path,
21 ident: Ident,
22 mode: Mode,
23 generics: Generics,
24}
25
26enum Mode {
27 Struct(StructFields),
28 Enum(Vec<Var>),
29}
30
31struct Var {
32 ident: Ident,
33 fields: Fields,
34}
35
36struct StructFields(Fields);