dyncast_impl/
lib.rs

1use proc_macro::TokenStream;
2use quote::quote;
3use syn::parse_macro_input;
4
5mod args;
6mod dyncast;
7// mod hash;
8mod 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}