Skip to main content

nimiq_hash_derive/
lib.rs

1use proc_macro2::TokenStream;
2use quote::quote;
3use syn::{parse_macro_input, DeriveInput};
4
5#[proc_macro_derive(SerializeContent)]
6pub fn derive_serialize(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
7    let ast = parse_macro_input!(input as DeriveInput);
8    proc_macro::TokenStream::from(impl_serialize_content(&ast))
9}
10
11fn impl_serialize_content(ast: &DeriveInput) -> TokenStream {
12    let name = &ast.ident;
13    let (impl_generics, ty_generics, _) = ast.generics.split_for_impl();
14
15    let generated = quote! {
16        impl #impl_generics ::nimiq_hash::SerializeContent for #name #ty_generics where #name #ty_generics: ::nimiq_hash::nimiq_serde::Serialize {
17            #[allow(unused_mut, unused_variables)]
18            fn serialize_content<W: ::std::io::Write, H>(&self, writer: &mut W) -> ::std::io::Result<()> {
19                ::nimiq_hash::nimiq_serde::Serialize::serialize_to_writer(self, writer)?;
20                Ok(())
21            }
22        }
23    };
24    generated
25}