use proc_macro::TokenStream;
use quote::quote;
use syn;
#[proc_macro_derive(Named)]
pub fn my_macro_here_derive(input: TokenStream) -> TokenStream {
let ast = syn::parse(input).unwrap();
impl_named_macro(&ast)
}
fn impl_named_macro(ast: &syn::DeriveInput) -> TokenStream {
let name = &ast.ident;
let gen = quote! {
impl Named for #name<'a> {
fn set_name(&mut self, new_name:&str){
self.name = new_name;
}
fn get_name(&self) -> &'a str{
self.name
}
}
};
gen.into()
}
trait Named {
fn set_name(&mut self, new_name:&str);
fn get_name(&self) -> &str;
}