@@ -65,7 +65,9 @@ pub fn derive_responder(input: proc_macro::TokenStream) -> TokenStream {
65
65
)
66
66
. inner_mapper ( MapperBuild :: new ( )
67
67
. with_output ( |_, output| quote ! {
68
- fn respond_to( self , __req: & ' r #Request <' _>) -> #_response:: Result <' o> {
68
+ fn respond_to( self , __req: & ' r #Request <' _>)
69
+ -> #_response:: Outcome <' o, Self :: Error >
70
+ {
69
71
#output
70
72
}
71
73
} )
@@ -80,9 +82,9 @@ pub fn derive_responder(input: proc_macro::TokenStream) -> TokenStream {
80
82
let responder = fields. iter ( ) . next ( ) . map ( |f| {
81
83
let ( accessor, ty) = ( f. accessor ( ) , f. ty . with_stripped_lifetimes ( ) ) ;
82
84
quote_spanned ! { f. span( ) =>
83
- let mut __res = <#ty as #_response:: Responder >:: respond_to(
85
+ let mut __res = #try_outcome! ( <#ty as #_response:: Responder >:: respond_to(
84
86
#accessor, __req
85
- ) ? ;
87
+ ) ) ;
86
88
}
87
89
} ) . expect ( "have at least one field" ) ;
88
90
@@ -106,7 +108,22 @@ pub fn derive_responder(input: proc_macro::TokenStream) -> TokenStream {
106
108
#( #headers) *
107
109
#content_type
108
110
#status
109
- #_Ok( __res)
111
+ #Outcome :: Success ( __res)
112
+ } )
113
+ } )
114
+ )
115
+ // TODO: What's the proper way to do this?
116
+ . inner_mapper ( MapperBuild :: new ( )
117
+ . with_output ( |_, output| quote ! {
118
+ type Error = #output;
119
+ } )
120
+ . try_struct_map ( |_, item| {
121
+ let responder = item. fields . iter ( ) . next ( ) . map ( |f| {
122
+ & f. ty
123
+ } ) . expect ( "have at least one field" ) ;
124
+
125
+ Ok ( quote ! {
126
+ <#responder as #_response:: Responder <' r, ' o>>:: Error
110
127
} )
111
128
} )
112
129
)
0 commit comments