29 std::ostringstream
out;
35 return method->ClientStreaming() && !
method->ServerStreaming();
39 return !
method->ClientStreaming() &&
method->ServerStreaming();
44 for (
unsigned i = 0;
i <
filename.size();
i++) {
49 static char hex[] =
"0123456789abcdef";
51 result.push_back(hex[(c >> 4) & 0xf]);
52 result.push_back(hex[c & 0xf]);
59 template <
class T,
size_t N>
65 const std::vector<std::string>& headers,
67 std::map<std::string, std::string> vars;
69 vars[
"l"] = use_system_headers ?
'<' :
'"';
70 vars[
"r"] = use_system_headers ?
'>' :
'"';
79 for (
auto i = headers.begin();
i != headers.end();
i++) {
81 printer->
Print(vars,
"#include $l$$h$$r$\n");
91 std::map<std::string, std::string> vars;
93 vars[
"filename"] =
file->filename();
95 vars[
"filename_base"] =
file->filename_without_ext();
100 printer->Print(vars,
"// Generated by the gRPC C++ plugin.\n");
102 "// If you make any local change, they will be lost.\n");
103 printer->Print(vars,
"// source: $filename$\n");
105 if (!leading_comments.empty()) {
106 printer->Print(vars,
"// Original file comments:\n");
107 printer->PrintRaw(leading_comments.c_str());
109 printer->Print(vars,
"#ifndef GRPC_$filename_identifier$__INCLUDED\n");
110 printer->Print(vars,
"#define GRPC_$filename_identifier$__INCLUDED\n");
111 printer->Print(vars,
"\n");
112 printer->Print(vars,
"#include \"$filename_base$$message_header_ext$\"\n");
113 printer->Print(vars,
file->additional_headers().c_str());
114 printer->Print(vars,
"\n");
122 proto_name.substr(0, proto_name.size() - 6) +
132 std::map<std::string, std::string> vars;
138 static const char* headers_strs[] = {
140 "grpcpp/impl/codegen/async_generic_service.h",
141 "grpcpp/impl/codegen/async_stream.h",
142 "grpcpp/impl/codegen/async_unary_call.h",
143 "grpcpp/impl/codegen/client_callback.h",
144 "grpcpp/impl/codegen/client_context.h",
145 "grpcpp/impl/codegen/completion_queue.h",
146 "grpcpp/impl/codegen/message_allocator.h",
147 "grpcpp/impl/codegen/method_handler.h",
148 "grpcpp/impl/codegen/proto_utils.h",
149 "grpcpp/impl/codegen/rpc_method.h",
150 "grpcpp/impl/codegen/server_callback.h",
151 "grpcpp/impl/codegen/server_callback_handlers.h",
152 "grpcpp/impl/codegen/server_context.h",
153 "grpcpp/impl/codegen/service_type.h",
154 "grpcpp/impl/codegen/status.h",
155 "grpcpp/impl/codegen/stub_options.h",
156 "grpcpp/impl/codegen/sync_stream.h",
158 std::vector<std::string> headers(headers_strs,
array_end(headers_strs));
161 printer->Print(vars,
"\n");
168 const std::vector<std::string> import_names =
file->GetImportNames();
169 for (
const auto& import_name : import_names) {
171 printer->Print(vars, include_name.c_str());
173 printer->PrintRaw(
"\n");
176 if (!
file->package().empty()) {
177 std::vector<std::string> parts =
file->package_parts();
179 for (
auto part = parts.begin(); part != parts.end(); part++) {
180 vars[
"part"] = *part;
181 printer->Print(vars,
"namespace $part$ {\n");
183 printer->Print(vars,
"\n");
191 std::map<std::string, std::string>* vars,
193 (*vars)[
"Method"] =
method->name();
194 (*vars)[
"Request"] =
method->input_type_name();
195 (*vars)[
"Response"] =
method->output_type_name();
201 } async_prefixes[] = {{
"Async",
", void* tag",
", tag"},
202 {
"PrepareAsync",
"",
""}};
205 if (
method->NoStreaming()) {
208 "virtual ::grpc::Status $Method$(::grpc::ClientContext* context, "
209 "const $Request$& request, $Response$* response) = 0;\n");
210 for (
auto async_prefix : async_prefixes) {
211 (*vars)[
"AsyncPrefix"] = async_prefix.prefix;
215 "::grpc::ClientAsyncResponseReaderInterface< $Response$>> "
216 "$AsyncPrefix$$Method$(::grpc::ClientContext* context, "
217 "const $Request$& request, "
218 "::grpc::CompletionQueue* cq) {\n");
222 "return std::unique_ptr< "
223 "::grpc::ClientAsyncResponseReaderInterface< $Response$>>("
224 "$AsyncPrefix$$Method$Raw(context, request, cq));\n");
226 printer->
Print(
"}\n");
228 }
else if (ClientOnlyStreaming(
method)) {
231 "std::unique_ptr< ::grpc::ClientWriterInterface< $Request$>>"
233 "::grpc::ClientContext* context, $Response$* response) {\n");
237 "return std::unique_ptr< ::grpc::ClientWriterInterface< $Request$>>"
238 "($Method$Raw(context, response));\n");
240 printer->
Print(
"}\n");
241 for (
auto async_prefix : async_prefixes) {
242 (*vars)[
"AsyncPrefix"] = async_prefix.prefix;
243 (*vars)[
"AsyncMethodParams"] = async_prefix.method_params;
244 (*vars)[
"AsyncRawArgs"] = async_prefix.raw_args;
247 "std::unique_ptr< ::grpc::ClientAsyncWriterInterface< $Request$>>"
248 " $AsyncPrefix$$Method$(::grpc::ClientContext* context, "
251 "::grpc::CompletionQueue* cq$AsyncMethodParams$) {\n");
253 printer->
Print(*vars,
254 "return std::unique_ptr< "
255 "::grpc::ClientAsyncWriterInterface< $Request$>>("
256 "$AsyncPrefix$$Method$Raw(context, response, "
257 "cq$AsyncRawArgs$));\n");
259 printer->
Print(
"}\n");
261 }
else if (ServerOnlyStreaming(
method)) {
264 "std::unique_ptr< ::grpc::ClientReaderInterface< $Response$>>"
265 " $Method$(::grpc::ClientContext* context, const $Request$& request)"
270 "return std::unique_ptr< ::grpc::ClientReaderInterface< $Response$>>"
271 "($Method$Raw(context, request));\n");
273 printer->
Print(
"}\n");
274 for (
auto& async_prefix : async_prefixes) {
275 (*vars)[
"AsyncPrefix"] = async_prefix.prefix;
276 (*vars)[
"AsyncMethodParams"] = async_prefix.method_params;
277 (*vars)[
"AsyncRawArgs"] = async_prefix.raw_args;
280 "std::unique_ptr< ::grpc::ClientAsyncReaderInterface< $Response$>> "
281 "$AsyncPrefix$$Method$("
282 "::grpc::ClientContext* context, const $Request$& request, "
283 "::grpc::CompletionQueue* cq$AsyncMethodParams$) {\n");
287 "return std::unique_ptr< "
288 "::grpc::ClientAsyncReaderInterface< $Response$>>("
289 "$AsyncPrefix$$Method$Raw(context, request, cq$AsyncRawArgs$));\n");
291 printer->
Print(
"}\n");
293 }
else if (
method->BidiStreaming()) {
294 printer->
Print(*vars,
295 "std::unique_ptr< ::grpc::ClientReaderWriterInterface< "
296 "$Request$, $Response$>> "
297 "$Method$(::grpc::ClientContext* context) {\n");
301 "return std::unique_ptr< "
302 "::grpc::ClientReaderWriterInterface< $Request$, $Response$>>("
303 "$Method$Raw(context));\n");
305 printer->
Print(
"}\n");
306 for (
auto async_prefix : async_prefixes) {
307 (*vars)[
"AsyncPrefix"] = async_prefix.prefix;
308 (*vars)[
"AsyncMethodParams"] = async_prefix.method_params;
309 (*vars)[
"AsyncRawArgs"] = async_prefix.raw_args;
313 "::grpc::ClientAsyncReaderWriterInterface< $Request$, $Response$>> "
314 "$AsyncPrefix$$Method$(::grpc::ClientContext* context, "
315 "::grpc::CompletionQueue* cq$AsyncMethodParams$) {\n");
319 "return std::unique_ptr< "
320 "::grpc::ClientAsyncReaderWriterInterface< $Request$, $Response$>>("
321 "$AsyncPrefix$$Method$Raw(context, cq$AsyncRawArgs$));\n");
323 printer->
Print(
"}\n");
327 if (
method->NoStreaming()) {
328 for (
auto async_prefix : async_prefixes) {
329 (*vars)[
"AsyncPrefix"] = async_prefix.prefix;
332 "virtual ::grpc::ClientAsyncResponseReaderInterface< $Response$>* "
333 "$AsyncPrefix$$Method$Raw(::grpc::ClientContext* context, "
334 "const $Request$& request, "
335 "::grpc::CompletionQueue* cq) = 0;\n");
337 }
else if (ClientOnlyStreaming(
method)) {
340 "virtual ::grpc::ClientWriterInterface< $Request$>*"
342 "::grpc::ClientContext* context, $Response$* response) = 0;\n");
343 for (
auto async_prefix : async_prefixes) {
344 (*vars)[
"AsyncPrefix"] = async_prefix.prefix;
345 (*vars)[
"AsyncMethodParams"] = async_prefix.method_params;
348 "virtual ::grpc::ClientAsyncWriterInterface< $Request$>*"
349 " $AsyncPrefix$$Method$Raw(::grpc::ClientContext* context, "
350 "$Response$* response, "
351 "::grpc::CompletionQueue* cq$AsyncMethodParams$) = 0;\n");
353 }
else if (ServerOnlyStreaming(
method)) {
356 "virtual ::grpc::ClientReaderInterface< $Response$>* "
358 "::grpc::ClientContext* context, const $Request$& request) = 0;\n");
359 for (
auto async_prefix : async_prefixes) {
360 (*vars)[
"AsyncPrefix"] = async_prefix.prefix;
361 (*vars)[
"AsyncMethodParams"] = async_prefix.method_params;
364 "virtual ::grpc::ClientAsyncReaderInterface< $Response$>* "
365 "$AsyncPrefix$$Method$Raw("
366 "::grpc::ClientContext* context, const $Request$& request, "
367 "::grpc::CompletionQueue* cq$AsyncMethodParams$) = 0;\n");
369 }
else if (
method->BidiStreaming()) {
370 printer->
Print(*vars,
371 "virtual ::grpc::ClientReaderWriterInterface< $Request$, "
373 "$Method$Raw(::grpc::ClientContext* context) = 0;\n");
374 for (
auto async_prefix : async_prefixes) {
375 (*vars)[
"AsyncPrefix"] = async_prefix.prefix;
376 (*vars)[
"AsyncMethodParams"] = async_prefix.method_params;
379 "virtual ::grpc::ClientAsyncReaderWriterInterface< "
380 "$Request$, $Response$>* "
381 "$AsyncPrefix$$Method$Raw(::grpc::ClientContext* context, "
382 "::grpc::CompletionQueue* cq$AsyncMethodParams$) = 0;\n");
390 std::map<std::string, std::string>* vars,
392 (*vars)[
"Method"] =
method->name();
393 (*vars)[
"Request"] =
method->input_type_name();
394 (*vars)[
"Response"] =
method->output_type_name();
399 } async_prefixes[] = {{
"Async",
", void* tag",
", tag"},
400 {
"PrepareAsync",
"",
""}};
403 if (
method->NoStreaming()) {
406 "::grpc::Status $Method$(::grpc::ClientContext* context, "
407 "const $Request$& request, $Response$* response) override;\n");
408 for (
auto async_prefix : async_prefixes) {
409 (*vars)[
"AsyncPrefix"] = async_prefix.prefix;
412 "std::unique_ptr< ::grpc::ClientAsyncResponseReader< $Response$>> "
413 "$AsyncPrefix$$Method$(::grpc::ClientContext* context, "
414 "const $Request$& request, "
415 "::grpc::CompletionQueue* cq) {\n");
417 printer->
Print(*vars,
418 "return std::unique_ptr< "
419 "::grpc::ClientAsyncResponseReader< $Response$>>("
420 "$AsyncPrefix$$Method$Raw(context, request, cq));\n");
422 printer->
Print(
"}\n");
424 }
else if (ClientOnlyStreaming(
method)) {
427 "std::unique_ptr< ::grpc::ClientWriter< $Request$>>"
429 "::grpc::ClientContext* context, $Response$* response) {\n");
431 printer->
Print(*vars,
432 "return std::unique_ptr< ::grpc::ClientWriter< $Request$>>"
433 "($Method$Raw(context, response));\n");
435 printer->
Print(
"}\n");
436 for (
auto async_prefix : async_prefixes) {
437 (*vars)[
"AsyncPrefix"] = async_prefix.prefix;
438 (*vars)[
"AsyncMethodParams"] = async_prefix.method_params;
439 (*vars)[
"AsyncRawArgs"] = async_prefix.raw_args;
440 printer->
Print(*vars,
441 "std::unique_ptr< ::grpc::ClientAsyncWriter< $Request$>>"
442 " $AsyncPrefix$$Method$(::grpc::ClientContext* context, "
443 "$Response$* response, "
444 "::grpc::CompletionQueue* cq$AsyncMethodParams$) {\n");
448 "return std::unique_ptr< ::grpc::ClientAsyncWriter< $Request$>>("
449 "$AsyncPrefix$$Method$Raw(context, response, "
450 "cq$AsyncRawArgs$));\n");
452 printer->
Print(
"}\n");
454 }
else if (ServerOnlyStreaming(
method)) {
457 "std::unique_ptr< ::grpc::ClientReader< $Response$>>"
458 " $Method$(::grpc::ClientContext* context, const $Request$& request)"
463 "return std::unique_ptr< ::grpc::ClientReader< $Response$>>"
464 "($Method$Raw(context, request));\n");
466 printer->
Print(
"}\n");
467 for (
auto async_prefix : async_prefixes) {
468 (*vars)[
"AsyncPrefix"] = async_prefix.prefix;
469 (*vars)[
"AsyncMethodParams"] = async_prefix.method_params;
470 (*vars)[
"AsyncRawArgs"] = async_prefix.raw_args;
473 "std::unique_ptr< ::grpc::ClientAsyncReader< $Response$>> "
474 "$AsyncPrefix$$Method$("
475 "::grpc::ClientContext* context, const $Request$& request, "
476 "::grpc::CompletionQueue* cq$AsyncMethodParams$) {\n");
480 "return std::unique_ptr< ::grpc::ClientAsyncReader< $Response$>>("
481 "$AsyncPrefix$$Method$Raw(context, request, cq$AsyncRawArgs$));\n");
483 printer->
Print(
"}\n");
485 }
else if (
method->BidiStreaming()) {
488 "std::unique_ptr< ::grpc::ClientReaderWriter< $Request$, $Response$>>"
489 " $Method$(::grpc::ClientContext* context) {\n");
491 printer->
Print(*vars,
492 "return std::unique_ptr< "
493 "::grpc::ClientReaderWriter< $Request$, $Response$>>("
494 "$Method$Raw(context));\n");
496 printer->
Print(
"}\n");
497 for (
auto async_prefix : async_prefixes) {
498 (*vars)[
"AsyncPrefix"] = async_prefix.prefix;
499 (*vars)[
"AsyncMethodParams"] = async_prefix.method_params;
500 (*vars)[
"AsyncRawArgs"] = async_prefix.raw_args;
501 printer->
Print(*vars,
502 "std::unique_ptr< ::grpc::ClientAsyncReaderWriter< "
503 "$Request$, $Response$>> "
504 "$AsyncPrefix$$Method$(::grpc::ClientContext* context, "
505 "::grpc::CompletionQueue* cq$AsyncMethodParams$) {\n");
509 "return std::unique_ptr< "
510 "::grpc::ClientAsyncReaderWriter< $Request$, $Response$>>("
511 "$AsyncPrefix$$Method$Raw(context, cq$AsyncRawArgs$));\n");
513 printer->
Print(
"}\n");
517 if (
method->NoStreaming()) {
518 for (
auto async_prefix : async_prefixes) {
519 (*vars)[
"AsyncPrefix"] = async_prefix.prefix;
522 "::grpc::ClientAsyncResponseReader< $Response$>* "
523 "$AsyncPrefix$$Method$Raw(::grpc::ClientContext* context, "
524 "const $Request$& request, "
525 "::grpc::CompletionQueue* cq) override;\n");
527 }
else if (ClientOnlyStreaming(
method)) {
528 printer->
Print(*vars,
529 "::grpc::ClientWriter< $Request$>* $Method$Raw("
530 "::grpc::ClientContext* context, $Response$* response) "
532 for (
auto async_prefix : async_prefixes) {
533 (*vars)[
"AsyncPrefix"] = async_prefix.prefix;
534 (*vars)[
"AsyncMethodParams"] = async_prefix.method_params;
535 (*vars)[
"AsyncRawArgs"] = async_prefix.raw_args;
538 "::grpc::ClientAsyncWriter< $Request$>* $AsyncPrefix$$Method$Raw("
539 "::grpc::ClientContext* context, $Response$* response, "
540 "::grpc::CompletionQueue* cq$AsyncMethodParams$) override;\n");
542 }
else if (ServerOnlyStreaming(
method)) {
543 printer->
Print(*vars,
544 "::grpc::ClientReader< $Response$>* $Method$Raw("
545 "::grpc::ClientContext* context, const $Request$& request)"
547 for (
auto async_prefix : async_prefixes) {
548 (*vars)[
"AsyncPrefix"] = async_prefix.prefix;
549 (*vars)[
"AsyncMethodParams"] = async_prefix.method_params;
550 (*vars)[
"AsyncRawArgs"] = async_prefix.raw_args;
553 "::grpc::ClientAsyncReader< $Response$>* $AsyncPrefix$$Method$Raw("
554 "::grpc::ClientContext* context, const $Request$& request, "
555 "::grpc::CompletionQueue* cq$AsyncMethodParams$) override;\n");
557 }
else if (
method->BidiStreaming()) {
558 printer->
Print(*vars,
559 "::grpc::ClientReaderWriter< $Request$, $Response$>* "
560 "$Method$Raw(::grpc::ClientContext* context) override;\n");
561 for (
auto async_prefix : async_prefixes) {
562 (*vars)[
"AsyncPrefix"] = async_prefix.prefix;
563 (*vars)[
"AsyncMethodParams"] = async_prefix.method_params;
564 (*vars)[
"AsyncRawArgs"] = async_prefix.raw_args;
567 "::grpc::ClientAsyncReaderWriter< $Request$, $Response$>* "
568 "$AsyncPrefix$$Method$Raw(::grpc::ClientContext* context, "
569 "::grpc::CompletionQueue* cq$AsyncMethodParams$) override;\n");
577 std::map<std::string, std::string>* ) {
582 printer->
Print(
"class async_interface {\n");
585 printer->
Print(
" public:\n");
587 printer->
Print(
"virtual ~async_interface() {}\n");
592 std::map<std::string, std::string>* vars) {
593 (*vars)[
"Method"] =
method->name();
594 (*vars)[
"Request"] =
method->input_type_name();
595 (*vars)[
"Response"] =
method->output_type_name();
597 if (
method->NoStreaming()) {
598 printer->
Print(*vars,
599 "virtual void $Method$(::grpc::ClientContext* context, "
600 "const $Request$* request, $Response$* response, "
601 "std::function<void(::grpc::Status)>) = 0;\n");
602 printer->
Print(*vars,
603 "virtual void $Method$(::grpc::ClientContext* context, "
604 "const $Request$* request, $Response$* response, "
605 "::grpc::ClientUnaryReactor* reactor) = 0;\n");
606 }
else if (ClientOnlyStreaming(
method)) {
607 printer->
Print(*vars,
608 "virtual void $Method$(::grpc::ClientContext* context, "
609 "$Response$* response, "
610 "::grpc::ClientWriteReactor< $Request$>* "
612 }
else if (ServerOnlyStreaming(
method)) {
613 printer->
Print(*vars,
614 "virtual void $Method$(::grpc::ClientContext* context, "
615 "const $Request$* request, "
616 "::grpc::ClientReadReactor< $Response$>* "
618 }
else if (
method->BidiStreaming()) {
619 printer->
Print(*vars,
620 "virtual void $Method$(::grpc::ClientContext* context, "
621 "::grpc::ClientBidiReactor< "
622 "$Request$,$Response$>* reactor) = 0;\n");
628 std::map<std::string, std::string>* ) {
630 printer->
Print(
"};\n");
633 "typedef class async_interface experimental_async_interface;\n");
642 "virtual class async_interface* async() { return nullptr; }\n");
646 "class async_interface* experimental_async() { return async(); }\n");
651 std::map<std::string, std::string>* ) {
653 printer->
Print(
"class async final :\n");
654 printer->
Print(
" public StubInterface::async_interface {\n");
655 printer->
Print(
" public:\n");
661 std::map<std::string, std::string>* vars) {
662 (*vars)[
"Method"] =
method->name();
663 (*vars)[
"Request"] =
method->input_type_name();
664 (*vars)[
"Response"] =
method->output_type_name();
666 if (
method->NoStreaming()) {
667 printer->
Print(*vars,
668 "void $Method$(::grpc::ClientContext* context, "
669 "const $Request$* request, $Response$* response, "
670 "std::function<void(::grpc::Status)>) override;\n");
671 printer->
Print(*vars,
672 "void $Method$(::grpc::ClientContext* context, "
673 "const $Request$* request, $Response$* response, "
674 "::grpc::ClientUnaryReactor* reactor) override;\n");
675 }
else if (ClientOnlyStreaming(
method)) {
676 printer->
Print(*vars,
677 "void $Method$(::grpc::ClientContext* context, "
678 "$Response$* response, "
679 "::grpc::ClientWriteReactor< $Request$>* "
680 "reactor) override;\n");
681 }
else if (ServerOnlyStreaming(
method)) {
682 printer->
Print(*vars,
683 "void $Method$(::grpc::ClientContext* context, "
684 "const $Request$* request, "
685 "::grpc::ClientReadReactor< $Response$>* "
686 "reactor) override;\n");
688 }
else if (
method->BidiStreaming()) {
689 printer->
Print(*vars,
690 "void $Method$(::grpc::ClientContext* context, "
691 "::grpc::ClientBidiReactor< "
692 "$Request$,$Response$>* reactor) override;\n");
698 std::map<std::string, std::string>* ) {
700 printer->
Print(
" private:\n");
702 printer->
Print(
"friend class Stub;\n");
703 printer->
Print(
"explicit async(Stub* stub): stub_(stub) { }\n");
706 printer->
Print(
"Stub* stub() { return stub_; }\n");
707 printer->
Print(
"Stub* stub_;\n");
709 printer->
Print(
"};\n");
712 "class async* async() override { "
713 "return &async_stub_; }\n");
718 std::map<std::string, std::string>* vars) {
719 (*vars)[
"Method"] =
method->name();
720 printer->
Print(*vars,
721 "const ::grpc::internal::RpcMethod rpcmethod_$Method$_;\n");
726 std::map<std::string, std::string>* vars) {
727 (*vars)[
"Method"] =
method->name();
728 (*vars)[
"Request"] =
method->input_type_name();
729 (*vars)[
"Response"] =
method->output_type_name();
730 printer->
Print(
method->GetLeadingComments(
"//").c_str());
731 if (
method->NoStreaming()) {
732 printer->
Print(*vars,
733 "virtual ::grpc::Status $Method$("
734 "::grpc::ServerContext* context, const $Request$* request, "
735 "$Response$* response);\n");
736 }
else if (ClientOnlyStreaming(
method)) {
737 printer->
Print(*vars,
738 "virtual ::grpc::Status $Method$("
739 "::grpc::ServerContext* context, "
740 "::grpc::ServerReader< $Request$>* reader, "
741 "$Response$* response);\n");
742 }
else if (ServerOnlyStreaming(
method)) {
743 printer->
Print(*vars,
744 "virtual ::grpc::Status $Method$("
745 "::grpc::ServerContext* context, const $Request$* request, "
746 "::grpc::ServerWriter< $Response$>* writer);\n");
747 }
else if (
method->BidiStreaming()) {
750 "virtual ::grpc::Status $Method$("
751 "::grpc::ServerContext* context, "
752 "::grpc::ServerReaderWriter< $Response$, $Request$>* stream);"
755 printer->
Print(
method->GetTrailingComments(
"//").c_str());
763 std::map<std::string, std::string>* vars) {
764 if (
method->NoStreaming()) {
767 "// disable synchronous version of this method\n"
768 "::grpc::Status $Method$("
769 "::grpc::ServerContext* /*context*/, const $Request$* /*request*/, "
770 "$Response$* /*response*/) override {\n"
772 " return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
776 "void Request$Method$("
777 "::grpc::ServerContext* context, $RealRequest$* request, "
778 "::grpc::ServerAsyncResponseWriter< $RealResponse$>* response, "
779 "::grpc::CompletionQueue* new_call_cq, "
780 "::grpc::ServerCompletionQueue* notification_cq, void *tag) {\n");
781 printer->
Print(*vars,
782 " ::grpc::Service::RequestAsyncUnary($Idx$, context, "
783 "request, response, new_call_cq, notification_cq, tag);\n");
784 printer->
Print(
"}\n");
785 }
else if (ClientOnlyStreaming(
method)) {
788 "// disable synchronous version of this method\n"
789 "::grpc::Status $Method$("
790 "::grpc::ServerContext* /*context*/, "
791 "::grpc::ServerReader< $Request$>* /*reader*/, "
792 "$Response$* /*response*/) override {\n"
794 " return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
798 "void Request$Method$("
799 "::grpc::ServerContext* context, "
800 "::grpc::ServerAsyncReader< $RealResponse$, $RealRequest$>* reader, "
801 "::grpc::CompletionQueue* new_call_cq, "
802 "::grpc::ServerCompletionQueue* notification_cq, void *tag) {\n");
803 printer->
Print(*vars,
804 " ::grpc::Service::RequestAsyncClientStreaming($Idx$, "
805 "context, reader, new_call_cq, notification_cq, tag);\n");
806 printer->
Print(
"}\n");
807 }
else if (ServerOnlyStreaming(
method)) {
810 "// disable synchronous version of this method\n"
811 "::grpc::Status $Method$("
812 "::grpc::ServerContext* /*context*/, const $Request$* /*request*/, "
813 "::grpc::ServerWriter< $Response$>* /*writer*/) override "
816 " return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
820 "void Request$Method$("
821 "::grpc::ServerContext* context, $RealRequest$* request, "
822 "::grpc::ServerAsyncWriter< $RealResponse$>* writer, "
823 "::grpc::CompletionQueue* new_call_cq, "
824 "::grpc::ServerCompletionQueue* notification_cq, void *tag) {\n");
827 " ::grpc::Service::RequestAsyncServerStreaming($Idx$, "
828 "context, request, writer, new_call_cq, notification_cq, tag);\n");
829 printer->
Print(
"}\n");
830 }
else if (
method->BidiStreaming()) {
833 "// disable synchronous version of this method\n"
834 "::grpc::Status $Method$("
835 "::grpc::ServerContext* /*context*/, "
836 "::grpc::ServerReaderWriter< $Response$, $Request$>* /*stream*/) "
839 " return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
843 "void Request$Method$("
844 "::grpc::ServerContext* context, "
845 "::grpc::ServerAsyncReaderWriter< $RealResponse$, $RealRequest$>* "
847 "::grpc::CompletionQueue* new_call_cq, "
848 "::grpc::ServerCompletionQueue* notification_cq, void *tag) {\n");
849 printer->
Print(*vars,
850 " ::grpc::Service::RequestAsyncBidiStreaming($Idx$, "
851 "context, stream, new_call_cq, notification_cq, tag);\n");
852 printer->
Print(
"}\n");
858 std::map<std::string, std::string>* vars) {
859 (*vars)[
"Method"] =
method->name();
861 (*vars)[
"Request"] =
method->input_type_name();
862 (*vars)[
"Response"] =
method->output_type_name();
864 (*vars)[
"RealRequest"] =
method->input_type_name();
865 (*vars)[
"RealResponse"] =
method->output_type_name();
866 printer->
Print(*vars,
"template <class BaseClass>\n");
867 printer->
Print(*vars,
868 "class WithAsyncMethod_$Method$ : public BaseClass {\n");
871 " void BaseClassMustBeDerivedFromService(const Service* /*service*/) "
873 printer->
Print(
" public:\n");
875 printer->
Print(*vars,
876 "WithAsyncMethod_$Method$() {\n"
877 " ::grpc::Service::MarkMethodAsync($Idx$);\n"
879 printer->
Print(*vars,
880 "~WithAsyncMethod_$Method$() override {\n"
881 " BaseClassMustBeDerivedFromService(this);\n"
885 printer->
Print(*vars,
"};\n");
893 std::map<std::string, std::string>* vars) {
894 if (
method->NoStreaming()) {
897 "// disable synchronous version of this method\n"
898 "::grpc::Status $Method$("
899 "::grpc::ServerContext* /*context*/, const $Request$* /*request*/, "
900 "$Response$* /*response*/) override {\n"
902 " return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
904 printer->
Print(*vars,
905 "virtual ::grpc::ServerUnaryReactor* $Method$(\n"
906 " ::grpc::CallbackServerContext* /*context*/, "
907 "const $RealRequest$* /*request*/, "
908 "$RealResponse$* /*response*/)"
909 " { return nullptr; }\n");
910 }
else if (ClientOnlyStreaming(
method)) {
913 "// disable synchronous version of this method\n"
914 "::grpc::Status $Method$("
915 "::grpc::ServerContext* /*context*/, "
916 "::grpc::ServerReader< $Request$>* /*reader*/, "
917 "$Response$* /*response*/) override {\n"
919 " return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
921 printer->
Print(*vars,
922 "virtual ::grpc::ServerReadReactor< "
923 "$RealRequest$>* $Method$(\n"
924 " ::grpc::CallbackServerContext* "
925 "/*context*/, $RealResponse$* /*response*/)"
926 " { return nullptr; }\n");
927 }
else if (ServerOnlyStreaming(
method)) {
930 "// disable synchronous version of this method\n"
931 "::grpc::Status $Method$("
932 "::grpc::ServerContext* /*context*/, const $Request$* /*request*/, "
933 "::grpc::ServerWriter< $Response$>* /*writer*/) override "
936 " return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
940 "virtual ::grpc::ServerWriteReactor< $RealResponse$>* $Method$(\n"
941 " ::grpc::CallbackServerContext* "
942 "/*context*/, const $RealRequest$* /*request*/)"
943 " { return nullptr; }\n");
944 }
else if (
method->BidiStreaming()) {
947 "// disable synchronous version of this method\n"
948 "::grpc::Status $Method$("
949 "::grpc::ServerContext* /*context*/, "
950 "::grpc::ServerReaderWriter< $Response$, $Request$>* /*stream*/) "
953 " return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
957 "virtual ::grpc::ServerBidiReactor< $RealRequest$, $RealResponse$>* "
959 " ::grpc::CallbackServerContext* /*context*/)\n"
960 " { return nullptr; }\n");
966 std::map<std::string, std::string>* vars) {
967 (*vars)[
"Method"] =
method->name();
969 (*vars)[
"Request"] =
method->input_type_name();
970 (*vars)[
"Response"] =
method->output_type_name();
972 (*vars)[
"RealRequest"] =
method->input_type_name();
973 (*vars)[
"RealResponse"] =
method->output_type_name();
974 printer->
Print(*vars,
"template <class BaseClass>\n");
975 printer->
Print(*vars,
976 "class WithCallbackMethod_$Method$ : public BaseClass {\n");
979 " void BaseClassMustBeDerivedFromService(const Service* /*service*/) "
981 printer->
Print(
" public:\n");
983 printer->
Print(*vars,
"WithCallbackMethod_$Method$() {\n");
984 if (
method->NoStreaming()) {
987 " ::grpc::Service::MarkMethodCallback($Idx$,\n"
988 " new ::grpc::internal::CallbackUnaryHandler< "
989 "$RealRequest$, $RealResponse$>(\n"
991 " ::grpc::CallbackServerContext* context, "
992 "const $RealRequest$* "
994 "$RealResponse$* response) { "
995 "return this->$Method$(context, request, response); }));}\n");
996 printer->
Print(*vars,
997 "void SetMessageAllocatorFor_$Method$(\n"
998 " ::grpc::MessageAllocator< "
999 "$RealRequest$, $RealResponse$>* allocator) {\n"
1000 " ::grpc::internal::MethodHandler* const handler = "
1001 "::grpc::Service::GetHandler($Idx$);\n"
1002 " static_cast<::grpc::internal::CallbackUnaryHandler< "
1003 "$RealRequest$, $RealResponse$>*>(handler)\n"
1004 " ->SetMessageAllocator(allocator);\n");
1005 }
else if (ClientOnlyStreaming(
method)) {
1008 " ::grpc::Service::MarkMethodCallback($Idx$,\n"
1009 " new ::grpc::internal::CallbackClientStreamingHandler< "
1010 "$RealRequest$, $RealResponse$>(\n"
1012 " ::grpc::CallbackServerContext* context, "
1015 "return this->$Method$(context, response); }));\n");
1016 }
else if (ServerOnlyStreaming(
method)) {
1019 " ::grpc::Service::MarkMethodCallback($Idx$,\n"
1020 " new ::grpc::internal::CallbackServerStreamingHandler< "
1021 "$RealRequest$, $RealResponse$>(\n"
1023 " ::grpc::CallbackServerContext* context, "
1024 "const $RealRequest$* "
1026 "return this->$Method$(context, request); }));\n");
1027 }
else if (
method->BidiStreaming()) {
1028 printer->
Print(*vars,
1029 " ::grpc::Service::MarkMethodCallback($Idx$,\n"
1030 " new ::grpc::internal::CallbackBidiHandler< "
1031 "$RealRequest$, $RealResponse$>(\n"
1033 " ::grpc::CallbackServerContext* context) "
1034 "{ return this->$Method$(context); }));\n");
1036 printer->
Print(*vars,
"}\n");
1037 printer->
Print(*vars,
1038 "~WithCallbackMethod_$Method$() override {\n"
1039 " BaseClassMustBeDerivedFromService(this);\n"
1043 printer->
Print(*vars,
"};\n");
1048 std::map<std::string, std::string>* vars) {
1049 (*vars)[
"Method"] =
method->name();
1051 (*vars)[
"Request"] =
method->input_type_name();
1052 (*vars)[
"Response"] =
method->output_type_name();
1054 (*vars)[
"RealRequest"] =
"::grpc::ByteBuffer";
1055 (*vars)[
"RealResponse"] =
"::grpc::ByteBuffer";
1056 printer->
Print(*vars,
"template <class BaseClass>\n");
1057 printer->
Print(*vars,
1058 "class WithRawCallbackMethod_$Method$ : public "
1062 " void BaseClassMustBeDerivedFromService(const Service* /*service*/) "
1064 printer->
Print(
" public:\n");
1066 printer->
Print(*vars,
"WithRawCallbackMethod_$Method$() {\n");
1067 if (
method->NoStreaming()) {
1068 printer->
Print(*vars,
1069 " ::grpc::Service::MarkMethodRawCallback($Idx$,\n"
1070 " new ::grpc::internal::CallbackUnaryHandler< "
1071 "$RealRequest$, $RealResponse$>(\n"
1073 " ::grpc::CallbackServerContext* context, "
1074 "const $RealRequest$* "
1076 "$RealResponse$* response) { return "
1077 "this->$Method$(context, request, response); }));\n");
1078 }
else if (ClientOnlyStreaming(
method)) {
1081 " ::grpc::Service::MarkMethodRawCallback($Idx$,\n"
1082 " new ::grpc::internal::CallbackClientStreamingHandler< "
1083 "$RealRequest$, $RealResponse$>(\n"
1085 " ::grpc::CallbackServerContext* context, "
1086 "$RealResponse$* response) "
1087 "{ return this->$Method$(context, response); }));\n");
1088 }
else if (ServerOnlyStreaming(
method)) {
1091 " ::grpc::Service::MarkMethodRawCallback($Idx$,\n"
1092 " new ::grpc::internal::CallbackServerStreamingHandler< "
1093 "$RealRequest$, $RealResponse$>(\n"
1095 " ::grpc::CallbackServerContext* context, "
1097 "$RealRequest$* request) { return "
1098 "this->$Method$(context, request); }));\n");
1099 }
else if (
method->BidiStreaming()) {
1100 printer->
Print(*vars,
1101 " ::grpc::Service::MarkMethodRawCallback($Idx$,\n"
1102 " new ::grpc::internal::CallbackBidiHandler< "
1103 "$RealRequest$, $RealResponse$>(\n"
1105 " ::grpc::CallbackServerContext* context) "
1106 "{ return this->$Method$(context); }));\n");
1108 printer->
Print(*vars,
"}\n");
1109 printer->
Print(*vars,
1110 "~WithRawCallbackMethod_$Method$() override {\n"
1111 " BaseClassMustBeDerivedFromService(this);\n"
1115 printer->
Print(*vars,
"};\n");
1120 std::map<std::string, std::string>* vars) {
1121 (*vars)[
"Method"] =
method->name();
1122 (*vars)[
"Request"] =
method->input_type_name();
1123 (*vars)[
"Response"] =
method->output_type_name();
1124 if (
method->NoStreaming()) {
1125 printer->
Print(*vars,
"template <class BaseClass>\n");
1126 printer->
Print(*vars,
1127 "class WithStreamedUnaryMethod_$Method$ : "
1128 "public BaseClass {\n");
1131 " void BaseClassMustBeDerivedFromService(const Service* /*service*/) "
1133 printer->
Print(
" public:\n");
1135 printer->
Print(*vars,
1136 "WithStreamedUnaryMethod_$Method$() {\n"
1137 " ::grpc::Service::MarkMethodStreamed($Idx$,\n"
1138 " new ::grpc::internal::StreamedUnaryHandler<\n"
1139 " $Request$, $Response$>(\n"
1140 " [this](::grpc::ServerContext* context,\n"
1141 " ::grpc::ServerUnaryStreamer<\n"
1142 " $Request$, $Response$>* streamer) {\n"
1143 " return this->Streamed$Method$(context,\n"
1147 printer->
Print(*vars,
1148 "~WithStreamedUnaryMethod_$Method$() override {\n"
1149 " BaseClassMustBeDerivedFromService(this);\n"
1153 "// disable regular version of this method\n"
1154 "::grpc::Status $Method$("
1155 "::grpc::ServerContext* /*context*/, const $Request$* /*request*/, "
1156 "$Response$* /*response*/) override {\n"
1158 " return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
1160 printer->
Print(*vars,
1161 "// replace default version of method with streamed unary\n"
1162 "virtual ::grpc::Status Streamed$Method$("
1163 "::grpc::ServerContext* context, "
1164 "::grpc::ServerUnaryStreamer< "
1165 "$Request$,$Response$>* server_unary_streamer)"
1168 printer->
Print(*vars,
"};\n");
1174 std::map<std::string, std::string>* vars) {
1175 (*vars)[
"Method"] =
method->name();
1176 (*vars)[
"Request"] =
method->input_type_name();
1177 (*vars)[
"Response"] =
method->output_type_name();
1178 if (ServerOnlyStreaming(
method)) {
1179 printer->
Print(*vars,
"template <class BaseClass>\n");
1180 printer->
Print(*vars,
1181 "class WithSplitStreamingMethod_$Method$ : "
1182 "public BaseClass {\n");
1185 " void BaseClassMustBeDerivedFromService(const Service* /*service*/) "
1187 printer->
Print(
" public:\n");
1189 printer->
Print(*vars,
1190 "WithSplitStreamingMethod_$Method$() {\n"
1191 " ::grpc::Service::MarkMethodStreamed($Idx$,\n"
1192 " new ::grpc::internal::SplitServerStreamingHandler<\n"
1193 " $Request$, $Response$>(\n"
1194 " [this](::grpc::ServerContext* context,\n"
1195 " ::grpc::ServerSplitStreamer<\n"
1196 " $Request$, $Response$>* streamer) {\n"
1197 " return this->Streamed$Method$(context,\n"
1201 printer->
Print(*vars,
1202 "~WithSplitStreamingMethod_$Method$() override {\n"
1203 " BaseClassMustBeDerivedFromService(this);\n"
1207 "// disable regular version of this method\n"
1208 "::grpc::Status $Method$("
1209 "::grpc::ServerContext* /*context*/, const $Request$* /*request*/, "
1210 "::grpc::ServerWriter< $Response$>* /*writer*/) override "
1213 " return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
1215 printer->
Print(*vars,
1216 "// replace default version of method with split streamed\n"
1217 "virtual ::grpc::Status Streamed$Method$("
1218 "::grpc::ServerContext* context, "
1219 "::grpc::ServerSplitStreamer< "
1220 "$Request$,$Response$>* server_split_streamer)"
1223 printer->
Print(*vars,
"};\n");
1229 std::map<std::string, std::string>* vars) {
1230 (*vars)[
"Method"] =
method->name();
1231 (*vars)[
"Request"] =
method->input_type_name();
1232 (*vars)[
"Response"] =
method->output_type_name();
1233 printer->
Print(*vars,
"template <class BaseClass>\n");
1234 printer->
Print(*vars,
1235 "class WithGenericMethod_$Method$ : public BaseClass {\n");
1238 " void BaseClassMustBeDerivedFromService(const Service* /*service*/) "
1240 printer->
Print(
" public:\n");
1242 printer->
Print(*vars,
1243 "WithGenericMethod_$Method$() {\n"
1244 " ::grpc::Service::MarkMethodGeneric($Idx$);\n"
1246 printer->
Print(*vars,
1247 "~WithGenericMethod_$Method$() override {\n"
1248 " BaseClassMustBeDerivedFromService(this);\n"
1250 if (
method->NoStreaming()) {
1253 "// disable synchronous version of this method\n"
1254 "::grpc::Status $Method$("
1255 "::grpc::ServerContext* /*context*/, const $Request$* /*request*/, "
1256 "$Response$* /*response*/) override {\n"
1258 " return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
1260 }
else if (ClientOnlyStreaming(
method)) {
1263 "// disable synchronous version of this method\n"
1264 "::grpc::Status $Method$("
1265 "::grpc::ServerContext* /*context*/, "
1266 "::grpc::ServerReader< $Request$>* /*reader*/, "
1267 "$Response$* /*response*/) override {\n"
1269 " return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
1271 }
else if (ServerOnlyStreaming(
method)) {
1274 "// disable synchronous version of this method\n"
1275 "::grpc::Status $Method$("
1276 "::grpc::ServerContext* /*context*/, const $Request$* /*request*/, "
1277 "::grpc::ServerWriter< $Response$>* /*writer*/) override "
1280 " return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
1282 }
else if (
method->BidiStreaming()) {
1285 "// disable synchronous version of this method\n"
1286 "::grpc::Status $Method$("
1287 "::grpc::ServerContext* /*context*/, "
1288 "::grpc::ServerReaderWriter< $Response$, $Request$>* /*stream*/) "
1291 " return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
1295 printer->
Print(*vars,
"};\n");
1300 std::map<std::string, std::string>* vars) {
1301 (*vars)[
"Method"] =
method->name();
1303 (*vars)[
"Request"] =
method->input_type_name();
1304 (*vars)[
"Response"] =
method->output_type_name();
1306 (*vars)[
"RealRequest"] =
"::grpc::ByteBuffer";
1307 (*vars)[
"RealResponse"] =
"::grpc::ByteBuffer";
1308 printer->
Print(*vars,
"template <class BaseClass>\n");
1309 printer->
Print(*vars,
"class WithRawMethod_$Method$ : public BaseClass {\n");
1312 " void BaseClassMustBeDerivedFromService(const Service* /*service*/) "
1314 printer->
Print(
" public:\n");
1316 printer->
Print(*vars,
1317 "WithRawMethod_$Method$() {\n"
1318 " ::grpc::Service::MarkMethodRaw($Idx$);\n"
1320 printer->
Print(*vars,
1321 "~WithRawMethod_$Method$() override {\n"
1322 " BaseClassMustBeDerivedFromService(this);\n"
1326 printer->
Print(*vars,
"};\n");
1331 std::map<std::string, std::string>* vars) {
1332 (*vars)[
"Service"] =
service->name();
1334 printer->
Print(
service->GetLeadingComments(
"//").c_str());
1335 printer->
Print(*vars,
1336 "class $Service$ final {\n"
1341 printer->
Print(*vars,
1342 "static constexpr char const* service_full_name() {\n"
1343 " return \"$Package$$Service$\";\n"
1348 "class StubInterface {\n"
1351 printer->
Print(
"virtual ~StubInterface() {}\n");
1352 for (
int i = 0;
i <
service->method_count(); ++
i) {
1353 printer->
Print(
service->method(
i)->GetLeadingComments(
"//").c_str());
1356 printer->
Print(
service->method(
i)->GetTrailingComments(
"//").c_str());
1359 for (
int i = 0;
i <
service->method_count(); ++
i) {
1360 printer->
Print(
service->method(
i)->GetLeadingComments(
"//").c_str());
1363 printer->
Print(
service->method(
i)->GetTrailingComments(
"//").c_str());
1367 printer->
Print(
" private:\n");
1369 for (
int i = 0;
i <
service->method_count(); ++
i) {
1374 printer->
Print(
"};\n");
1376 "class Stub final : public StubInterface"
1380 "Stub(const std::shared_ptr< ::grpc::ChannelInterface>& "
1381 "channel, const ::grpc::StubOptions& options = "
1382 "::grpc::StubOptions());\n");
1383 for (
int i = 0;
i <
service->method_count(); ++
i) {
1387 for (
int i = 0;
i <
service->method_count(); ++
i) {
1392 printer->
Print(
"\n private:\n");
1394 printer->
Print(
"std::shared_ptr< ::grpc::ChannelInterface> channel_;\n");
1395 printer->
Print(
"class async async_stub_{this};\n");
1396 for (
int i = 0;
i <
service->method_count(); ++
i) {
1399 for (
int i = 0;
i <
service->method_count(); ++
i) {
1403 printer->
Print(
"};\n");
1405 "static std::unique_ptr<Stub> NewStub(const std::shared_ptr< "
1406 "::grpc::ChannelInterface>& channel, "
1407 "const ::grpc::StubOptions& options = ::grpc::StubOptions());\n");
1409 printer->
Print(
"\n");
1413 "class Service : public ::grpc::Service {\n"
1416 printer->
Print(
"Service();\n");
1417 printer->
Print(
"virtual ~Service();\n");
1418 for (
int i = 0;
i <
service->method_count(); ++
i) {
1422 printer->
Print(
"};\n");
1425 for (
int i = 0;
i <
service->method_count(); ++
i) {
1430 printer->
Print(
"typedef ");
1432 for (
int i = 0;
i <
service->method_count(); ++
i) {
1433 (*vars)[
"method_name"] =
service->method(
i)->name();
1434 printer->
Print(*vars,
"WithAsyncMethod_$method_name$<");
1436 printer->
Print(
"Service");
1437 for (
int i = 0;
i <
service->method_count(); ++
i) {
1438 printer->
Print(
" >");
1440 printer->
Print(
" AsyncService;\n");
1443 for (
int i = 0;
i <
service->method_count(); ++
i) {
1448 printer->
Print(
"typedef ");
1450 for (
int i = 0;
i <
service->method_count(); ++
i) {
1451 (*vars)[
"method_name"] =
service->method(
i)->name();
1452 printer->
Print(*vars,
"WithCallbackMethod_$method_name$<");
1454 printer->
Print(
"Service");
1455 for (
int i = 0;
i <
service->method_count(); ++
i) {
1456 printer->
Print(
" >");
1458 printer->
Print(
" CallbackService;\n");
1462 printer->
Print(
"typedef CallbackService ExperimentalCallbackService;\n");
1465 for (
int i = 0;
i <
service->method_count(); ++
i) {
1471 for (
int i = 0;
i <
service->method_count(); ++
i) {
1477 for (
int i = 0;
i <
service->method_count(); ++
i) {
1483 for (
int i = 0;
i <
service->method_count(); ++
i) {
1489 printer->
Print(
"typedef ");
1490 for (
int i = 0;
i <
service->method_count(); ++
i) {
1491 (*vars)[
"method_name"] =
service->method(
i)->name();
1492 if (
service->method(
i)->NoStreaming()) {
1493 printer->
Print(*vars,
"WithStreamedUnaryMethod_$method_name$<");
1496 printer->
Print(
"Service");
1497 for (
int i = 0;
i <
service->method_count(); ++
i) {
1498 if (
service->method(
i)->NoStreaming()) {
1499 printer->
Print(
" >");
1502 printer->
Print(
" StreamedUnaryService;\n");
1505 for (
int i = 0;
i <
service->method_count(); ++
i) {
1511 printer->
Print(
"typedef ");
1512 for (
int i = 0;
i <
service->method_count(); ++
i) {
1513 (*vars)[
"method_name"] =
service->method(
i)->name();
1515 if (ServerOnlyStreaming(
method.get())) {
1516 printer->
Print(*vars,
"WithSplitStreamingMethod_$method_name$<");
1519 printer->
Print(
"Service");
1520 for (
int i = 0;
i <
service->method_count(); ++
i) {
1522 if (ServerOnlyStreaming(
method.get())) {
1523 printer->
Print(
" >");
1526 printer->
Print(
" SplitStreamedService;\n");
1529 printer->
Print(
"typedef ");
1530 for (
int i = 0;
i <
service->method_count(); ++
i) {
1531 (*vars)[
"method_name"] =
service->method(
i)->name();
1533 if (ServerOnlyStreaming(
method.get())) {
1534 printer->
Print(*vars,
"WithSplitStreamingMethod_$method_name$<");
1536 if (
service->method(
i)->NoStreaming()) {
1537 printer->
Print(*vars,
"WithStreamedUnaryMethod_$method_name$<");
1540 printer->
Print(
"Service");
1541 for (
int i = 0;
i <
service->method_count(); ++
i) {
1543 if (
service->method(
i)->NoStreaming() ||
1544 ServerOnlyStreaming(
method.get())) {
1545 printer->
Print(
" >");
1548 printer->
Print(
" StreamedService;\n");
1551 printer->
Print(
"};\n");
1552 printer->
Print(
service->GetTrailingComments(
"//").c_str());
1561 std::map<std::string, std::string> vars;
1564 vars[
"Package"] =
file->package();
1565 if (!
file->package().empty()) {
1566 vars[
"Package"].append(
".");
1571 printer->Print(vars,
"\nnamespace $services_namespace$ {\n\n");
1574 for (
int i = 0;
i <
file->service_count(); ++
i) {
1576 printer->Print(
"\n");
1580 printer->Print(vars,
"} // namespace $services_namespace$\n\n");
1592 std::map<std::string, std::string> vars;
1594 vars[
"filename"] =
file->filename();
1597 if (!
file->package().empty()) {
1598 std::vector<std::string> parts =
file->package_parts();
1600 for (
auto part = parts.rbegin(); part != parts.rend(); part++) {
1601 vars[
"part"] = *part;
1602 printer->Print(vars,
"} // namespace $part$\n");
1604 printer->Print(vars,
"\n");
1607 printer->Print(vars,
"\n");
1608 printer->Print(vars,
"#endif // GRPC_$filename_identifier$__INCLUDED\n");
1610 printer->Print(
file->GetTrailingComments(
"//").c_str());
1621 std::map<std::string, std::string> vars;
1623 vars[
"filename"] =
file->filename();
1624 vars[
"filename_base"] =
file->filename_without_ext();
1630 printer->Print(vars,
"// Generated by the gRPC C++ plugin.\n");
1631 printer->Print(vars,
1632 "// If you make any local change, they will be lost.\n");
1633 printer->Print(vars,
"// source: $filename$\n\n");
1635 printer->Print(vars,
"#include \"$filename_base$$message_header_ext$\"\n");
1636 printer->Print(vars,
"#include \"$filename_base$$service_header_ext$\"\n");
1637 printer->Print(vars,
"\n");
1648 std::map<std::string, std::string> vars;
1649 static const char* headers_strs[] = {
1651 "grpcpp/impl/codegen/async_stream.h",
1652 "grpcpp/impl/codegen/async_unary_call.h",
1653 "grpcpp/impl/codegen/channel_interface.h",
1654 "grpcpp/impl/codegen/client_unary_call.h",
1655 "grpcpp/impl/codegen/client_callback.h",
1656 "grpcpp/impl/codegen/message_allocator.h",
1657 "grpcpp/impl/codegen/method_handler.h",
1658 "grpcpp/impl/codegen/rpc_service_method.h",
1659 "grpcpp/impl/codegen/server_callback.h",
1660 "grpcpp/impl/codegen/server_callback_handlers.h",
1661 "grpcpp/impl/codegen/server_context.h",
1662 "grpcpp/impl/codegen/service_type.h",
1663 "grpcpp/impl/codegen/sync_stream.h"};
1664 std::vector<std::string> headers(headers_strs,
array_end(headers_strs));
1668 if (!
file->package().empty()) {
1669 std::vector<std::string> parts =
file->package_parts();
1671 for (
auto part = parts.begin(); part != parts.end(); part++) {
1672 vars[
"part"] = *part;
1673 printer->Print(vars,
"namespace $part$ {\n");
1677 printer->Print(vars,
"\n");
1684 std::map<std::string, std::string>* vars) {
1685 (*vars)[
"Method"] =
method->name();
1686 (*vars)[
"Request"] =
method->input_type_name();
1687 (*vars)[
"Response"] =
method->output_type_name();
1693 } async_prefixes[] = {{
"Async",
"true",
", void* tag",
", tag"},
1694 {
"PrepareAsync",
"false",
"",
", nullptr"}};
1695 if (
method->NoStreaming()) {
1696 printer->
Print(*vars,
1697 "::grpc::Status $ns$$Service$::Stub::$Method$("
1698 "::grpc::ClientContext* context, "
1699 "const $Request$& request, $Response$* response) {\n");
1700 printer->
Print(*vars,
1701 " return ::grpc::internal::BlockingUnaryCall"
1702 "< $Request$, $Response$, ::grpc::protobuf::MessageLite, "
1703 "::grpc::protobuf::MessageLite>"
1704 "(channel_.get(), rpcmethod_$Method$_, "
1705 "context, request, response);\n}\n\n");
1707 printer->
Print(*vars,
1708 "void $ns$$Service$::Stub::async::$Method$("
1709 "::grpc::ClientContext* context, "
1710 "const $Request$* request, $Response$* response, "
1711 "std::function<void(::grpc::Status)> f) {\n");
1712 printer->
Print(*vars,
1713 " ::grpc::internal::CallbackUnaryCall"
1714 "< $Request$, $Response$, ::grpc::protobuf::MessageLite, "
1715 "::grpc::protobuf::MessageLite>"
1716 "(stub_->channel_.get(), stub_->rpcmethod_$Method$_, "
1717 "context, request, response, std::move(f));\n}\n\n");
1719 printer->
Print(*vars,
1720 "void $ns$$Service$::Stub::async::$Method$("
1721 "::grpc::ClientContext* context, "
1722 "const $Request$* request, $Response$* response, "
1723 "::grpc::ClientUnaryReactor* reactor) {\n");
1724 printer->
Print(*vars,
1725 " ::grpc::internal::ClientCallbackUnaryFactory::Create"
1726 "< ::grpc::protobuf::MessageLite, "
1727 "::grpc::protobuf::MessageLite>"
1728 "(stub_->channel_.get(), stub_->rpcmethod_$Method$_, "
1729 "context, request, response, reactor);\n}\n\n");
1731 printer->
Print(*vars,
1732 "::grpc::ClientAsyncResponseReader< $Response$>* "
1733 "$ns$$Service$::Stub::PrepareAsync$Method$Raw(::grpc::"
1734 "ClientContext* context, "
1735 "const $Request$& request, "
1736 "::grpc::CompletionQueue* cq) {\n");
1737 printer->
Print(*vars,
1739 "::grpc::internal::ClientAsyncResponseReaderHelper::Create"
1740 "< $Response$, $Request$, ::grpc::protobuf::MessageLite, "
1741 "::grpc::protobuf::MessageLite>"
1742 "(channel_.get(), cq, rpcmethod_$Method$_, "
1743 "context, request);\n"
1745 printer->
Print(*vars,
1746 "::grpc::ClientAsyncResponseReader< $Response$>* "
1747 "$ns$$Service$::Stub::Async$Method$Raw(::grpc::"
1748 "ClientContext* context, "
1749 "const $Request$& request, "
1750 "::grpc::CompletionQueue* cq) {\n");
1751 printer->
Print(*vars,
1753 " this->PrepareAsync$Method$Raw(context, request, cq);\n"
1754 " result->StartCall();\n"
1757 }
else if (ClientOnlyStreaming(
method)) {
1758 printer->
Print(*vars,
1759 "::grpc::ClientWriter< $Request$>* "
1760 "$ns$$Service$::Stub::$Method$Raw("
1761 "::grpc::ClientContext* context, $Response$* response) {\n");
1762 printer->
Print(*vars,
1763 " return ::grpc::internal::ClientWriterFactory< "
1764 "$Request$>::Create("
1766 "rpcmethod_$Method$_, "
1767 "context, response);\n"
1770 printer->
Print(*vars,
1771 "void $ns$$Service$::"
1772 "Stub::async::$Method$(::grpc::ClientContext* context, "
1773 "$Response$* response, "
1774 "::grpc::ClientWriteReactor< $Request$>* reactor) {\n");
1775 printer->
Print(*vars,
1776 " ::grpc::internal::ClientCallbackWriterFactory< "
1777 "$Request$>::Create("
1778 "stub_->channel_.get(), "
1779 "stub_->rpcmethod_$Method$_, "
1780 "context, response, reactor);\n"
1783 for (
auto async_prefix : async_prefixes) {
1784 (*vars)[
"AsyncPrefix"] = async_prefix.prefix;
1785 (*vars)[
"AsyncStart"] = async_prefix.start;
1786 (*vars)[
"AsyncMethodParams"] = async_prefix.method_params;
1787 (*vars)[
"AsyncCreateArgs"] = async_prefix.create_args;
1788 printer->
Print(*vars,
1789 "::grpc::ClientAsyncWriter< $Request$>* "
1790 "$ns$$Service$::Stub::$AsyncPrefix$$Method$Raw("
1791 "::grpc::ClientContext* context, $Response$* response, "
1792 "::grpc::CompletionQueue* cq$AsyncMethodParams$) {\n");
1795 " return ::grpc::internal::ClientAsyncWriterFactory< $Request$>"
1796 "::Create(channel_.get(), cq, "
1797 "rpcmethod_$Method$_, "
1798 "context, response, $AsyncStart$$AsyncCreateArgs$);\n"
1801 }
else if (ServerOnlyStreaming(
method)) {
1804 "::grpc::ClientReader< $Response$>* "
1805 "$ns$$Service$::Stub::$Method$Raw("
1806 "::grpc::ClientContext* context, const $Request$& request) {\n");
1807 printer->
Print(*vars,
1808 " return ::grpc::internal::ClientReaderFactory< "
1809 "$Response$>::Create("
1811 "rpcmethod_$Method$_, "
1812 "context, request);\n"
1815 printer->
Print(*vars,
1816 "void $ns$$Service$::Stub::async::$Method$(::grpc::"
1817 "ClientContext* context, "
1818 "const $Request$* request, "
1819 "::grpc::ClientReadReactor< $Response$>* reactor) {\n");
1820 printer->
Print(*vars,
1821 " ::grpc::internal::ClientCallbackReaderFactory< "
1822 "$Response$>::Create("
1823 "stub_->channel_.get(), "
1824 "stub_->rpcmethod_$Method$_, "
1825 "context, request, reactor);\n"
1828 for (
auto async_prefix : async_prefixes) {
1829 (*vars)[
"AsyncPrefix"] = async_prefix.prefix;
1830 (*vars)[
"AsyncStart"] = async_prefix.start;
1831 (*vars)[
"AsyncMethodParams"] = async_prefix.method_params;
1832 (*vars)[
"AsyncCreateArgs"] = async_prefix.create_args;
1835 "::grpc::ClientAsyncReader< $Response$>* "
1836 "$ns$$Service$::Stub::$AsyncPrefix$$Method$Raw("
1837 "::grpc::ClientContext* context, const $Request$& request, "
1838 "::grpc::CompletionQueue* cq$AsyncMethodParams$) {\n");
1839 printer->
Print(*vars,
1840 " return ::grpc::internal::ClientAsyncReaderFactory< "
1842 "::Create(channel_.get(), cq, "
1843 "rpcmethod_$Method$_, "
1844 "context, request, $AsyncStart$$AsyncCreateArgs$);\n"
1847 }
else if (
method->BidiStreaming()) {
1850 "::grpc::ClientReaderWriter< $Request$, $Response$>* "
1851 "$ns$$Service$::Stub::$Method$Raw(::grpc::ClientContext* context) {\n");
1852 printer->
Print(*vars,
1853 " return ::grpc::internal::ClientReaderWriterFactory< "
1854 "$Request$, $Response$>::Create("
1856 "rpcmethod_$Method$_, "
1860 printer->
Print(*vars,
1861 "void $ns$$Service$::Stub::async::$Method$(::grpc::"
1862 "ClientContext* context, "
1863 "::grpc::ClientBidiReactor< $Request$,$Response$>* "
1865 printer->
Print(*vars,
1866 " ::grpc::internal::ClientCallbackReaderWriterFactory< "
1867 "$Request$,$Response$>::Create("
1868 "stub_->channel_.get(), "
1869 "stub_->rpcmethod_$Method$_, "
1870 "context, reactor);\n"
1873 for (
auto async_prefix : async_prefixes) {
1874 (*vars)[
"AsyncPrefix"] = async_prefix.prefix;
1875 (*vars)[
"AsyncStart"] = async_prefix.start;
1876 (*vars)[
"AsyncMethodParams"] = async_prefix.method_params;
1877 (*vars)[
"AsyncCreateArgs"] = async_prefix.create_args;
1878 printer->
Print(*vars,
1879 "::grpc::ClientAsyncReaderWriter< $Request$, $Response$>* "
1880 "$ns$$Service$::Stub::$AsyncPrefix$$Method$Raw(::grpc::"
1881 "ClientContext* context, "
1882 "::grpc::CompletionQueue* cq$AsyncMethodParams$) {\n");
1883 printer->
Print(*vars,
1885 "::grpc::internal::ClientAsyncReaderWriterFactory< "
1886 "$Request$, $Response$>::Create("
1887 "channel_.get(), cq, "
1888 "rpcmethod_$Method$_, "
1889 "context, $AsyncStart$$AsyncCreateArgs$);\n"
1897 std::map<std::string, std::string>* vars) {
1898 (*vars)[
"Method"] =
method->name();
1899 (*vars)[
"Request"] =
method->input_type_name();
1900 (*vars)[
"Response"] =
method->output_type_name();
1901 if (
method->NoStreaming()) {
1902 printer->
Print(*vars,
1903 "::grpc::Status $ns$$Service$::Service::$Method$("
1904 "::grpc::ServerContext* context, "
1905 "const $Request$* request, $Response$* response) {\n");
1906 printer->
Print(
" (void) context;\n");
1907 printer->
Print(
" (void) request;\n");
1908 printer->
Print(
" (void) response;\n");
1910 " return ::grpc::Status("
1911 "::grpc::StatusCode::UNIMPLEMENTED, \"\");\n");
1912 printer->
Print(
"}\n\n");
1913 }
else if (ClientOnlyStreaming(
method)) {
1914 printer->
Print(*vars,
1915 "::grpc::Status $ns$$Service$::Service::$Method$("
1916 "::grpc::ServerContext* context, "
1917 "::grpc::ServerReader< $Request$>* reader, "
1918 "$Response$* response) {\n");
1919 printer->
Print(
" (void) context;\n");
1920 printer->
Print(
" (void) reader;\n");
1921 printer->
Print(
" (void) response;\n");
1923 " return ::grpc::Status("
1924 "::grpc::StatusCode::UNIMPLEMENTED, \"\");\n");
1925 printer->
Print(
"}\n\n");
1926 }
else if (ServerOnlyStreaming(
method)) {
1927 printer->
Print(*vars,
1928 "::grpc::Status $ns$$Service$::Service::$Method$("
1929 "::grpc::ServerContext* context, "
1930 "const $Request$* request, "
1931 "::grpc::ServerWriter< $Response$>* writer) {\n");
1932 printer->
Print(
" (void) context;\n");
1933 printer->
Print(
" (void) request;\n");
1934 printer->
Print(
" (void) writer;\n");
1936 " return ::grpc::Status("
1937 "::grpc::StatusCode::UNIMPLEMENTED, \"\");\n");
1938 printer->
Print(
"}\n\n");
1939 }
else if (
method->BidiStreaming()) {
1940 printer->
Print(*vars,
1941 "::grpc::Status $ns$$Service$::Service::$Method$("
1942 "::grpc::ServerContext* context, "
1943 "::grpc::ServerReaderWriter< $Response$, $Request$>* "
1945 printer->
Print(
" (void) context;\n");
1946 printer->
Print(
" (void) stream;\n");
1948 " return ::grpc::Status("
1949 "::grpc::StatusCode::UNIMPLEMENTED, \"\");\n");
1950 printer->
Print(
"}\n\n");
1956 std::map<std::string, std::string>* vars) {
1957 (*vars)[
"Service"] =
service->name();
1959 if (
service->method_count() > 0) {
1960 printer->
Print(*vars,
1961 "static const char* $prefix$$Service$_method_names[] = {\n");
1962 for (
int i = 0;
i <
service->method_count(); ++
i) {
1963 (*vars)[
"Method"] =
service->method(
i)->name();
1964 printer->
Print(*vars,
" \"/$Package$$Service$/$Method$\",\n");
1966 printer->
Print(*vars,
"};\n\n");
1969 printer->
Print(*vars,
1970 "std::unique_ptr< $ns$$Service$::Stub> $ns$$Service$::NewStub("
1971 "const std::shared_ptr< ::grpc::ChannelInterface>& channel, "
1972 "const ::grpc::StubOptions& options) {\n"
1974 " std::unique_ptr< $ns$$Service$::Stub> stub(new "
1975 "$ns$$Service$::Stub(channel, options));\n"
1978 printer->
Print(*vars,
1979 "$ns$$Service$::Stub::Stub(const std::shared_ptr< "
1980 "::grpc::ChannelInterface>& channel, const "
1981 "::grpc::StubOptions& options)\n");
1983 printer->
Print(
": channel_(channel)");
1984 for (
int i = 0;
i <
service->method_count(); ++
i) {
1986 (*vars)[
"Method"] =
method->name();
1988 if (
method->NoStreaming()) {
1989 (*vars)[
"StreamingType"] =
"NORMAL_RPC";
1993 }
else if (ClientOnlyStreaming(
method.get())) {
1994 (*vars)[
"StreamingType"] =
"CLIENT_STREAMING";
1995 }
else if (ServerOnlyStreaming(
method.get())) {
1996 (*vars)[
"StreamingType"] =
"SERVER_STREAMING";
1998 (*vars)[
"StreamingType"] =
"BIDI_STREAMING";
2002 ", rpcmethod_$Method$_("
2003 "$prefix$$Service$_method_names[$Idx$], options.suffix_for_stats(),"
2004 "::grpc::internal::RpcMethod::$StreamingType$, "
2008 printer->
Print(
"{}\n\n");
2011 for (
int i = 0;
i <
service->method_count(); ++
i) {
2016 printer->
Print(*vars,
"$ns$$Service$::Service::Service() {\n");
2018 for (
int i = 0;
i <
service->method_count(); ++
i) {
2021 (*vars)[
"Method"] =
method->name();
2022 (*vars)[
"Request"] =
method->input_type_name();
2023 (*vars)[
"Response"] =
method->output_type_name();
2024 if (
method->NoStreaming()) {
2027 "AddMethod(new ::grpc::internal::RpcServiceMethod(\n"
2028 " $prefix$$Service$_method_names[$Idx$],\n"
2029 " ::grpc::internal::RpcMethod::NORMAL_RPC,\n"
2030 " new ::grpc::internal::RpcMethodHandler< $ns$$Service$::Service, "
2031 "$Request$, $Response$, ::grpc::protobuf::MessageLite, "
2032 "::grpc::protobuf::MessageLite>(\n"
2033 " []($ns$$Service$::Service* service,\n"
2034 " ::grpc::ServerContext* ctx,\n"
2035 " const $Request$* req,\n"
2036 " $Response$* resp) {\n"
2037 " return service->$Method$(ctx, req, resp);\n"
2039 }
else if (ClientOnlyStreaming(
method.get())) {
2042 "AddMethod(new ::grpc::internal::RpcServiceMethod(\n"
2043 " $prefix$$Service$_method_names[$Idx$],\n"
2044 " ::grpc::internal::RpcMethod::CLIENT_STREAMING,\n"
2045 " new ::grpc::internal::ClientStreamingHandler< "
2046 "$ns$$Service$::Service, $Request$, $Response$>(\n"
2047 " []($ns$$Service$::Service* service,\n"
2048 " ::grpc::ServerContext* ctx,\n"
2049 " ::grpc::ServerReader<$Request$>* reader,\n"
2050 " $Response$* resp) {\n"
2051 " return service->$Method$(ctx, reader, resp);\n"
2053 }
else if (ServerOnlyStreaming(
method.get())) {
2056 "AddMethod(new ::grpc::internal::RpcServiceMethod(\n"
2057 " $prefix$$Service$_method_names[$Idx$],\n"
2058 " ::grpc::internal::RpcMethod::SERVER_STREAMING,\n"
2059 " new ::grpc::internal::ServerStreamingHandler< "
2060 "$ns$$Service$::Service, $Request$, $Response$>(\n"
2061 " []($ns$$Service$::Service* service,\n"
2062 " ::grpc::ServerContext* ctx,\n"
2063 " const $Request$* req,\n"
2064 " ::grpc::ServerWriter<$Response$>* writer) {\n"
2065 " return service->$Method$(ctx, req, writer);\n"
2067 }
else if (
method->BidiStreaming()) {
2068 printer->
Print(*vars,
2069 "AddMethod(new ::grpc::internal::RpcServiceMethod(\n"
2070 " $prefix$$Service$_method_names[$Idx$],\n"
2071 " ::grpc::internal::RpcMethod::BIDI_STREAMING,\n"
2072 " new ::grpc::internal::BidiStreamingHandler< "
2073 "$ns$$Service$::Service, $Request$, $Response$>(\n"
2074 " []($ns$$Service$::Service* service,\n"
2075 " ::grpc::ServerContext* ctx,\n"
2076 " ::grpc::ServerReaderWriter<$Response$,\n"
2077 " $Request$>* stream) {\n"
2078 " return service->$Method$(ctx, stream);\n"
2083 printer->
Print(*vars,
"}\n\n");
2084 printer->
Print(*vars,
2085 "$ns$$Service$::Service::~Service() {\n"
2087 for (
int i = 0;
i <
service->method_count(); ++
i) {
2099 std::map<std::string, std::string> vars;
2102 vars[
"Package"] =
file->package();
2103 if (!
file->package().empty()) {
2104 vars[
"Package"].append(
".");
2111 vars[
"prefix"] =
"";
2114 for (
int i = 0;
i <
file->service_count(); ++
i) {
2116 printer->Print(
"\n");
2126 if (!
file->package().empty()) {
2127 std::vector<std::string> parts =
file->package_parts();
2129 for (
auto part = parts.begin(); part != parts.end(); part++) {
2130 temp.append(
"} // namespace ");
2147 std::map<std::string, std::string> vars;
2149 vars[
"filename"] =
file->filename();
2150 vars[
"filename_base"] =
file->filename_without_ext();
2156 printer->Print(vars,
"// Generated by the gRPC C++ plugin.\n");
2157 printer->Print(vars,
2158 "// If you make any local change, they will be lost.\n");
2159 printer->Print(vars,
"// source: $filename$\n\n");
2161 printer->Print(vars,
"#include \"$filename_base$$message_header_ext$\"\n");
2162 printer->Print(vars,
"#include \"$filename_base$$service_header_ext$\"\n");
2164 const std::vector<std::string> import_names =
file->GetImportNames();
2165 for (
const auto& import_name : import_names) {
2167 printer->Print(vars, include_name.c_str());
2169 printer->PrintRaw(
"\n");
2171 printer->Print(vars,
file->additional_headers().c_str());
2172 printer->Print(vars,
"\n");
2184 std::map<std::string, std::string> vars;
2186 static const char* headers_strs[] = {
2187 "grpcpp/impl/codegen/async_stream.h",
2188 "grpcpp/impl/codegen/sync_stream.h",
2190 std::vector<std::string> headers(headers_strs,
array_end(headers_strs));
2194 std::vector<std::string> gmock_header;
2196 gmock_header.push_back(
"gmock/gmock.h");
2200 gmock_header.push_back(
"gmock.h");
2206 if (!
file->package().empty()) {
2207 std::vector<std::string> parts =
file->package_parts();
2209 for (
auto part = parts.begin(); part != parts.end(); part++) {
2210 vars[
"part"] = *part;
2211 printer->Print(vars,
"namespace $part$ {\n");
2215 printer->Print(vars,
"\n");
2222 std::map<std::string, std::string>* vars) {
2223 (*vars)[
"Method"] =
method->name();
2224 (*vars)[
"Request"] =
method->input_type_name();
2225 (*vars)[
"Response"] =
method->output_type_name();
2230 int extra_method_param_count;
2231 } async_prefixes[] = {{
"Async",
", void* tag", 1}, {
"PrepareAsync",
"", 0}};
2233 if (
method->NoStreaming()) {
2236 "MOCK_METHOD3($Method$, ::grpc::Status(::grpc::ClientContext* context, "
2237 "const $Request$& request, $Response$* response));\n");
2238 for (
auto async_prefix : async_prefixes) {
2239 (*vars)[
"AsyncPrefix"] = async_prefix.prefix;
2242 "MOCK_METHOD3($AsyncPrefix$$Method$Raw, "
2243 "::grpc::ClientAsyncResponseReaderInterface< $Response$>*"
2244 "(::grpc::ClientContext* context, const $Request$& request, "
2245 "::grpc::CompletionQueue* cq));\n");
2247 }
else if (ClientOnlyStreaming(
method)) {
2250 "MOCK_METHOD2($Method$Raw, "
2251 "::grpc::ClientWriterInterface< $Request$>*"
2252 "(::grpc::ClientContext* context, $Response$* response));\n");
2253 for (
auto async_prefix : async_prefixes) {
2254 (*vars)[
"AsyncPrefix"] = async_prefix.prefix;
2255 (*vars)[
"AsyncMethodParams"] = async_prefix.method_params;
2256 (*vars)[
"MockArgs"] =
2258 printer->
Print(*vars,
2259 "MOCK_METHOD$MockArgs$($AsyncPrefix$$Method$Raw, "
2260 "::grpc::ClientAsyncWriterInterface< $Request$>*"
2261 "(::grpc::ClientContext* context, $Response$* response, "
2262 "::grpc::CompletionQueue* cq$AsyncMethodParams$));\n");
2264 }
else if (ServerOnlyStreaming(
method)) {
2267 "MOCK_METHOD2($Method$Raw, "
2268 "::grpc::ClientReaderInterface< $Response$>*"
2269 "(::grpc::ClientContext* context, const $Request$& request));\n");
2270 for (
auto async_prefix : async_prefixes) {
2271 (*vars)[
"AsyncPrefix"] = async_prefix.prefix;
2272 (*vars)[
"AsyncMethodParams"] = async_prefix.method_params;
2273 (*vars)[
"MockArgs"] =
2277 "MOCK_METHOD$MockArgs$($AsyncPrefix$$Method$Raw, "
2278 "::grpc::ClientAsyncReaderInterface< $Response$>*"
2279 "(::grpc::ClientContext* context, const $Request$& request, "
2280 "::grpc::CompletionQueue* cq$AsyncMethodParams$));\n");
2282 }
else if (
method->BidiStreaming()) {
2285 "MOCK_METHOD1($Method$Raw, "
2286 "::grpc::ClientReaderWriterInterface< $Request$, $Response$>*"
2287 "(::grpc::ClientContext* context));\n");
2288 for (
auto async_prefix : async_prefixes) {
2289 (*vars)[
"AsyncPrefix"] = async_prefix.prefix;
2290 (*vars)[
"AsyncMethodParams"] = async_prefix.method_params;
2291 (*vars)[
"MockArgs"] =
2295 "MOCK_METHOD$MockArgs$($AsyncPrefix$$Method$Raw, "
2296 "::grpc::ClientAsyncReaderWriterInterface<$Request$, "
2298 "(::grpc::ClientContext* context, ::grpc::CompletionQueue* cq"
2299 "$AsyncMethodParams$));\n");
2306 std::map<std::string, std::string>* vars) {
2307 (*vars)[
"Service"] =
service->name();
2309 printer->
Print(*vars,
2310 "class Mock$Service$Stub : public $Service$::StubInterface {\n"
2313 for (
int i = 0;
i <
service->method_count(); ++
i) {
2317 printer->
Print(
"};\n");
2326 std::map<std::string, std::string> vars;
2329 vars[
"Package"] =
file->package();
2330 if (!
file->package().empty()) {
2331 vars[
"Package"].append(
".");
2336 printer->Print(vars,
"\nnamespace $services_namespace$ {\n\n");
2339 for (
int i = 0;
i <
file->service_count();
i++) {
2341 printer->Print(
"\n");
2345 printer->Print(vars,
"} // namespace $services_namespace$\n\n");
2355 if (!
file->package().empty()) {
2356 std::vector<std::string> parts =
file->package_parts();
2358 for (
auto part = parts.begin(); part != parts.end(); part++) {
2359 temp.append(
"} // namespace ");