dbg_pls_derive/
lib.rs

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);