culpa_macros/
lib.rs

1extern crate proc_macro;
2
3mod args;
4mod throws;
5
6use proc_macro::TokenStream;
7
8use args::Args;
9use throws::Throws;
10
11#[proc_macro_attribute]
12pub fn throws(args: TokenStream, input: TokenStream) -> TokenStream {
13    let args = syn::parse_macro_input!(args as Args);
14    Throws::new(Some(args)).fold(input)
15}
16
17#[proc_macro_attribute]
18pub fn try_fn(args: TokenStream, input: TokenStream) -> TokenStream {
19    assert!(args.to_string() == "", "try_fn does not take arguments");
20    Throws::new(None).fold(input)
21}