1use proc_macro::TokenStream;
2use quote::quote;
3use syn::parse_macro_input;
4
5mod args;
6mod dyncast;
7mod linker;
9mod parse;
10
11#[proc_macro_attribute]
12pub fn dyncast(args: TokenStream, input: TokenStream) -> TokenStream {
13 let args = parse_macro_input!(args as args::Args);
14 let mut item = parse_macro_input!(input as parse::Item);
15 let expanded = match dyncast::expand(&mut item, args) {
16 Ok(expanded) => expanded,
17 Err(err) => err.to_compile_error(),
18 };
19 TokenStream::from(quote! {
20 #item
21 #expanded
22 })
23}