1#![warn(clippy::pedantic)]
4#![allow(clippy::match_wildcard_for_single_variants)]
5#![allow(clippy::needless_pass_by_value)]
6
7use proc_macro2::TokenStream;
8use syn::LitStr;
9
10#[proc_macro_derive(ApiError, attributes(api_error))]
11pub fn derive_api_error(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
12 let input = syn::parse_macro_input!(input as syn::DeriveInput);
13 crate::expand::expand(input).into()
14}
15
16mod expand;
17mod parser;
18
19mod kw {
20 syn::custom_keyword!(inherit);
21 syn::custom_keyword!(transparent);
22 syn::custom_keyword!(status_code);
23 syn::custom_keyword!(message);
24}
25
26enum VariantAttr {
28 Transparent,
30
31 InheritMsg { status_code: Option<TokenStream> },
33
34 Custom {
36 msg: Option<LitStr>,
38
39 status_code: Option<TokenStream>,
41 },
42}