megacommerce_shared_sanitize_derive/
lib.rs1use proc_macro::TokenStream;
2use quote::quote;
3use syn::{parse_macro_input, punctuated::Punctuated, Path, Token};
4
5#[proc_macro]
6pub fn sanitize_app_error(input: TokenStream) -> TokenStream {
7 let args = parse_macro_input!(input with Punctuated::<Path, Token![,]>::parse_terminated);
9
10 if args.len() != 2 {
11 return syn::Error::new_spanned(args, "expected 2 arguments: (ResponseType, ResponseEnumPath)")
12 .to_compile_error()
13 .into();
14 }
15
16 let ty = &args[0]; let enum_ty = &args[1]; let expanded = quote! {
20 impl SanitizeAppError for #ty {
21 fn sanitize_app_error_fields(&mut self) {
22 if let Some(#enum_ty::Error(err)) = self.response.take() {
23 self.response = Some(#enum_ty::Error(sanitize_app_error(&err)));
24 }
25 }
26 }
27 };
28
29 expanded.into()
30}