1#![doc = include_str!("../README.md")]
2use proc_macro::TokenStream;
3use syn::parse_macro_input;
4use quote::quote;
5
6mod sorted;
7mod keywords;
8
9use keywords:: { TransitionTableInfo, TransitionTableBody };
10use sorted::SortedTable;
11
12#[proc_macro_attribute]
20pub fn sorted(_args: TokenStream, input: TokenStream) -> TokenStream {
21 let result = parse_macro_input!(input as SortedTable);
22
23 quote! { #result }.into()
24}
25
26#[proc_macro_attribute]
34pub fn keywords(args: TokenStream, input: TokenStream) -> TokenStream {
35 let mut result = input.clone();
36 let info = parse_macro_input!(args as TransitionTableInfo);
37 let body = parse_macro_input!(input as TransitionTableBody);
38
39 result.extend(Into::<TokenStream>::into(quote! { #info #body }));
40 result
41}