axum_resp_result_macro/
lib.rs

1mod derive_resp_error;
2mod proc_resp_result;
3use quote::quote;
4use syn::spanned::Spanned;
5use syn::{parse_macro_input, DeriveInput};
6
7use crate::derive_resp_error::gen_resp_error_derive;
8use proc_resp_result::Function;
9
10/// convert a return [Result] [`Handler`](axum::Handler) return [`RespResult`]
11#[proc_macro_attribute]
12pub fn resp_result(
13    _: proc_macro::TokenStream,
14    input: proc_macro::TokenStream,
15) -> proc_macro::TokenStream {
16    let func = syn::parse_macro_input!(input as Function);
17    quote!(#func).into()
18}
19
20#[proc_macro_derive(RespError, attributes(resp_result))]
21pub fn derive_resp_error(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
22    let input = parse_macro_input!(input as DeriveInput);
23    if cfg!(feature = "extra-err") {
24        return syn::Error::new(
25            input.span(),
26            "Derive macro `RespError` not support `extra-message` yet",
27        )
28        .into_compile_error()
29        .into();
30    }
31    let token_stream = gen_resp_error_derive(&input).unwrap_or_else(|err| err.into_compile_error());
32    token_stream.into()
33}