assert_parse_register_assert_macro/
lib.rs

1extern crate proc_macro;
2
3mod parse;
4
5use parse::Args;
6use proc_macro::TokenStream;
7use quote::quote;
8
9#[proc_macro]
10/// make fixture for assert
11pub fn register_assert(args: TokenStream) -> TokenStream {
12    let args: Args = match syn::parse(args) {
13        Ok(a) => a,
14        Err(e) => {
15            return e.to_compile_error().into();
16        }
17    };
18    let parsable = args.get_parsable();
19    let error = args.get_error();
20    let generics = match args.get_generics() {
21        Some(i) => quote! {#i},
22        None => quote! {},
23    };
24    quote! {
25        type Assert = assert_parse::Assert<#parsable #generics, #error>;
26
27        #[rstest::fixture]
28        fn assert() -> Assert {
29            assert_parse::make_assert()
30        }
31    }
32    .into()
33}