pub fn derive(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
let input = syn::parse_macro_input!(input as syn::DeriveInput);
let name = &input.ident;
let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl();
let role = crate::common::codegen::role_override(&input.attrs)
.unwrap_or_else(|| quote::quote!(::hexser::graph::Role::Directive));
let registration = crate::common::codegen::registrable_and_submit(
&input,
"HexDirective",
quote::quote!(::hexser::graph::Layer::Application),
role,
);
let expanded = quote::quote! {
impl #impl_generics ::hexser::application::Directive for #name #ty_generics #where_clause {
fn validate(&self) -> ::hexser::HexResult<()> {
::std::result::Result::Ok(())
}
}
#registration
};
proc_macro::TokenStream::from(expanded)
}