1mod common;
2mod composite;
3mod enum_gen;
4mod explicit_test_case;
5mod hegel_main;
6mod hegel_test;
7mod rewrite_draws;
8mod standalone_function;
9mod stateful;
10mod struct_gen;
11mod utils;
12
13use proc_macro::TokenStream;
14use syn::{Data, DeriveInput, ItemFn, ItemImpl, parse_macro_input};
15
16#[proc_macro_derive(DefaultGenerator)]
19pub fn derive_generator(input: TokenStream) -> TokenStream {
20 let input = parse_macro_input!(input as DeriveInput);
21
22 match &input.data {
23 Data::Struct(data) => struct_gen::derive_struct_generator(&input, data),
24 Data::Enum(data) => enum_gen::derive_enum_generator(&input, data),
25 Data::Union(_) => syn::Error::new_spanned(&input, "Generator cannot be derived for unions")
26 .to_compile_error()
27 .into(),
28 }
29}
30
31#[proc_macro_attribute]
32pub fn test(attr: TokenStream, item: TokenStream) -> TokenStream {
33 hegel_test::expand_test(attr.into(), item.into()).into()
34}
35
36#[proc_macro_attribute]
37pub fn main(attr: TokenStream, item: TokenStream) -> TokenStream {
38 hegel_main::expand_main(attr.into(), item.into()).into()
39}
40
41#[proc_macro_attribute]
42pub fn standalone_function(attr: TokenStream, item: TokenStream) -> TokenStream {
43 standalone_function::expand_standalone_function(attr.into(), item.into()).into()
44}
45
46#[proc_macro_attribute]
47pub fn composite(_attr: TokenStream, item: TokenStream) -> TokenStream {
48 let input = parse_macro_input!(item as ItemFn);
49 composite::expand_composite(input).into()
50}
51
52#[proc_macro_attribute]
83pub fn explicit_test_case(attr: TokenStream, item: TokenStream) -> TokenStream {
84 explicit_test_case::expand_explicit_test_case(attr.into(), item.into()).into()
85}
86
87#[proc_macro_attribute]
88pub fn state_machine(_attr: TokenStream, item: TokenStream) -> TokenStream {
89 let block = parse_macro_input!(item as ItemImpl);
90 stateful::expand_state_machine(block).into()
91}
92
93#[proc_macro]
107pub fn rewrite_draws(input: TokenStream) -> TokenStream {
108 rewrite_draws::expand_rewrite_draws(input.into()).into()
109}