to_syn_error_derive/
lib.rs1extern 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}