to_syn_error_derive/
lib.rs

1extern crate proc_macro;
2
3mod parse;
4
5use parse::Input;
6use proc_macro::TokenStream;
7use quote::quote;
8
9#[proc_macro_derive(ToSynError)]
10pub fn to_syn_error_derive(input: TokenStream) -> TokenStream {
11    let input: Input = match syn::parse(input) {
12        Ok(i) => i,
13        Err(e) => {
14            return e.to_compile_error().into();
15        }
16    };
17    let name = input.get_name();
18    quote! {
19        impl ToSynError for #name{
20            fn to_syn_error(&self,span:proc_macro2::Span)->syn::Error{
21                syn::Error::new(span,self.to_string())
22            }
23        }
24    }
25    .into()
26}