mol_derive/
lib.rs

1use proc_macro::{TokenStream, TokenTree};
2
3#[proc_macro_derive(ToBox)]
4pub fn derive_as_box(tokens: TokenStream) -> TokenStream {
5  let mut target_name = None;
6  let mut token_iter = tokens.into_iter();
7
8  while let Some(token) = token_iter.next() {
9    if let TokenTree::Ident(ident) = token {
10      let ident_str = ident.to_string();
11      if ident_str == "struct" || ident_str == "enum" {
12        target_name = token_iter.next().map(|token| token.to_string());
13
14        break;
15      }
16    }
17  }
18
19  if let Some(name) = target_name {
20    format!("impl ToBox for {} {{}}", name).parse().unwrap()
21  } else {
22    panic!("Must be derived on enum or struct")
23  }
24}