Skip to content

Commit e840198

Browse files
authored
impl(generator): add preserve proto field name option (#12731)
1 parent 885b2b3 commit e840198

File tree

116 files changed

+1109
-857
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

116 files changed

+1109
-857
lines changed

generator/generator_config.proto

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,13 @@ message ServiceConfiguration {
154154
DISCOVERY_DOCUMENT = 1;
155155
}
156156
ProtoFileSource proto_file_source = 24;
157+
158+
// Some REST services expect JSON fields names in snake_case, while most other
159+
// REST services expect JSON in camelCase. When true this flag instructs the
160+
// generator to emit field names as they are defined in the proto files,
161+
// which by style convention is typically snake_case. When false, the field
162+
// names will be converted to camelCase.
163+
bool preserve_proto_field_names_in_json = 25;
157164
}
158165

159166
message DiscoveryDocumentDefinedProduct {

generator/generator_config.textproto

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2988,6 +2988,7 @@ service {
29882988
experimental: true
29892989
generate_rest_transport: true
29902990
generate_grpc_transport: false
2991+
preserve_proto_field_names_in_json: true
29912992
}
29922993
29932994
service {
@@ -2998,6 +2999,7 @@ service {
29982999
experimental: true
29993000
generate_rest_transport: true
30003001
generate_grpc_transport: false
3002+
preserve_proto_field_names_in_json: true
30013003
}
30023004
30033005
service {
@@ -3008,6 +3010,7 @@ service {
30083010
experimental: true
30093011
generate_rest_transport: true
30103012
generate_grpc_transport: false
3013+
preserve_proto_field_names_in_json: true
30113014
}
30123015
30133016
service {
@@ -3018,6 +3021,7 @@ service {
30183021
experimental: true
30193022
generate_rest_transport: true
30203023
generate_grpc_transport: false
3024+
preserve_proto_field_names_in_json: true
30213025
}
30223026
30233027
service {
@@ -3028,6 +3032,7 @@ service {
30283032
experimental: true
30293033
generate_rest_transport: true
30303034
generate_grpc_transport: false
3035+
preserve_proto_field_names_in_json: true
30313036
}
30323037
30333038
service {
@@ -3038,6 +3043,7 @@ service {
30383043
experimental: true
30393044
generate_rest_transport: true
30403045
generate_grpc_transport: false
3046+
preserve_proto_field_names_in_json: true
30413047
}
30423048
30433049
service {
@@ -3048,6 +3054,7 @@ service {
30483054
experimental: true
30493055
generate_rest_transport: true
30503056
generate_grpc_transport: false
3057+
preserve_proto_field_names_in_json: true
30513058
}
30523059
30533060
service {
@@ -3058,6 +3065,7 @@ service {
30583065
experimental: true
30593066
generate_rest_transport: true
30603067
generate_grpc_transport: false
3068+
preserve_proto_field_names_in_json: true
30613069
}
30623070
30633071
service {
@@ -3068,6 +3076,7 @@ service {
30683076
experimental: true
30693077
generate_rest_transport: true
30703078
generate_grpc_transport: false
3079+
preserve_proto_field_names_in_json: true
30713080
}
30723081
30733082
# Storage

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ DefaultGoldenKitchenSinkRestStub::GenerateAccessToken(
4545
google::cloud::rest_internal::RestContext& rest_context,
4646
google::test::admin::database::v1::GenerateAccessTokenRequest const& request) {
4747
return rest_internal::Post<google::test::admin::database::v1::GenerateAccessTokenResponse>(
48-
*service_, rest_context, request,
48+
*service_, rest_context, request, false,
4949
absl::StrCat("/", "v1", "/", request.name(), ":generateAccessToken"));
5050
}
5151

@@ -54,7 +54,7 @@ DefaultGoldenKitchenSinkRestStub::GenerateIdToken(
5454
google::cloud::rest_internal::RestContext& rest_context,
5555
google::test::admin::database::v1::GenerateIdTokenRequest const& request) {
5656
return rest_internal::Post<google::test::admin::database::v1::GenerateIdTokenResponse>(
57-
*service_, rest_context, request,
57+
*service_, rest_context, request, false,
5858
"/v1/token:generate",
5959
rest_internal::TrimEmptyQueryParameters({std::make_pair("name", request.name()),
6060
std::make_pair("audience", request.audience()),
@@ -66,7 +66,7 @@ DefaultGoldenKitchenSinkRestStub::WriteLogEntries(
6666
google::cloud::rest_internal::RestContext& rest_context,
6767
google::test::admin::database::v1::WriteLogEntriesRequest const& request) {
6868
return rest_internal::Post<google::test::admin::database::v1::WriteLogEntriesResponse>(
69-
*service_, rest_context, request,
69+
*service_, rest_context, request, false,
7070
"/v2/entries:write",
7171
rest_internal::TrimEmptyQueryParameters({std::make_pair("log_name", request.log_name())}));
7272
}
@@ -76,7 +76,7 @@ DefaultGoldenKitchenSinkRestStub::ListLogs(
7676
google::cloud::rest_internal::RestContext& rest_context,
7777
google::test::admin::database::v1::ListLogsRequest const& request) {
7878
return rest_internal::Get<google::test::admin::database::v1::ListLogsResponse>(
79-
*service_, rest_context, request,
79+
*service_, rest_context, request, false,
8080
absl::StrCat("/", "v2", "/", request.parent(), "/", "logs"),
8181
rest_internal::TrimEmptyQueryParameters({std::make_pair("page_size", std::to_string(request.page_size())),
8282
std::make_pair("page_token", request.page_token())}));
@@ -87,23 +87,23 @@ DefaultGoldenKitchenSinkRestStub::ListServiceAccountKeys(
8787
google::cloud::rest_internal::RestContext& rest_context,
8888
google::test::admin::database::v1::ListServiceAccountKeysRequest const& request) {
8989
return rest_internal::Get<google::test::admin::database::v1::ListServiceAccountKeysResponse>(
90-
*service_, rest_context, request,
90+
*service_, rest_context, request, false,
9191
absl::StrCat("/", "v1", "/", request.name(), "/", "keys"));
9292
}
9393

9494
Status DefaultGoldenKitchenSinkRestStub::DoNothing(
9595
google::cloud::rest_internal::RestContext& rest_context,
9696
google::protobuf::Empty const& request) {
9797
return rest_internal::Post(
98-
*service_, rest_context, request,
98+
*service_, rest_context, request, false,
9999
"/v1/doNothing");
100100
}
101101

102102
Status DefaultGoldenKitchenSinkRestStub::ExplicitRouting1(
103103
google::cloud::rest_internal::RestContext& rest_context,
104104
google::test::admin::database::v1::ExplicitRoutingRequest const& request) {
105105
return rest_internal::Post(
106-
*service_, rest_context, request,
106+
*service_, rest_context, request, false,
107107
absl::StrCat("/", "v1", "/", request.table_name(), ":explicitRouting1"),
108108
rest_internal::TrimEmptyQueryParameters({std::make_pair("app_profile_id", request.app_profile_id()),
109109
std::make_pair("no_regex_needed", request.no_regex_needed())}));
@@ -113,7 +113,7 @@ Status DefaultGoldenKitchenSinkRestStub::ExplicitRouting2(
113113
google::cloud::rest_internal::RestContext& rest_context,
114114
google::test::admin::database::v1::ExplicitRoutingRequest const& request) {
115115
return rest_internal::Post(
116-
*service_, rest_context, request,
116+
*service_, rest_context, request, false,
117117
absl::StrCat("/", "v1", "/", request.table_name(), ":explicitRouting2"),
118118
rest_internal::TrimEmptyQueryParameters({std::make_pair("app_profile_id", request.app_profile_id()),
119119
std::make_pair("no_regex_needed", request.no_regex_needed())}));

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
@@ -44,7 +44,7 @@ Status DefaultGoldenRestOnlyRestStub::Noop(
4444
google::cloud::rest_internal::RestContext& rest_context,
4545
google::protobuf::Empty const& request) {
4646
return rest_internal::Post(
47-
*service_, rest_context, request,
47+
*service_, rest_context, request, false,
4848
"/v1/noop");
4949
}
5050

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

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ DefaultGoldenThingAdminRestStub::ListDatabases(
5050
google::cloud::rest_internal::RestContext& rest_context,
5151
google::test::admin::database::v1::ListDatabasesRequest const& request) {
5252
return rest_internal::Get<google::test::admin::database::v1::ListDatabasesResponse>(
53-
*service_, rest_context, request,
53+
*service_, rest_context, request, false,
5454
absl::StrCat("/", "v1", "/", request.parent(), "/", "databases"),
5555
rest_internal::TrimEmptyQueryParameters({std::make_pair("page_size", std::to_string(request.page_size())),
5656
std::make_pair("page_token", request.page_token())}));
@@ -65,7 +65,7 @@ DefaultGoldenThingAdminRestStub::AsyncCreateDatabase(
6565
future<StatusOr<google::longrunning::Operation>> f = p.get_future();
6666
std::thread t{[](auto p, auto service, auto request, auto rest_context) {
6767
p.set_value(rest_internal::Post<google::longrunning::Operation>(
68-
*service, *rest_context, request,
68+
*service, *rest_context, request, false,
6969
absl::StrCat("/", "v1", "/", request.parent(), "/", "databases"),
7070
rest_internal::TrimEmptyQueryParameters({std::make_pair("create_statement", request.create_statement())})));
7171
}, std::move(p), service_, request, std::move(rest_context)};
@@ -82,7 +82,7 @@ DefaultGoldenThingAdminRestStub::GetDatabase(
8282
google::cloud::rest_internal::RestContext& rest_context,
8383
google::test::admin::database::v1::GetDatabaseRequest const& request) {
8484
return rest_internal::Get<google::test::admin::database::v1::Database>(
85-
*service_, rest_context, request,
85+
*service_, rest_context, request, false,
8686
absl::StrCat("/", "v1", "/", request.name()));
8787
}
8888

@@ -95,7 +95,7 @@ DefaultGoldenThingAdminRestStub::AsyncUpdateDatabaseDdl(
9595
future<StatusOr<google::longrunning::Operation>> f = p.get_future();
9696
std::thread t{[](auto p, auto service, auto request, auto rest_context) {
9797
p.set_value(rest_internal::Patch<google::longrunning::Operation>(
98-
*service, *rest_context, request,
98+
*service, *rest_context, request, false,
9999
absl::StrCat("/", "v1", "/", request.database(), "/", "ddl"),
100100
rest_internal::TrimEmptyQueryParameters({std::make_pair("operation_id", request.operation_id())})));
101101
}, std::move(p), service_, request, std::move(rest_context)};
@@ -111,7 +111,7 @@ Status DefaultGoldenThingAdminRestStub::DropDatabase(
111111
google::cloud::rest_internal::RestContext& rest_context,
112112
google::test::admin::database::v1::DropDatabaseRequest const& request) {
113113
return rest_internal::Delete(
114-
*service_, rest_context, request,
114+
*service_, rest_context, request, false,
115115
absl::StrCat("/", "v1", "/", request.database()));
116116
}
117117

@@ -120,7 +120,7 @@ DefaultGoldenThingAdminRestStub::GetDatabaseDdl(
120120
google::cloud::rest_internal::RestContext& rest_context,
121121
google::test::admin::database::v1::GetDatabaseDdlRequest const& request) {
122122
return rest_internal::Get<google::test::admin::database::v1::GetDatabaseDdlResponse>(
123-
*service_, rest_context, request,
123+
*service_, rest_context, request, false,
124124
absl::StrCat("/", "v1", "/", request.database(), "/", "ddl"));
125125
}
126126

@@ -129,7 +129,7 @@ DefaultGoldenThingAdminRestStub::SetIamPolicy(
129129
google::cloud::rest_internal::RestContext& rest_context,
130130
google::iam::v1::SetIamPolicyRequest const& request) {
131131
return rest_internal::Post<google::iam::v1::Policy>(
132-
*service_, rest_context, request,
132+
*service_, rest_context, request, false,
133133
absl::StrCat("/", "v1", "/", request.resource(), ":setIamPolicy"));
134134
}
135135

@@ -138,7 +138,7 @@ DefaultGoldenThingAdminRestStub::GetIamPolicy(
138138
google::cloud::rest_internal::RestContext& rest_context,
139139
google::iam::v1::GetIamPolicyRequest const& request) {
140140
return rest_internal::Post<google::iam::v1::Policy>(
141-
*service_, rest_context, request,
141+
*service_, rest_context, request, false,
142142
absl::StrCat("/", "v1", "/", request.resource(), ":getIamPolicy"));
143143
}
144144

@@ -147,7 +147,7 @@ DefaultGoldenThingAdminRestStub::TestIamPermissions(
147147
google::cloud::rest_internal::RestContext& rest_context,
148148
google::iam::v1::TestIamPermissionsRequest const& request) {
149149
return rest_internal::Post<google::iam::v1::TestIamPermissionsResponse>(
150-
*service_, rest_context, request,
150+
*service_, rest_context, request, false,
151151
absl::StrCat("/", "v1", "/", request.resource(), ":testIamPermissions"));
152152
}
153153

@@ -160,7 +160,7 @@ DefaultGoldenThingAdminRestStub::AsyncCreateBackup(
160160
future<StatusOr<google::longrunning::Operation>> f = p.get_future();
161161
std::thread t{[](auto p, auto service, auto request, auto rest_context) {
162162
p.set_value(rest_internal::Post<google::longrunning::Operation>(
163-
*service, *rest_context, request.backup(),
163+
*service, *rest_context, request.backup(), false,
164164
absl::StrCat("/", "v1", "/", request.parent(), "/", "backups"),
165165
rest_internal::TrimEmptyQueryParameters({std::make_pair("backup_id", request.backup_id())})));
166166
}, std::move(p), service_, request, std::move(rest_context)};
@@ -177,7 +177,7 @@ DefaultGoldenThingAdminRestStub::GetBackup(
177177
google::cloud::rest_internal::RestContext& rest_context,
178178
google::test::admin::database::v1::GetBackupRequest const& request) {
179179
return rest_internal::Get<google::test::admin::database::v1::Backup>(
180-
*service_, rest_context, request,
180+
*service_, rest_context, request, false,
181181
absl::StrCat("/", "v1", "/", request.name()));
182182
}
183183

@@ -186,15 +186,15 @@ DefaultGoldenThingAdminRestStub::UpdateBackup(
186186
google::cloud::rest_internal::RestContext& rest_context,
187187
google::test::admin::database::v1::UpdateBackupRequest const& request) {
188188
return rest_internal::Patch<google::test::admin::database::v1::Backup>(
189-
*service_, rest_context, request.backup(),
189+
*service_, rest_context, request.backup(), false,
190190
absl::StrCat("/", "v1", "/", request.backup().name()));
191191
}
192192

193193
Status DefaultGoldenThingAdminRestStub::DeleteBackup(
194194
google::cloud::rest_internal::RestContext& rest_context,
195195
google::test::admin::database::v1::DeleteBackupRequest const& request) {
196196
return rest_internal::Delete(
197-
*service_, rest_context, request,
197+
*service_, rest_context, request, false,
198198
absl::StrCat("/", "v1", "/", request.name()));
199199
}
200200

@@ -203,7 +203,7 @@ DefaultGoldenThingAdminRestStub::ListBackups(
203203
google::cloud::rest_internal::RestContext& rest_context,
204204
google::test::admin::database::v1::ListBackupsRequest const& request) {
205205
return rest_internal::Get<google::test::admin::database::v1::ListBackupsResponse>(
206-
*service_, rest_context, request,
206+
*service_, rest_context, request, false,
207207
absl::StrCat("/", "v1", "/", request.parent(), "/", "backups"),
208208
rest_internal::TrimEmptyQueryParameters({std::make_pair("filter", request.filter()),
209209
std::make_pair("page_size", std::to_string(request.page_size())),
@@ -219,7 +219,7 @@ DefaultGoldenThingAdminRestStub::AsyncRestoreDatabase(
219219
future<StatusOr<google::longrunning::Operation>> f = p.get_future();
220220
std::thread t{[](auto p, auto service, auto request, auto rest_context) {
221221
p.set_value(rest_internal::Post<google::longrunning::Operation>(
222-
*service, *rest_context, request,
222+
*service, *rest_context, request, false,
223223
absl::StrCat("/", "v1", "/", request.parent(), "/", "databases", ":restore"),
224224
rest_internal::TrimEmptyQueryParameters({std::make_pair("database_id", request.database_id()),
225225
std::make_pair("backup", request.backup())})));
@@ -237,7 +237,7 @@ DefaultGoldenThingAdminRestStub::ListDatabaseOperations(
237237
google::cloud::rest_internal::RestContext& rest_context,
238238
google::test::admin::database::v1::ListDatabaseOperationsRequest const& request) {
239239
return rest_internal::Get<google::test::admin::database::v1::ListDatabaseOperationsResponse>(
240-
*service_, rest_context, request,
240+
*service_, rest_context, request, false,
241241
absl::StrCat("/", "v1", "/", request.parent(), "/", "databaseOperations"),
242242
rest_internal::TrimEmptyQueryParameters({std::make_pair("filter", request.filter()),
243243
std::make_pair("page_size", std::to_string(request.page_size())),
@@ -249,7 +249,7 @@ DefaultGoldenThingAdminRestStub::ListBackupOperations(
249249
google::cloud::rest_internal::RestContext& rest_context,
250250
google::test::admin::database::v1::ListBackupOperationsRequest const& request) {
251251
return rest_internal::Get<google::test::admin::database::v1::ListBackupOperationsResponse>(
252-
*service_, rest_context, request,
252+
*service_, rest_context, request, false,
253253
absl::StrCat("/", "v1", "/", request.parent(), "/", "backupOperations"),
254254
rest_internal::TrimEmptyQueryParameters({std::make_pair("filter", request.filter()),
255255
std::make_pair("page_size", std::to_string(request.page_size())),
@@ -265,7 +265,7 @@ DefaultGoldenThingAdminRestStub::AsyncGetDatabase(
265265
future<StatusOr<google::test::admin::database::v1::Database>> f = p.get_future();
266266
std::thread t{[](auto p, auto service, auto request, auto rest_context) {
267267
p.set_value(rest_internal::Get<google::test::admin::database::v1::Database>(
268-
*service, *rest_context, request,
268+
*service, *rest_context, request, false,
269269
absl::StrCat("/", "v1", "/", request.name())));
270270
}, std::move(p), service_, request, std::move(rest_context)};
271271
return f.then([t = std::move(t), cq](auto f) mutable {
@@ -285,7 +285,7 @@ DefaultGoldenThingAdminRestStub::AsyncDropDatabase(
285285
future<StatusOr<google::protobuf::Empty>> f = p.get_future();
286286
std::thread t{[](auto p, auto service, auto request, auto rest_context) {
287287
p.set_value(rest_internal::Delete<google::protobuf::Empty>(
288-
*service, *rest_context, request,
288+
*service, *rest_context, request, false,
289289
absl::StrCat("/", "v1", "/", request.database())));
290290
}, std::move(p), service_, request, std::move(rest_context)};
291291
return f.then([t = std::move(t), cq](auto f) mutable {
@@ -305,7 +305,7 @@ DefaultGoldenThingAdminRestStub::AsyncGetOperation(
305305
future<StatusOr<google::longrunning::Operation>> f = p.get_future();
306306
std::thread t{[](auto p, auto operations, auto request, auto rest_context) {
307307
p.set_value(rest_internal::Get<google::longrunning::Operation>(
308-
*operations, *rest_context, request,
308+
*operations, *rest_context, request, false,
309309
absl::StrCat("/v1/", request.name())));
310310
}, std::move(p), operations_, request, std::move(rest_context)};
311311
return f.then([t = std::move(t), cq](auto f) mutable {
@@ -325,7 +325,7 @@ DefaultGoldenThingAdminRestStub::AsyncCancelOperation(
325325
future<StatusOr<google::protobuf::Empty>> f = p.get_future();
326326
std::thread t{[](auto p, auto operations, auto request, auto rest_context) {
327327
p.set_value(rest_internal::Post<google::protobuf::Empty>(
328-
*operations, *rest_context, request,
328+
*operations, *rest_context, request, false,
329329
absl::StrCat("/v1/", request.name(), ":cancel")));
330330
}, std::move(p), operations_, request, std::move(rest_context)};
331331
return f.then([t = std::move(t), cq](auto f) mutable {

0 commit comments

Comments
 (0)