1use quote::quote;
2use syn::{parse_macro_input, DeriveInput};
3
4mod entity;
5
6#[proc_macro_derive(Entity, attributes(entity))]
7pub fn derive_entity(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
8 derive_wrapper(input, entity::derive_entity)
9}
10
11fn derive_wrapper<F: Fn(DeriveInput) -> Result<proc_macro2::TokenStream, &'static str>>(
12 input: proc_macro::TokenStream,
13 derive: F,
14) -> proc_macro::TokenStream {
15 match derive(parse_macro_input!(input as DeriveInput)) {
16 Ok(tokens) => tokens.into(),
17 Err(e) => quote!(compile_error!(#e)).into(),
18 }
19}