1use proc_macro::{self, TokenStream};
2use quote::quote;
3use syn::parse_macro_input;
4
5mod opts;
6mod rename;
7mod to_js;
8mod util;
9
10#[proc_macro_derive(ToJs, attributes(convert_js))]
11pub fn derive_to_js(input: TokenStream) -> TokenStream {
12 let mut input = parse_macro_input!(input);
13
14 to_js::expand_derive_serialize(&mut input)
15 .unwrap_or_else(to_compile_errors)
16 .into()
17}
18
19fn to_compile_errors(errors: Vec<syn::Error>) -> proc_macro2::TokenStream {
20 let compile_errors = errors.iter().map(syn::Error::to_compile_error);
21 quote!(#(#compile_errors)*)
22}