Skip to content

Commit 6505814

Browse files
authored
impl(rest): leverage EmptyResponseType to remove ambiguities in Post and Delete template functions (#14390)
1 parent 73ba66c commit 6505814

14 files changed

Lines changed: 108 additions & 28 deletions

File tree

generator/integration_tests/golden/v1/internal/golden_kitchen_sink_rest_stub.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ Status DefaultGoldenKitchenSinkRestStub::DoNothing(
101101
google::cloud::rest_internal::RestContext& rest_context,
102102
Options const& options,
103103
google::protobuf::Empty const& request) {
104-
return rest_internal::Post(
104+
return rest_internal::Post<google::cloud::rest_internal::EmptyResponseType>(
105105
*service_, rest_context, request, false,
106106
absl::StrCat("/", rest_internal::DetermineApiVersion("v1", options), "/doNothing"));
107107
}
@@ -110,7 +110,7 @@ Status DefaultGoldenKitchenSinkRestStub::ExplicitRouting1(
110110
google::cloud::rest_internal::RestContext& rest_context,
111111
Options const& options,
112112
google::test::admin::database::v1::ExplicitRoutingRequest const& request) {
113-
return rest_internal::Post(
113+
return rest_internal::Post<google::cloud::rest_internal::EmptyResponseType>(
114114
*service_, rest_context, request, false,
115115
absl::StrCat("/", rest_internal::DetermineApiVersion("v1", options), "/", request.table_name(), ":explicitRouting1"),
116116
rest_internal::TrimEmptyQueryParameters({std::make_pair("app_profile_id", request.app_profile_id()),
@@ -121,7 +121,7 @@ Status DefaultGoldenKitchenSinkRestStub::ExplicitRouting2(
121121
google::cloud::rest_internal::RestContext& rest_context,
122122
Options const& options,
123123
google::test::admin::database::v1::ExplicitRoutingRequest const& request) {
124-
return rest_internal::Post(
124+
return rest_internal::Post<google::cloud::rest_internal::EmptyResponseType>(
125125
*service_, rest_context, request, false,
126126
absl::StrCat("/", rest_internal::DetermineApiVersion("v1", options), "/", request.table_name(), ":explicitRouting2"),
127127
rest_internal::TrimEmptyQueryParameters({std::make_pair("app_profile_id", request.app_profile_id()),

generator/integration_tests/golden/v1/internal/golden_rest_only_rest_stub.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ Status DefaultGoldenRestOnlyRestStub::Noop(
4545
google::cloud::rest_internal::RestContext& rest_context,
4646
Options const& options,
4747
google::protobuf::Empty const& request) {
48-
return rest_internal::Post(
48+
return rest_internal::Post<google::cloud::rest_internal::EmptyResponseType>(
4949
*service_, rest_context, request, false,
5050
absl::StrCat("/", rest_internal::DetermineApiVersion("v1", options), "/noop"));
5151
}

generator/integration_tests/golden/v1/internal/golden_thing_admin_rest_stub.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ Status DefaultGoldenThingAdminRestStub::DropDatabase(
146146
google::cloud::rest_internal::RestContext& rest_context,
147147
Options const& options,
148148
google::test::admin::database::v1::DropDatabaseRequest const& request) {
149-
return rest_internal::Delete(
149+
return rest_internal::Delete<google::cloud::rest_internal::EmptyResponseType>(
150150
*service_, rest_context, request, false,
151151
absl::StrCat("/", rest_internal::DetermineApiVersion("v1", options), "/", request.database()));
152152
}
@@ -252,7 +252,7 @@ Status DefaultGoldenThingAdminRestStub::DeleteBackup(
252252
google::cloud::rest_internal::RestContext& rest_context,
253253
Options const& options,
254254
google::test::admin::database::v1::DeleteBackupRequest const& request) {
255-
return rest_internal::Delete(
255+
return rest_internal::Delete<google::cloud::rest_internal::EmptyResponseType>(
256256
*service_, rest_context, request, false,
257257
absl::StrCat("/", rest_internal::DetermineApiVersion("v1", options), "/", request.name()));
258258
}

generator/internal/stub_rest_generator.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ Status Default$stub_rest_class_name$::$method_name$(
389389
google::cloud::rest_internal::RestContext& rest_context,
390390
Options const& options,
391391
$request_type$ const& request) {
392-
return rest_internal::$method_http_verb$(
392+
return rest_internal::$method_http_verb$<google::cloud::rest_internal::EmptyResponseType>(
393393
*service_, rest_context, $request_resource$, $preserve_proto_field_names_in_json$,
394394
$method_rest_path$$method_http_query_parameters$);
395395
}

google/cloud/compute/global_operations/v1/internal/global_operations_rest_stub.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ Status DefaultGlobalOperationsRestStub::DeleteOperation(
7171
Options const& options,
7272
google::cloud::cpp::compute::global_operations::v1::
7373
DeleteOperationRequest const& request) {
74-
return rest_internal::Delete(
74+
return rest_internal::Delete<google::cloud::rest_internal::EmptyResponseType>(
7575
*service_, rest_context, request, false,
7676
absl::StrCat("/", "compute", "/",
7777
rest_internal::DetermineApiVersion("v1", options), "/",

google/cloud/compute/global_organization_operations/v1/internal/global_organization_operations_rest_stub.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ Status DefaultGlobalOrganizationOperationsRestStub::DeleteOperation(
4747
Options const& options,
4848
google::cloud::cpp::compute::global_organization_operations::v1::
4949
DeleteOperationRequest const& request) {
50-
return rest_internal::Delete(
50+
return rest_internal::Delete<google::cloud::rest_internal::EmptyResponseType>(
5151
*service_, rest_context, request, false,
5252
absl::StrCat("/", "compute", "/",
5353
rest_internal::DetermineApiVersion("v1", options), "/",

google/cloud/compute/instances/v1/internal/instances_rest_stub.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -876,7 +876,7 @@ Status DefaultInstancesRestStub::SendDiagnosticInterrupt(
876876
Options const& options,
877877
google::cloud::cpp::compute::instances::v1::
878878
SendDiagnosticInterruptRequest const& request) {
879-
return rest_internal::Post(
879+
return rest_internal::Post<google::cloud::rest_internal::EmptyResponseType>(
880880
*service_, rest_context, request, false,
881881
absl::StrCat("/", "compute", "/",
882882
rest_internal::DetermineApiVersion("v1", options), "/",

google/cloud/compute/region_operations/v1/internal/region_operations_rest_stub.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ Status DefaultRegionOperationsRestStub::DeleteOperation(
4545
Options const& options,
4646
google::cloud::cpp::compute::region_operations::v1::
4747
DeleteOperationRequest const& request) {
48-
return rest_internal::Delete(
48+
return rest_internal::Delete<google::cloud::rest_internal::EmptyResponseType>(
4949
*service_, rest_context, request, false,
5050
absl::StrCat("/", "compute", "/",
5151
rest_internal::DetermineApiVersion("v1", options), "/",

google/cloud/compute/zone_operations/v1/internal/zone_operations_rest_stub.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ Status DefaultZoneOperationsRestStub::DeleteOperation(
4444
Options const& options,
4545
google::cloud::cpp::compute::zone_operations::v1::
4646
DeleteOperationRequest const& request) {
47-
return rest_internal::Delete(
47+
return rest_internal::Delete<google::cloud::rest_internal::EmptyResponseType>(
4848
*service_, rest_context, request, false,
4949
absl::StrCat("/", "compute", "/",
5050
rest_internal::DetermineApiVersion("v1", options), "/",

google/cloud/internal/rest_stub_helpers.h

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ namespace cloud {
3030
namespace rest_internal {
3131
GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN
3232

33+
struct EmptyResponseType {};
34+
3335
std::vector<std::pair<std::string, std::string>> TrimEmptyQueryParameters(
3436
std::vector<std::pair<std::string, std::string>> query_params);
3537

@@ -58,7 +60,9 @@ StatusOr<Response> RestResponseToProto(RestResponse&& rest_response) {
5860
return destination;
5961
}
6062

61-
template <typename Request>
63+
template <
64+
typename Response, typename Request,
65+
std::enable_if_t<std::is_same<Response, EmptyResponseType>::value, int> = 0>
6266
Status Delete(
6367
rest_internal::RestClient& client, rest_internal::RestContext& rest_context,
6468
Request const&, bool, std::string path,
@@ -70,7 +74,9 @@ Status Delete(
7074
return AsStatus(std::move(**response));
7175
}
7276

73-
template <typename Response, typename Request>
77+
template <typename Response, typename Request,
78+
std::enable_if_t<!std::is_same<Response, EmptyResponseType>::value,
79+
int> = 0>
7480
StatusOr<Response> Delete(
7581
rest_internal::RestClient& client, rest_internal::RestContext& rest_context,
7682
Request const&, bool, std::string path,
@@ -111,7 +117,9 @@ StatusOr<Response> Patch(
111117
return RestResponseToProto<Response>(std::move(**response));
112118
}
113119

114-
template <typename Response, typename Request>
120+
template <typename Response, typename Request,
121+
std::enable_if_t<!std::is_same<Response, EmptyResponseType>::value,
122+
int> = 0>
115123
StatusOr<Response> Post(
116124
rest_internal::RestClient& client, rest_internal::RestContext& rest_context,
117125
Request const& request, bool preserve_proto_field_names, std::string path,
@@ -128,7 +136,9 @@ StatusOr<Response> Post(
128136
return RestResponseToProto<Response>(std::move(**response));
129137
}
130138

131-
template <typename Request>
139+
template <
140+
typename Response, typename Request,
141+
std::enable_if_t<std::is_same<Response, EmptyResponseType>::value, int> = 0>
132142
Status Post(
133143
rest_internal::RestClient& client, rest_internal::RestContext& rest_context,
134144
Request const& request, bool preserve_proto_field_names, std::string path,

0 commit comments

Comments
 (0)