|  | @@ -111,7 +111,8 @@ bool HasBidiStreaming(const grpc::protobuf::FileDescriptor *file) {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  }  // namespace
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -grpc::string GetHeaderIncludes(const grpc::protobuf::FileDescriptor *file) {
 | 
	
		
			
				|  |  | +grpc::string GetHeaderIncludes(const grpc::protobuf::FileDescriptor *file,
 | 
	
		
			
				|  |  | +                               const Parameters ¶ms) {
 | 
	
		
			
				|  |  |    grpc::string temp =
 | 
	
		
			
				|  |  |        "#include <grpc++/impl/internal_stub.h>\n"
 | 
	
		
			
				|  |  |        "#include <grpc++/impl/service_type.h>\n"
 | 
	
	
		
			
				|  | @@ -158,7 +159,7 @@ grpc::string GetHeaderIncludes(const grpc::protobuf::FileDescriptor *file) {
 | 
	
		
			
				|  |  |    return temp;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -grpc::string GetSourceIncludes() {
 | 
	
		
			
				|  |  | +grpc::string GetSourceIncludes(const Parameters ¶m) {
 | 
	
		
			
				|  |  |    return "#include <grpc++/async_unary_call.h>\n"
 | 
	
		
			
				|  |  |           "#include <grpc++/channel_interface.h>\n"
 | 
	
		
			
				|  |  |           "#include <grpc++/impl/client_unary_call.h>\n"
 | 
	
	
		
			
				|  | @@ -353,16 +354,27 @@ void PrintHeaderService(grpc::protobuf::io::Printer *printer,
 | 
	
		
			
				|  |  |    printer->Print("};\n");
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -grpc::string GetHeaderServices(const grpc::protobuf::FileDescriptor *file) {
 | 
	
		
			
				|  |  | +grpc::string GetHeaderServices(const grpc::protobuf::FileDescriptor *file,
 | 
	
		
			
				|  |  | +                               const Parameters ¶ms) {
 | 
	
		
			
				|  |  |    grpc::string output;
 | 
	
		
			
				|  |  |    grpc::protobuf::io::StringOutputStream output_stream(&output);
 | 
	
		
			
				|  |  |    grpc::protobuf::io::Printer printer(&output_stream, '$');
 | 
	
		
			
				|  |  |    std::map<grpc::string, grpc::string> vars;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  if (!params.services_namespace.empty()) {
 | 
	
		
			
				|  |  | +    vars["services_namespace"] = params.services_namespace;
 | 
	
		
			
				|  |  | +    printer.Print(vars, "\nnamespace $services_namespace$ {\n\n");
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    for (int i = 0; i < file->service_count(); ++i) {
 | 
	
		
			
				|  |  |      PrintHeaderService(&printer, file->service(i), &vars);
 | 
	
		
			
				|  |  |      printer.Print("\n");
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  if (!params.services_namespace.empty()) {
 | 
	
		
			
				|  |  | +    printer.Print(vars, "}  // namespace $services_namespace$\n\n");
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    return output;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -376,18 +388,18 @@ void PrintSourceClientMethod(grpc::protobuf::io::Printer *printer,
 | 
	
		
			
				|  |  |        grpc_cpp_generator::ClassName(method->output_type(), true);
 | 
	
		
			
				|  |  |    if (NoStreaming(method)) {
 | 
	
		
			
				|  |  |      printer->Print(*vars,
 | 
	
		
			
				|  |  | -                   "::grpc::Status $Service$::Stub::$Method$("
 | 
	
		
			
				|  |  | +                   "::grpc::Status $ns$$Service$::Stub::$Method$("
 | 
	
		
			
				|  |  |                     "::grpc::ClientContext* context, "
 | 
	
		
			
				|  |  |                     "const $Request$& request, $Response$* response) {\n");
 | 
	
		
			
				|  |  |      printer->Print(*vars,
 | 
	
		
			
				|  |  |                     "  return ::grpc::BlockingUnaryCall(channel(),"
 | 
	
		
			
				|  |  | -                   "::grpc::RpcMethod($Service$_method_names[$Idx$]), "
 | 
	
		
			
				|  |  | +                   "::grpc::RpcMethod($prefix$$Service$_method_names[$Idx$]), "
 | 
	
		
			
				|  |  |                     "context, request, response);\n"
 | 
	
		
			
				|  |  |                     "}\n\n");
 | 
	
		
			
				|  |  |      printer->Print(
 | 
	
		
			
				|  |  |          *vars,
 | 
	
		
			
				|  |  |          "std::unique_ptr< ::grpc::ClientAsyncResponseReader< $Response$>> "
 | 
	
		
			
				|  |  | -        "$Service$::Stub::Async$Method$(::grpc::ClientContext* context, "
 | 
	
		
			
				|  |  | +        "$ns$$Service$::Stub::Async$Method$(::grpc::ClientContext* context, "
 | 
	
		
			
				|  |  |          "const $Request$& request, "
 | 
	
		
			
				|  |  |          "::grpc::CompletionQueue* cq, void* tag) {\n");
 | 
	
		
			
				|  |  |      printer->Print(*vars,
 | 
	
	
		
			
				|  | @@ -395,32 +407,32 @@ void PrintSourceClientMethod(grpc::protobuf::io::Printer *printer,
 | 
	
		
			
				|  |  |                     "::grpc::ClientAsyncResponseReader< $Response$>>(new "
 | 
	
		
			
				|  |  |                     "::grpc::ClientAsyncResponseReader< $Response$>("
 | 
	
		
			
				|  |  |                     "channel(), cq, "
 | 
	
		
			
				|  |  | -                   "::grpc::RpcMethod($Service$_method_names[$Idx$]), "
 | 
	
		
			
				|  |  | +                   "::grpc::RpcMethod($prefix$$Service$_method_names[$Idx$]), "
 | 
	
		
			
				|  |  |                     "context, request, tag));\n"
 | 
	
		
			
				|  |  |                     "}\n\n");
 | 
	
		
			
				|  |  |    } else if (ClientOnlyStreaming(method)) {
 | 
	
		
			
				|  |  |      printer->Print(*vars,
 | 
	
		
			
				|  |  |                     "std::unique_ptr< ::grpc::ClientWriter< $Request$>> "
 | 
	
		
			
				|  |  | -                   "$Service$::Stub::$Method$("
 | 
	
		
			
				|  |  | +                   "$ns$$Service$::Stub::$Method$("
 | 
	
		
			
				|  |  |                     "::grpc::ClientContext* context, $Response$* response) {\n");
 | 
	
		
			
				|  |  |      printer->Print(*vars,
 | 
	
		
			
				|  |  |                     "  return std::unique_ptr< ::grpc::ClientWriter< "
 | 
	
		
			
				|  |  |                     "$Request$>>(new ::grpc::ClientWriter< $Request$>("
 | 
	
		
			
				|  |  |                     "channel(),"
 | 
	
		
			
				|  |  | -                   "::grpc::RpcMethod($Service$_method_names[$Idx$], "
 | 
	
		
			
				|  |  | +                   "::grpc::RpcMethod($prefix$$Service$_method_names[$Idx$], "
 | 
	
		
			
				|  |  |                     "::grpc::RpcMethod::RpcType::CLIENT_STREAMING), "
 | 
	
		
			
				|  |  |                     "context, response));\n"
 | 
	
		
			
				|  |  |                     "}\n\n");
 | 
	
		
			
				|  |  |      printer->Print(*vars,
 | 
	
		
			
				|  |  |                     "std::unique_ptr< ::grpc::ClientAsyncWriter< $Request$>> "
 | 
	
		
			
				|  |  | -                   "$Service$::Stub::Async$Method$("
 | 
	
		
			
				|  |  | +                   "$ns$$Service$::Stub::Async$Method$("
 | 
	
		
			
				|  |  |                     "::grpc::ClientContext* context, $Response$* response, "
 | 
	
		
			
				|  |  |                     "::grpc::CompletionQueue* cq, void* tag) {\n");
 | 
	
		
			
				|  |  |      printer->Print(*vars,
 | 
	
		
			
				|  |  |                     "  return std::unique_ptr< ::grpc::ClientAsyncWriter< "
 | 
	
		
			
				|  |  |                     "$Request$>>(new ::grpc::ClientAsyncWriter< $Request$>("
 | 
	
		
			
				|  |  |                     "channel(), cq, "
 | 
	
		
			
				|  |  | -                   "::grpc::RpcMethod($Service$_method_names[$Idx$], "
 | 
	
		
			
				|  |  | +                   "::grpc::RpcMethod($prefix$$Service$_method_names[$Idx$], "
 | 
	
		
			
				|  |  |                     "::grpc::RpcMethod::RpcType::CLIENT_STREAMING), "
 | 
	
		
			
				|  |  |                     "context, response, tag));\n"
 | 
	
		
			
				|  |  |                     "}\n\n");
 | 
	
	
		
			
				|  | @@ -428,26 +440,26 @@ void PrintSourceClientMethod(grpc::protobuf::io::Printer *printer,
 | 
	
		
			
				|  |  |      printer->Print(
 | 
	
		
			
				|  |  |          *vars,
 | 
	
		
			
				|  |  |          "std::unique_ptr< ::grpc::ClientReader< $Response$>> "
 | 
	
		
			
				|  |  | -        "$Service$::Stub::$Method$("
 | 
	
		
			
				|  |  | +        "$ns$$Service$::Stub::$Method$("
 | 
	
		
			
				|  |  |          "::grpc::ClientContext* context, const $Request$& request) {\n");
 | 
	
		
			
				|  |  |      printer->Print(*vars,
 | 
	
		
			
				|  |  |                     "  return std::unique_ptr< ::grpc::ClientReader< "
 | 
	
		
			
				|  |  |                     "$Response$>>(new ::grpc::ClientReader< $Response$>("
 | 
	
		
			
				|  |  |                     "channel(),"
 | 
	
		
			
				|  |  | -                   "::grpc::RpcMethod($Service$_method_names[$Idx$], "
 | 
	
		
			
				|  |  | +                   "::grpc::RpcMethod($prefix$$Service$_method_names[$Idx$], "
 | 
	
		
			
				|  |  |                     "::grpc::RpcMethod::RpcType::SERVER_STREAMING), "
 | 
	
		
			
				|  |  |                     "context, request));\n"
 | 
	
		
			
				|  |  |                     "}\n\n");
 | 
	
		
			
				|  |  |      printer->Print(*vars,
 | 
	
		
			
				|  |  |                     "std::unique_ptr< ::grpc::ClientAsyncReader< $Response$>> "
 | 
	
		
			
				|  |  | -                   "$Service$::Stub::Async$Method$("
 | 
	
		
			
				|  |  | +                   "$ns$$Service$::Stub::Async$Method$("
 | 
	
		
			
				|  |  |                     "::grpc::ClientContext* context, const $Request$& request, "
 | 
	
		
			
				|  |  |                     "::grpc::CompletionQueue* cq, void* tag) {\n");
 | 
	
		
			
				|  |  |      printer->Print(*vars,
 | 
	
		
			
				|  |  |                     "  return std::unique_ptr< ::grpc::ClientAsyncReader< "
 | 
	
		
			
				|  |  |                     "$Response$>>(new ::grpc::ClientAsyncReader< $Response$>("
 | 
	
		
			
				|  |  |                     "channel(), cq, "
 | 
	
		
			
				|  |  | -                   "::grpc::RpcMethod($Service$_method_names[$Idx$], "
 | 
	
		
			
				|  |  | +                   "::grpc::RpcMethod($prefix$$Service$_method_names[$Idx$], "
 | 
	
		
			
				|  |  |                     "::grpc::RpcMethod::RpcType::SERVER_STREAMING), "
 | 
	
		
			
				|  |  |                     "context, request, tag));\n"
 | 
	
		
			
				|  |  |                     "}\n\n");
 | 
	
	
		
			
				|  | @@ -455,27 +467,27 @@ void PrintSourceClientMethod(grpc::protobuf::io::Printer *printer,
 | 
	
		
			
				|  |  |      printer->Print(
 | 
	
		
			
				|  |  |          *vars,
 | 
	
		
			
				|  |  |          "std::unique_ptr< ::grpc::ClientReaderWriter< $Request$, $Response$>> "
 | 
	
		
			
				|  |  | -        "$Service$::Stub::$Method$(::grpc::ClientContext* context) {\n");
 | 
	
		
			
				|  |  | +        "$ns$$Service$::Stub::$Method$(::grpc::ClientContext* context) {\n");
 | 
	
		
			
				|  |  |      printer->Print(*vars,
 | 
	
		
			
				|  |  |                     "  return std::unique_ptr< ::grpc::ClientReaderWriter< "
 | 
	
		
			
				|  |  |                     "$Request$, $Response$>>(new ::grpc::ClientReaderWriter< "
 | 
	
		
			
				|  |  |                     "$Request$, $Response$>("
 | 
	
		
			
				|  |  |                     "channel(),"
 | 
	
		
			
				|  |  | -                   "::grpc::RpcMethod($Service$_method_names[$Idx$], "
 | 
	
		
			
				|  |  | +                   "::grpc::RpcMethod($prefix$$Service$_method_names[$Idx$], "
 | 
	
		
			
				|  |  |                     "::grpc::RpcMethod::RpcType::BIDI_STREAMING), "
 | 
	
		
			
				|  |  |                     "context));\n"
 | 
	
		
			
				|  |  |                     "}\n\n");
 | 
	
		
			
				|  |  |      printer->Print(*vars,
 | 
	
		
			
				|  |  |                     "std::unique_ptr< ::grpc::ClientAsyncReaderWriter< "
 | 
	
		
			
				|  |  |                     "$Request$, $Response$>> "
 | 
	
		
			
				|  |  | -                   "$Service$::Stub::Async$Method$(::grpc::ClientContext* context, "
 | 
	
		
			
				|  |  | +                   "$ns$$Service$::Stub::Async$Method$(::grpc::ClientContext* context, "
 | 
	
		
			
				|  |  |                     "::grpc::CompletionQueue* cq, void* tag) {\n");
 | 
	
		
			
				|  |  |      printer->Print(*vars,
 | 
	
		
			
				|  |  |                     "  return std::unique_ptr< ::grpc::ClientAsyncReaderWriter< "
 | 
	
		
			
				|  |  |                     "$Request$, $Response$>>(new "
 | 
	
		
			
				|  |  |                     "::grpc::ClientAsyncReaderWriter< $Request$, $Response$>("
 | 
	
		
			
				|  |  |                     "channel(), cq, "
 | 
	
		
			
				|  |  | -                   "::grpc::RpcMethod($Service$_method_names[$Idx$], "
 | 
	
		
			
				|  |  | +                   "::grpc::RpcMethod($prefix$$Service$_method_names[$Idx$], "
 | 
	
		
			
				|  |  |                     "::grpc::RpcMethod::RpcType::BIDI_STREAMING), "
 | 
	
		
			
				|  |  |                     "context, tag));\n"
 | 
	
		
			
				|  |  |                     "}\n\n");
 | 
	
	
		
			
				|  | @@ -492,7 +504,7 @@ void PrintSourceServerMethod(grpc::protobuf::io::Printer *printer,
 | 
	
		
			
				|  |  |        grpc_cpp_generator::ClassName(method->output_type(), true);
 | 
	
		
			
				|  |  |    if (NoStreaming(method)) {
 | 
	
		
			
				|  |  |      printer->Print(*vars,
 | 
	
		
			
				|  |  | -                   "::grpc::Status $Service$::Service::$Method$("
 | 
	
		
			
				|  |  | +                   "::grpc::Status $ns$$Service$::Service::$Method$("
 | 
	
		
			
				|  |  |                     "::grpc::ServerContext* context, "
 | 
	
		
			
				|  |  |                     "const $Request$* request, $Response$* response) {\n");
 | 
	
		
			
				|  |  |      printer->Print(
 | 
	
	
		
			
				|  | @@ -501,7 +513,7 @@ void PrintSourceServerMethod(grpc::protobuf::io::Printer *printer,
 | 
	
		
			
				|  |  |      printer->Print("}\n\n");
 | 
	
		
			
				|  |  |    } else if (ClientOnlyStreaming(method)) {
 | 
	
		
			
				|  |  |      printer->Print(*vars,
 | 
	
		
			
				|  |  | -                   "::grpc::Status $Service$::Service::$Method$("
 | 
	
		
			
				|  |  | +                   "::grpc::Status $ns$$Service$::Service::$Method$("
 | 
	
		
			
				|  |  |                     "::grpc::ServerContext* context, "
 | 
	
		
			
				|  |  |                     "::grpc::ServerReader< $Request$>* reader, "
 | 
	
		
			
				|  |  |                     "$Response$* response) {\n");
 | 
	
	
		
			
				|  | @@ -511,7 +523,7 @@ void PrintSourceServerMethod(grpc::protobuf::io::Printer *printer,
 | 
	
		
			
				|  |  |      printer->Print("}\n\n");
 | 
	
		
			
				|  |  |    } else if (ServerOnlyStreaming(method)) {
 | 
	
		
			
				|  |  |      printer->Print(*vars,
 | 
	
		
			
				|  |  | -                   "::grpc::Status $Service$::Service::$Method$("
 | 
	
		
			
				|  |  | +                   "::grpc::Status $ns$$Service$::Service::$Method$("
 | 
	
		
			
				|  |  |                     "::grpc::ServerContext* context, "
 | 
	
		
			
				|  |  |                     "const $Request$* request, "
 | 
	
		
			
				|  |  |                     "::grpc::ServerWriter< $Response$>* writer) {\n");
 | 
	
	
		
			
				|  | @@ -521,7 +533,7 @@ void PrintSourceServerMethod(grpc::protobuf::io::Printer *printer,
 | 
	
		
			
				|  |  |      printer->Print("}\n\n");
 | 
	
		
			
				|  |  |    } else if (BidiStreaming(method)) {
 | 
	
		
			
				|  |  |      printer->Print(*vars,
 | 
	
		
			
				|  |  | -                   "::grpc::Status $Service$::Service::$Method$("
 | 
	
		
			
				|  |  | +                   "::grpc::Status $ns$$Service$::Service::$Method$("
 | 
	
		
			
				|  |  |                     "::grpc::ServerContext* context, "
 | 
	
		
			
				|  |  |                     "::grpc::ServerReaderWriter< $Response$, $Request$>* "
 | 
	
		
			
				|  |  |                     "stream) {\n");
 | 
	
	
		
			
				|  | @@ -543,7 +555,7 @@ void PrintSourceServerAsyncMethod(
 | 
	
		
			
				|  |  |        grpc_cpp_generator::ClassName(method->output_type(), true);
 | 
	
		
			
				|  |  |    if (NoStreaming(method)) {
 | 
	
		
			
				|  |  |      printer->Print(*vars,
 | 
	
		
			
				|  |  | -                   "void $Service$::AsyncService::Request$Method$("
 | 
	
		
			
				|  |  | +                   "void $ns$$Service$::AsyncService::Request$Method$("
 | 
	
		
			
				|  |  |                     "::grpc::ServerContext* context, "
 | 
	
		
			
				|  |  |                     "$Request$* request, "
 | 
	
		
			
				|  |  |                     "::grpc::ServerAsyncResponseWriter< $Response$>* response, "
 | 
	
	
		
			
				|  | @@ -554,7 +566,7 @@ void PrintSourceServerAsyncMethod(
 | 
	
		
			
				|  |  |      printer->Print("}\n\n");
 | 
	
		
			
				|  |  |    } else if (ClientOnlyStreaming(method)) {
 | 
	
		
			
				|  |  |      printer->Print(*vars,
 | 
	
		
			
				|  |  | -                   "void $Service$::AsyncService::Request$Method$("
 | 
	
		
			
				|  |  | +                   "void $ns$$Service$::AsyncService::Request$Method$("
 | 
	
		
			
				|  |  |                     "::grpc::ServerContext* context, "
 | 
	
		
			
				|  |  |                     "::grpc::ServerAsyncReader< $Response$, $Request$>* reader, "
 | 
	
		
			
				|  |  |                     "::grpc::CompletionQueue* cq, void* tag) {\n");
 | 
	
	
		
			
				|  | @@ -564,7 +576,7 @@ void PrintSourceServerAsyncMethod(
 | 
	
		
			
				|  |  |      printer->Print("}\n\n");
 | 
	
		
			
				|  |  |    } else if (ServerOnlyStreaming(method)) {
 | 
	
		
			
				|  |  |      printer->Print(*vars,
 | 
	
		
			
				|  |  | -                   "void $Service$::AsyncService::Request$Method$("
 | 
	
		
			
				|  |  | +                   "void $ns$$Service$::AsyncService::Request$Method$("
 | 
	
		
			
				|  |  |                     "::grpc::ServerContext* context, "
 | 
	
		
			
				|  |  |                     "$Request$* request, "
 | 
	
		
			
				|  |  |                     "::grpc::ServerAsyncWriter< $Response$>* writer, "
 | 
	
	
		
			
				|  | @@ -576,7 +588,7 @@ void PrintSourceServerAsyncMethod(
 | 
	
		
			
				|  |  |    } else if (BidiStreaming(method)) {
 | 
	
		
			
				|  |  |      printer->Print(
 | 
	
		
			
				|  |  |          *vars,
 | 
	
		
			
				|  |  | -        "void $Service$::AsyncService::Request$Method$("
 | 
	
		
			
				|  |  | +        "void $ns$$Service$::AsyncService::Request$Method$("
 | 
	
		
			
				|  |  |          "::grpc::ServerContext* context, "
 | 
	
		
			
				|  |  |          "::grpc::ServerAsyncReaderWriter< $Response$, $Request$>* stream, "
 | 
	
		
			
				|  |  |          "::grpc::CompletionQueue* cq, void *tag) {\n");
 | 
	
	
		
			
				|  | @@ -592,7 +604,7 @@ void PrintSourceService(grpc::protobuf::io::Printer *printer,
 | 
	
		
			
				|  |  |                          std::map<grpc::string, grpc::string> *vars) {
 | 
	
		
			
				|  |  |    (*vars)["Service"] = service->name();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  printer->Print(*vars, "static const char* $Service$_method_names[] = {\n");
 | 
	
		
			
				|  |  | +  printer->Print(*vars, "static const char* $prefix$$Service$_method_names[] = {\n");
 | 
	
		
			
				|  |  |    for (int i = 0; i < service->method_count(); ++i) {
 | 
	
		
			
				|  |  |      (*vars)["Method"] = service->method(i)->name();
 | 
	
		
			
				|  |  |      printer->Print(*vars, "  \"/$Package$$Service$/$Method$\",\n");
 | 
	
	
		
			
				|  | @@ -601,9 +613,9 @@ void PrintSourceService(grpc::protobuf::io::Printer *printer,
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    printer->Print(
 | 
	
		
			
				|  |  |        *vars,
 | 
	
		
			
				|  |  | -      "std::unique_ptr< $Service$::Stub> $Service$::NewStub("
 | 
	
		
			
				|  |  | +      "std::unique_ptr< $ns$$Service$::Stub> $ns$$Service$::NewStub("
 | 
	
		
			
				|  |  |        "const std::shared_ptr< ::grpc::ChannelInterface>& channel) {\n"
 | 
	
		
			
				|  |  | -      "  std::unique_ptr< $Service$::Stub> stub(new $Service$::Stub());\n"
 | 
	
		
			
				|  |  | +      "  std::unique_ptr< $ns$$Service$::Stub> stub(new $ns$$Service$::Stub());\n"
 | 
	
		
			
				|  |  |        "  stub->set_channel(channel);\n"
 | 
	
		
			
				|  |  |        "  return stub;\n"
 | 
	
		
			
				|  |  |        "}\n\n");
 | 
	
	
		
			
				|  | @@ -615,12 +627,12 @@ void PrintSourceService(grpc::protobuf::io::Printer *printer,
 | 
	
		
			
				|  |  |    (*vars)["MethodCount"] = as_string(service->method_count());
 | 
	
		
			
				|  |  |    printer->Print(
 | 
	
		
			
				|  |  |        *vars,
 | 
	
		
			
				|  |  | -      "$Service$::AsyncService::AsyncService(::grpc::CompletionQueue* cq) : "
 | 
	
		
			
				|  |  | -      "::grpc::AsynchronousService(cq, $Service$_method_names, $MethodCount$) "
 | 
	
		
			
				|  |  | +      "$ns$$Service$::AsyncService::AsyncService(::grpc::CompletionQueue* cq) : "
 | 
	
		
			
				|  |  | +      "::grpc::AsynchronousService(cq, $prefix$$Service$_method_names, $MethodCount$) "
 | 
	
		
			
				|  |  |        "{}\n\n");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    printer->Print(*vars,
 | 
	
		
			
				|  |  | -                 "$Service$::Service::~Service() {\n"
 | 
	
		
			
				|  |  | +                 "$ns$$Service$::Service::~Service() {\n"
 | 
	
		
			
				|  |  |                   "  delete service_;\n"
 | 
	
		
			
				|  |  |                   "}\n\n");
 | 
	
		
			
				|  |  |    for (int i = 0; i < service->method_count(); ++i) {
 | 
	
	
		
			
				|  | @@ -629,7 +641,7 @@ void PrintSourceService(grpc::protobuf::io::Printer *printer,
 | 
	
		
			
				|  |  |      PrintSourceServerAsyncMethod(printer, service->method(i), vars);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    printer->Print(*vars,
 | 
	
		
			
				|  |  | -                 "::grpc::RpcService* $Service$::Service::service() {\n");
 | 
	
		
			
				|  |  | +                 "::grpc::RpcService* $ns$$Service$::Service::service() {\n");
 | 
	
		
			
				|  |  |    printer->Indent();
 | 
	
		
			
				|  |  |    printer->Print(
 | 
	
		
			
				|  |  |        "if (service_ != nullptr) {\n"
 | 
	
	
		
			
				|  | @@ -648,52 +660,52 @@ void PrintSourceService(grpc::protobuf::io::Printer *printer,
 | 
	
		
			
				|  |  |        printer->Print(
 | 
	
		
			
				|  |  |            *vars,
 | 
	
		
			
				|  |  |            "service_->AddMethod(new ::grpc::RpcServiceMethod(\n"
 | 
	
		
			
				|  |  | -          "    $Service$_method_names[$Idx$],\n"
 | 
	
		
			
				|  |  | +          "    $prefix$$Service$_method_names[$Idx$],\n"
 | 
	
		
			
				|  |  |            "    ::grpc::RpcMethod::NORMAL_RPC,\n"
 | 
	
		
			
				|  |  | -          "    new ::grpc::RpcMethodHandler< $Service$::Service, $Request$, "
 | 
	
		
			
				|  |  | +          "    new ::grpc::RpcMethodHandler< $ns$$Service$::Service, $Request$, "
 | 
	
		
			
				|  |  |            "$Response$>(\n"
 | 
	
		
			
				|  |  | -          "        std::function< ::grpc::Status($Service$::Service*, "
 | 
	
		
			
				|  |  | +          "        std::function< ::grpc::Status($ns$$Service$::Service*, "
 | 
	
		
			
				|  |  |            "::grpc::ServerContext*, const $Request$*, $Response$*)>("
 | 
	
		
			
				|  |  | -          "&$Service$::Service::$Method$), this),\n"
 | 
	
		
			
				|  |  | +          "&$ns$$Service$::Service::$Method$), this),\n"
 | 
	
		
			
				|  |  |            "    new $Request$, new $Response$));\n");
 | 
	
		
			
				|  |  |      } else if (ClientOnlyStreaming(method)) {
 | 
	
		
			
				|  |  |        printer->Print(
 | 
	
		
			
				|  |  |            *vars,
 | 
	
		
			
				|  |  |            "service_->AddMethod(new ::grpc::RpcServiceMethod(\n"
 | 
	
		
			
				|  |  | -          "    $Service$_method_names[$Idx$],\n"
 | 
	
		
			
				|  |  | +          "    $prefix$$Service$_method_names[$Idx$],\n"
 | 
	
		
			
				|  |  |            "    ::grpc::RpcMethod::CLIENT_STREAMING,\n"
 | 
	
		
			
				|  |  |            "    new ::grpc::ClientStreamingHandler< "
 | 
	
		
			
				|  |  | -          "$Service$::Service, $Request$, $Response$>(\n"
 | 
	
		
			
				|  |  | -          "        std::function< ::grpc::Status($Service$::Service*, "
 | 
	
		
			
				|  |  | +          "$ns$$Service$::Service, $Request$, $Response$>(\n"
 | 
	
		
			
				|  |  | +          "        std::function< ::grpc::Status($ns$$Service$::Service*, "
 | 
	
		
			
				|  |  |            "::grpc::ServerContext*, "
 | 
	
		
			
				|  |  |            "::grpc::ServerReader< $Request$>*, $Response$*)>("
 | 
	
		
			
				|  |  | -          "&$Service$::Service::$Method$), this),\n"
 | 
	
		
			
				|  |  | +          "&$ns$$Service$::Service::$Method$), this),\n"
 | 
	
		
			
				|  |  |            "    new $Request$, new $Response$));\n");
 | 
	
		
			
				|  |  |      } else if (ServerOnlyStreaming(method)) {
 | 
	
		
			
				|  |  |        printer->Print(
 | 
	
		
			
				|  |  |            *vars,
 | 
	
		
			
				|  |  |            "service_->AddMethod(new ::grpc::RpcServiceMethod(\n"
 | 
	
		
			
				|  |  | -          "    $Service$_method_names[$Idx$],\n"
 | 
	
		
			
				|  |  | +          "    $prefix$$Service$_method_names[$Idx$],\n"
 | 
	
		
			
				|  |  |            "    ::grpc::RpcMethod::SERVER_STREAMING,\n"
 | 
	
		
			
				|  |  |            "    new ::grpc::ServerStreamingHandler< "
 | 
	
		
			
				|  |  | -          "$Service$::Service, $Request$, $Response$>(\n"
 | 
	
		
			
				|  |  | -          "        std::function< ::grpc::Status($Service$::Service*, "
 | 
	
		
			
				|  |  | +          "$ns$$Service$::Service, $Request$, $Response$>(\n"
 | 
	
		
			
				|  |  | +          "        std::function< ::grpc::Status($ns$$Service$::Service*, "
 | 
	
		
			
				|  |  |            "::grpc::ServerContext*, "
 | 
	
		
			
				|  |  |            "const $Request$*, ::grpc::ServerWriter< $Response$>*)>("
 | 
	
		
			
				|  |  | -          "&$Service$::Service::$Method$), this),\n"
 | 
	
		
			
				|  |  | +          "&$ns$$Service$::Service::$Method$), this),\n"
 | 
	
		
			
				|  |  |            "    new $Request$, new $Response$));\n");
 | 
	
		
			
				|  |  |      } else if (BidiStreaming(method)) {
 | 
	
		
			
				|  |  |        printer->Print(
 | 
	
		
			
				|  |  |            *vars,
 | 
	
		
			
				|  |  |            "service_->AddMethod(new ::grpc::RpcServiceMethod(\n"
 | 
	
		
			
				|  |  | -          "    $Service$_method_names[$Idx$],\n"
 | 
	
		
			
				|  |  | +          "    $prefix$$Service$_method_names[$Idx$],\n"
 | 
	
		
			
				|  |  |            "    ::grpc::RpcMethod::BIDI_STREAMING,\n"
 | 
	
		
			
				|  |  |            "    new ::grpc::BidiStreamingHandler< "
 | 
	
		
			
				|  |  | -          "$Service$::Service, $Request$, $Response$>(\n"
 | 
	
		
			
				|  |  | -          "        std::function< ::grpc::Status($Service$::Service*, "
 | 
	
		
			
				|  |  | +          "$ns$$Service$::Service, $Request$, $Response$>(\n"
 | 
	
		
			
				|  |  | +          "        std::function< ::grpc::Status($ns$$Service$::Service*, "
 | 
	
		
			
				|  |  |            "::grpc::ServerContext*, "
 | 
	
		
			
				|  |  |            "::grpc::ServerReaderWriter< $Response$, $Request$>*)>("
 | 
	
		
			
				|  |  | -          "&$Service$::Service::$Method$), this),\n"
 | 
	
		
			
				|  |  | +          "&$ns$$Service$::Service::$Method$), this),\n"
 | 
	
		
			
				|  |  |            "    new $Request$, new $Response$));\n");
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
	
		
			
				|  | @@ -702,7 +714,8 @@ void PrintSourceService(grpc::protobuf::io::Printer *printer,
 | 
	
		
			
				|  |  |    printer->Print("}\n\n");
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -grpc::string GetSourceServices(const grpc::protobuf::FileDescriptor *file) {
 | 
	
		
			
				|  |  | +grpc::string GetSourceServices(const grpc::protobuf::FileDescriptor *file,
 | 
	
		
			
				|  |  | +                               const Parameters ¶ms) {
 | 
	
		
			
				|  |  |    grpc::string output;
 | 
	
		
			
				|  |  |    grpc::protobuf::io::StringOutputStream output_stream(&output);
 | 
	
		
			
				|  |  |    grpc::protobuf::io::Printer printer(&output_stream, '$');
 | 
	
	
		
			
				|  | @@ -713,6 +726,13 @@ grpc::string GetSourceServices(const grpc::protobuf::FileDescriptor *file) {
 | 
	
		
			
				|  |  |    if (!file->package().empty()) {
 | 
	
		
			
				|  |  |      vars["Package"].append(".");
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | +  if (!params.services_namespace.empty()) {
 | 
	
		
			
				|  |  | +    vars["ns"] = params.services_namespace + "::";
 | 
	
		
			
				|  |  | +    vars["prefix"] = params.services_namespace;
 | 
	
		
			
				|  |  | +  } else {
 | 
	
		
			
				|  |  | +    vars["ns"] = "";
 | 
	
		
			
				|  |  | +    vars["prefix"] = "";
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    for (int i = 0; i < file->service_count(); ++i) {
 | 
	
		
			
				|  |  |      PrintSourceService(&printer, file->service(i), &vars);
 |