1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mod attributes;
mod inspectable_enum;
mod inspectable_struct;
mod utils;

#[proc_macro_derive(Inspectable, attributes(inspectable))]
pub fn inspectable(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    let input = syn::parse_macro_input!(input as syn::DeriveInput);

    let result = match &input.data {
        syn::Data::Struct(data) => inspectable_struct::expand_struct(&input, data),
        syn::Data::Enum(data) => inspectable_enum::expand_enum(&input, data),
        syn::Data::Union(_) => unimplemented!(),
    };

    result.unwrap_or_else(|err| err.into_compile_error()).into()
}