Skip to main content

evals_macros/
lib.rs

1mod eval;
2mod grade;
3mod suite;
4
5use proc_macro::TokenStream;
6use syn::{ItemFn, parse_macro_input};
7
8/// Defines an eval suite factory.
9#[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/// Defines an eval.
18#[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/// Defines a reusable deterministic grader helper.
27#[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}