1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
extern crate proc_macro;
use proc_macro2::{Ident, Span};
use quote::quote;
use syn::{parse_macro_input, Data, DeriveInput};
#[proc_macro_derive(Checked)]
pub fn derive_checked_ctor(item: proc_macro::TokenStream) -> proc_macro::TokenStream {
let input: DeriveInput = parse_macro_input!(item as DeriveInput);
if let Data::Struct(_existing_struct) = &input.data {
let mut new_struct: DeriveInput = input.clone();
let new_struct_name = format!("{}{}", new_struct.ident, "Checked");
new_struct.ident = Ident::new(&new_struct_name, Span::call_site());
let expanded = quote!(#new_struct);
return proc_macro::TokenStream::from(expanded);
} else {
panic!("Expected struct");
}
}