Add app api

This commit is contained in:
2023-10-05 07:22:12 +00:00
committed by GitHub
parent db101b5642
commit 25006a63c8
17 changed files with 543 additions and 55 deletions

View File

@@ -944,3 +944,44 @@ pub fn http_error(item: TokenStream) -> TokenStream {
);
stream.into()
}
struct PrintError {
pub msg: Expr,
pub expr: Expr,
pub re: Option<Expr>,
}
impl Parse for PrintError {
fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> {
let msg = input.parse()?;
input.parse::<token::Comma>()?;
let expr = input.parse()?;
let mut re = None;
match input.parse::<token::Comma>() {
Ok(_) => {
re.replace(input.parse()?);
}
Err(_) => {}
}
Ok(Self { msg, expr, re })
}
}
#[proc_macro]
pub fn print_error(item: TokenStream) -> TokenStream {
let PrintError { msg, expr, re } = parse_macro_input!(item as PrintError);
let re = match re {
Some(re) => quote!(#re),
None => quote!(None),
};
let stream = quote!(
match (#expr) {
Ok(re) => re,
Err(e) => {
println!("{}{}", #msg, e);
return #re;
}
}
);
stream.into()
}