qualified_do_macro/
lib.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use proc_macro::TokenStream;

mod desugar;
mod parser;
mod types;

use types::*;

use syn::parse_macro_input;

#[proc_macro]
pub fn qdo(input: TokenStream) -> TokenStream {
    let qdo: QDo = parse_macro_input!(input as QDo);
    qdo.desugar().map_or_else(
        |err: syn::Error| TokenStream::from(err.into_compile_error()),
        |a| a.into(),
    )
}