1use proc_macro::TokenStream;
4
5#[proc_macro_attribute]
10pub fn test_try(_attrs: TokenStream, item: TokenStream) -> TokenStream {
11 let input_fn = syn::parse_macro_input!(item as syn::ItemFn);
12
13 let attrs = input_fn.attrs;
14 let vis = input_fn.vis;
15 let sig = input_fn.sig;
16 let block = input_fn.block;
17 let stmts = block.stmts;
18
19 assert!(matches!(sig.output, syn::ReturnType::Default), "Don't specify a return type");
20
21 let expanded = quote::quote! {
22 #(#attrs)*
23 #[test]
24 #vis #sig -> ::std::result::Result<(), ::test_try::report::Report> {
25 #(#stmts)*
26 Ok(())
27 }
28 };
29
30 TokenStream::from(expanded)
31}