pub fn derive(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
let input = syn::parse_macro_input!(input as syn::DeriveInput);
if let Err(e) = crate::common::validation::validate_struct_or_enum(&input) {
return e.to_compile_error().into();
}
let role = crate::common::codegen::role_override(&input.attrs)
.unwrap_or_else(|| quote::quote!(::hexser::graph::Role::Entity));
let expanded = crate::common::codegen::registrable_and_submit(
&input,
"HexDomain",
quote::quote!(::hexser::graph::Layer::Domain),
role,
);
proc_macro::TokenStream::from(expanded)
}