use proc_macro2::TokenStream;
use quote::quote;
use syn::{Data, DeriveInput, Result};
use crate::path::core_path;
pub fn expand(input: DeriveInput) -> Result<TokenStream> {
match &input.data {
Data::Struct(_) | Data::Enum(_) => {}
Data::Union(_) => {
return Err(syn::Error::new_spanned(
&input.ident,
"DomainEvent can only be derived for a struct or enum",
));
}
}
let core = core_path()?;
let name = &input.ident;
let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl();
Ok(quote! {
impl #impl_generics #core::DomainEvent for #name #ty_generics #where_clause {}
})
}