Skip to main content

e2e_macro/
lib.rs

1extern crate proc_macro;
2
3use proc_macro::TokenStream;
4use syn::parse_macro_input;
5
6use crate::test_suite::TestSuite;
7
8mod constructor;
9mod hooks;
10mod test_case;
11mod test_suite;
12
13#[proc_macro_attribute]
14pub fn test_suite(attr: TokenStream, item: TokenStream) -> TokenStream {
15    let suite_name = parse_macro_input!(attr as syn::Lit);
16    let input = parse_macro_input!(item as syn::ItemImpl);
17    test_suite_impl(suite_name, input)
18        .unwrap_or_else(syn::Error::into_compile_error)
19        .into()
20}
21
22fn test_suite_impl(
23    suite_name: syn::Lit,
24    input: syn::ItemImpl,
25) -> syn::Result<proc_macro2::TokenStream> {
26    let suite = TestSuite::from_impl(suite_name, input)?;
27    Ok(suite.render())
28}