axum_resp_result_macro/
lib.rs1mod 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#[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}