@@ -268,43 +268,49 @@ fn generate_trait_methods<T: Service>(
268268 async fn #name( #self_param, request: #req_param_type)
269269 } ;
270270
271- let body_or_semicolon = if generate_default_stubs {
272- quote ! {
273- {
274- Err ( tonic:: Status :: unimplemented( "Not yet implemented" ) )
275- }
271+ let default_body = quote ! {
272+ {
273+ Err ( tonic:: Status :: unimplemented( "Not yet implemented" ) )
276274 }
277- } else {
278- quote ! ( ; )
279275 } ;
280276
281277 let result = |ok| quote ! ( std:: result:: Result <#ok, tonic:: Status >) ;
282278 let response_result = |message| result ( quote ! ( tonic:: Response <#message>) ) ;
283279
284- let method = if !method. server_streaming ( ) {
285- let return_ty = response_result ( res_message) ;
286- quote ! {
287- #partial_sig -> #return_ty #body_or_semicolon
280+ let method = match ( method. server_streaming ( ) , generate_default_stubs) {
281+ ( false , true ) => {
282+ let return_ty = response_result ( res_message) ;
283+ quote ! {
284+ #partial_sig -> #return_ty #default_body
285+ }
288286 }
289- } else if generate_default_stubs {
290- let return_ty = response_result ( quote ! ( BoxStream <#res_message>) ) ;
291- quote ! {
292- #partial_sig -> #return_ty #body_or_semicolon
287+ ( false , false ) => {
288+ let return_ty = response_result ( res_message) ;
289+ quote ! {
290+ #partial_sig -> #return_ty;
291+ }
293292 }
294- } else {
295- let stream = quote:: format_ident!( "{}Stream" , method. identifier( ) ) ;
296- let stream_doc = generate_doc_comment ( format ! (
297- " Server streaming response type for the {} method." ,
298- method. identifier( )
299- ) ) ;
300- let stream_item_ty = result ( res_message) ;
301- let stream_ty = quote ! ( tonic:: codegen:: tokio_stream:: Stream <Item = #stream_item_ty> + std:: marker:: Send + ' static ) ;
302- let return_ty = response_result ( quote ! ( Self :: #stream) ) ;
303- quote ! {
304- #stream_doc
305- type #stream: #stream_ty;
306-
307- #partial_sig -> #return_ty #body_or_semicolon
293+ ( true , true ) => {
294+ let return_ty = response_result ( quote ! ( BoxStream <#res_message>) ) ;
295+ quote ! {
296+ #partial_sig -> #return_ty #default_body
297+ }
298+ }
299+ ( true , false ) => {
300+ let stream = quote:: format_ident!( "{}Stream" , method. identifier( ) ) ;
301+ let stream_doc = generate_doc_comment ( format ! (
302+ " Server streaming response type for the {} method." ,
303+ method. identifier( )
304+ ) ) ;
305+ let stream_item_ty = result ( res_message) ;
306+ let stream_ty = quote ! ( tonic:: codegen:: tokio_stream:: Stream <Item = #stream_item_ty> + std:: marker:: Send + ' static ) ;
307+ let return_ty = response_result ( quote ! ( Self :: #stream) ) ;
308+ quote ! {
309+ #stream_doc
310+ type #stream: #stream_ty;
311+
312+ #partial_sig -> #return_ty;
313+ }
308314 }
309315 } ;
310316
0 commit comments