use proc_macro::TokenStream;
use syn::{Data, DeriveInput, parse_macro_input};
mod attrs;
mod diagnostics;
mod enum_codegen;
mod field_codegen;
mod internal;
mod settings_codegen;
mod struct_codegen;
#[cfg(test)]
mod tests;
#[proc_macro_derive(ImGuiReflect, attributes(imgui))]
pub fn derive_imgui_reflect(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
let ident = input.ident;
let generics = input.generics;
let attrs = input.attrs;
match input.data {
Data::Struct(data) => struct_codegen::derive_for_struct(ident, generics, data),
Data::Enum(data) => enum_codegen::derive_for_enum(ident, generics, attrs, data),
Data::Union(data) => diagnostics::union_not_supported(data),
}
}