11use proc_macro:: TokenStream ;
22use proc_macro2:: TokenStream as TokenStream2 ;
33use quote:: quote;
4- use syn:: { Attribute , Data , DeriveInput , Fields , Meta } ;
4+ use syn:: { Attribute , Data , DeriveInput , Expr , Fields , Meta , MetaNameValue } ;
55
66pub ( crate ) fn derive_throwable ( input : DeriveInput ) -> syn:: Result < TokenStream > {
77 let crate_ident = parse_throwable_crate_ident ( & input) ;
@@ -20,27 +20,9 @@ fn parse_throwable_crate_ident(input: &DeriveInput) -> TokenStream2 {
2020}
2121
2222fn parse_throwable_attrs ( input : & DeriveInput ) -> syn:: Result < TokenStream2 > {
23- let attr = attributes_find_ident ( & input. attrs , "throwable" ) ;
24- attr. map ( |attr| {
25- attr. parse_args :: < Meta > ( ) . and_then ( |meta| match meta {
26- Meta :: NameValue ( name_value) => {
27- if !name_value. path . is_ident ( "class" ) {
28- Err ( syn:: Error :: new_spanned (
29- & attr,
30- "now only support #[throwable(error = ?)] for enum" ,
31- ) )
32- } else {
33- let lit = name_value. lit ;
34- Ok ( quote ! { #lit } )
35- }
36- }
37- _ => Err ( syn:: Error :: new_spanned (
38- & attr,
39- "now only support #[throwable(error = ?)] for enum" ,
40- ) ) ,
41- } )
42- } )
43- . unwrap_or_else ( || Ok ( quote ! { "Exception" } ) )
23+ let attr = attributes_find_ident ( & input. attrs , "throwable_class" ) ;
24+ attr. map ( |attr| attr. parse_args :: < Expr > ( ) . map ( |expr| quote ! { #expr } ) )
25+ . unwrap_or_else ( || Ok ( quote ! { "Exception" } ) )
4426}
4527
4628fn parse_throwable_input (
0 commit comments