Skip to main content

anathema_state_derive/
lib.rs

1use 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;