1mod eval;
2mod grade;
3mod suite;
4
5use proc_macro::TokenStream;
6use syn::{ItemFn, parse_macro_input};
7
8#[proc_macro_attribute]
10pub fn suite(attr: TokenStream, item: TokenStream) -> TokenStream {
11 let input = parse_macro_input!(item as ItemFn);
12 suite::expand(attr.into(), input)
13 .unwrap_or_else(|error| error.into_compile_error())
14 .into()
15}
16
17#[proc_macro_attribute]
19pub fn eval(attr: TokenStream, item: TokenStream) -> TokenStream {
20 let input = parse_macro_input!(item as ItemFn);
21 eval::expand(attr.into(), input)
22 .unwrap_or_else(|error| error.into_compile_error())
23 .into()
24}
25
26#[proc_macro_attribute]
28pub fn grade(attr: TokenStream, item: TokenStream) -> TokenStream {
29 let input = parse_macro_input!(item as ItemFn);
30 grade::expand(attr.into(), input)
31 .unwrap_or_else(|error| error.into_compile_error())
32 .into()
33}