anathema_state_derive/
lib.rs1use syn::spanned::Spanned as _;
2use syn::{DeriveInput, parse_macro_input};
3
4static DERIVE_NAMESPACE: &str = "anathema";
5
6#[proc_macro_derive(State, attributes(anathema, state_ignore))]
7pub fn anathema(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
8 let input = parse_macro_input!(input as DeriveInput);
9 match &input.data {
10 syn::Data::Struct(data) => structs::generate(&input, data),
11
12 syn::Data::Enum(data) => syn::Error::new(
13 data.enum_token.span(),
14 "anathema's State cannot be derived on enums currently",
15 )
16 .to_compile_error()
17 .into(),
18
19 syn::Data::Union(data) => syn::Error::new(
20 data.union_token.span(),
21 "anathema's State cannot be derived on unions currently",
22 )
23 .to_compile_error()
24 .into(),
25 }
26}
27
28mod attributes;
29mod errors;
30mod structs;