use proc_macro2::TokenStream;
use proc_macro_error2::abort;
use quote::quote;
use syn::{Data, DataStruct, DeriveInput};
pub fn expand_transform(input: DeriveInput) -> syn::Result<TokenStream> {
let _fields = match input.data {
Data::Struct(DataStruct { fields, .. }) => fields,
_ => {
abort!(input.ident, "`#[derive(Transform)]` only works on structs"; help = "Try using the derive macro on a struct")
}
};
let struct_name = input.ident;
let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl();
Ok(quote! {
#[automatically_derived]
impl #impl_generics transformer::Transform for #struct_name #ty_generics #where_clause {
fn transform(self) -> Self {
self
}
}
})
}