1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
extern crate proc_macro; #[macro_use] extern crate syn; #[macro_use] extern crate quote; use proc_macro::TokenStream; #[proc_macro_derive(SerDebug)] pub fn derive(input: TokenStream) -> TokenStream { let syn::DeriveInput { ident, mut generics, .. } = syn::parse(input).unwrap(); generics .make_where_clause() .predicates .push(parse_quote!(Self: ::serde::Serialize)); let (impl_generics, ty_generics, where_clause) = generics.split_for_impl(); (quote! { impl #impl_generics ::std::fmt::Debug for #ident #ty_generics #where_clause { fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { ::serdebug::fmt(self, f) } } }).into() }