1extern crate proc_macro;
2use proc_macro::TokenStream;
3mod ctxt;
4mod errors;
5use quote::quote;
6
7#[proc_macro_derive(JsonError, attributes(json_error))]
8pub fn derive_api_error(input: TokenStream) -> TokenStream {
9 let input = syn::parse_macro_input!(input as syn::DeriveInput);
10
11 errors::expand_derive(&input)
12 .unwrap_or_else(to_compile_errors)
13 .into()
14}
15
16fn to_compile_errors(errors: Vec<syn::Error>) -> proc_macro2::TokenStream {
17 let compile_errors = errors.iter().map(syn::Error::to_compile_error);
18 quote!(#(#compile_errors)*)
19}