Skip to content

Commit 4050502

Browse files
committed
Refactor a bit more
1 parent 1022521 commit 4050502

File tree

1 file changed

+35
-29
lines changed

1 file changed

+35
-29
lines changed

tonic-build/src/server.rs

Lines changed: 35 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)