Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Side by Side Diff: generated/googleapis/lib/servicemanagement/v1.dart

Issue 2226653002: Api-roll 40: 2016-08-08 (Closed) Base URL: git@github.com:dart-lang/googleapis.git@master
Patch Set: Addressed review comments Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // This is a generated file (see the discoveryapis_generator project).
2
3 library googleapis.servicemanagement.v1;
4
5 import 'dart:core' as core;
6 import 'dart:async' as async;
7 import 'dart:convert' as convert;
8
9 import 'package:_discoveryapis_commons/_discoveryapis_commons.dart' as commons;
10 import 'package:http/http.dart' as http_1;
11
12 export 'package:_discoveryapis_commons/_discoveryapis_commons.dart' show
13 ApiRequestError, DetailedApiRequestError;
14
15 const core.String USER_AGENT = 'dart-api-client servicemanagement/v1';
16
17 /** The service management API for Google Cloud Platform */
18 class ServicemanagementApi {
19 /** View and manage your data across Google Cloud Platform services */
20 static const CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platf orm";
21
22 /** View your data across Google Cloud Platform services */
23 static const CloudPlatformReadOnlyScope = "https://www.googleapis.com/auth/clo ud-platform.read-only";
24
25 /** Manage your Google API service configuration */
26 static const ServiceManagementScope = "https://www.googleapis.com/auth/service .management";
27
28 /** View your Google API service configuration */
29 static const ServiceManagementReadonlyScope = "https://www.googleapis.com/auth /service.management.readonly";
30
31
32 final commons.ApiRequester _requester;
33
34 OperationsResourceApi get operations => new OperationsResourceApi(_requester);
35 ServicesResourceApi get services => new ServicesResourceApi(_requester);
36
37 ServicemanagementApi(http_1.Client client, {core.String rootUrl: "https://serv icemanagement.googleapis.com/", core.String servicePath: ""}) :
38 _requester = new commons.ApiRequester(client, rootUrl, servicePath, USER_A GENT);
39 }
40
41
42 class OperationsResourceApi {
43 final commons.ApiRequester _requester;
44
45 OperationsResourceApi(commons.ApiRequester client) :
46 _requester = client;
47
48 /**
49 * Gets the latest state of a long-running operation. Clients can use this
50 * method to poll the operation result at intervals as recommended by the API
51 * service.
52 *
53 * Request parameters:
54 *
55 * [name] - The name of the operation resource.
56 * Value must have pattern "^operations/.*$".
57 *
58 * Completes with a [Operation].
59 *
60 * Completes with a [commons.ApiRequestError] if the API endpoint returned an
61 * error.
62 *
63 * If the used [http_1.Client] completes with an error when making a REST
64 * call, this method will complete with the same error.
65 */
66 async.Future<Operation> get(core.String name) {
67 var _url = null;
68 var _queryParams = new core.Map();
69 var _uploadMedia = null;
70 var _uploadOptions = null;
71 var _downloadOptions = commons.DownloadOptions.Metadata;
72 var _body = null;
73
74 if (name == null) {
75 throw new core.ArgumentError("Parameter name is required.");
76 }
77
78 _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
79
80 var _response = _requester.request(_url,
81 "GET",
82 body: _body,
83 queryParams: _queryParams,
84 uploadOptions: _uploadOptions,
85 uploadMedia: _uploadMedia,
86 downloadOptions: _downloadOptions);
87 return _response.then((data) => new Operation.fromJson(data));
88 }
89
90 }
91
92
93 class ServicesResourceApi {
94 final commons.ApiRequester _requester;
95
96 ServicesConfigsResourceApi get configs => new ServicesConfigsResourceApi(_requ ester);
97 ServicesRolloutsResourceApi get rollouts => new ServicesRolloutsResourceApi(_r equester);
98
99 ServicesResourceApi(commons.ApiRequester client) :
100 _requester = client;
101
102 /**
103 * Creates a new managed service.
104 *
105 * Operation<response: ManagedService>
106 *
107 * [request] - The metadata request object.
108 *
109 * Request parameters:
110 *
111 * Completes with a [Operation].
112 *
113 * Completes with a [commons.ApiRequestError] if the API endpoint returned an
114 * error.
115 *
116 * If the used [http_1.Client] completes with an error when making a REST
117 * call, this method will complete with the same error.
118 */
119 async.Future<Operation> create(ManagedService request) {
120 var _url = null;
121 var _queryParams = new core.Map();
122 var _uploadMedia = null;
123 var _uploadOptions = null;
124 var _downloadOptions = commons.DownloadOptions.Metadata;
125 var _body = null;
126
127 if (request != null) {
128 _body = convert.JSON.encode((request).toJson());
129 }
130
131 _url = 'v1/services';
132
133 var _response = _requester.request(_url,
134 "POST",
135 body: _body,
136 queryParams: _queryParams,
137 uploadOptions: _uploadOptions,
138 uploadMedia: _uploadMedia,
139 downloadOptions: _downloadOptions);
140 return _response.then((data) => new Operation.fromJson(data));
141 }
142
143 /**
144 * Deletes a managed service. This method will change the serivce in the
145 * `Soft-Delete` state for 30 days. Within this period, service producers may
146 * call UndeleteService to restore the service.
147 * After 30 days, the service will be permanently deleted.
148 *
149 * Operation<response: google.protobuf.Empty>
150 *
151 * Request parameters:
152 *
153 * [serviceName] - The name of the service. See the `ServiceManager` overview
154 * for naming
155 * requirements. For example: `example.googleapis.com`.
156 *
157 * Completes with a [Operation].
158 *
159 * Completes with a [commons.ApiRequestError] if the API endpoint returned an
160 * error.
161 *
162 * If the used [http_1.Client] completes with an error when making a REST
163 * call, this method will complete with the same error.
164 */
165 async.Future<Operation> delete(core.String serviceName) {
166 var _url = null;
167 var _queryParams = new core.Map();
168 var _uploadMedia = null;
169 var _uploadOptions = null;
170 var _downloadOptions = commons.DownloadOptions.Metadata;
171 var _body = null;
172
173 if (serviceName == null) {
174 throw new core.ArgumentError("Parameter serviceName is required.");
175 }
176
177 _url = 'v1/services/' + commons.Escaper.ecapeVariable('$serviceName');
178
179 var _response = _requester.request(_url,
180 "DELETE",
181 body: _body,
182 queryParams: _queryParams,
183 uploadOptions: _uploadOptions,
184 uploadMedia: _uploadMedia,
185 downloadOptions: _downloadOptions);
186 return _response.then((data) => new Operation.fromJson(data));
187 }
188
189 /**
190 * Disable a managed service for a project.
191 *
192 * Operation<response: DisableServiceResponse>
193 *
194 * [request] - The metadata request object.
195 *
196 * Request parameters:
197 *
198 * [serviceName] - Name of the service to disable. Specifying an unknown
199 * service name
200 * will cause the request to fail.
201 *
202 * Completes with a [Operation].
203 *
204 * Completes with a [commons.ApiRequestError] if the API endpoint returned an
205 * error.
206 *
207 * If the used [http_1.Client] completes with an error when making a REST
208 * call, this method will complete with the same error.
209 */
210 async.Future<Operation> disable(DisableServiceRequest request, core.String ser viceName) {
211 var _url = null;
212 var _queryParams = new core.Map();
213 var _uploadMedia = null;
214 var _uploadOptions = null;
215 var _downloadOptions = commons.DownloadOptions.Metadata;
216 var _body = null;
217
218 if (request != null) {
219 _body = convert.JSON.encode((request).toJson());
220 }
221 if (serviceName == null) {
222 throw new core.ArgumentError("Parameter serviceName is required.");
223 }
224
225 _url = 'v1/services/' + commons.Escaper.ecapeVariable('$serviceName') + ':di sable';
226
227 var _response = _requester.request(_url,
228 "POST",
229 body: _body,
230 queryParams: _queryParams,
231 uploadOptions: _uploadOptions,
232 uploadMedia: _uploadMedia,
233 downloadOptions: _downloadOptions);
234 return _response.then((data) => new Operation.fromJson(data));
235 }
236
237 /**
238 * Enable a managed service for a project with default setting.
239 *
240 * Operation<response: EnableServiceResponse>
241 *
242 * [request] - The metadata request object.
243 *
244 * Request parameters:
245 *
246 * [serviceName] - Name of the service to enable. Specifying an unknown
247 * service name will
248 * cause the request to fail.
249 *
250 * Completes with a [Operation].
251 *
252 * Completes with a [commons.ApiRequestError] if the API endpoint returned an
253 * error.
254 *
255 * If the used [http_1.Client] completes with an error when making a REST
256 * call, this method will complete with the same error.
257 */
258 async.Future<Operation> enable(EnableServiceRequest request, core.String servi ceName) {
259 var _url = null;
260 var _queryParams = new core.Map();
261 var _uploadMedia = null;
262 var _uploadOptions = null;
263 var _downloadOptions = commons.DownloadOptions.Metadata;
264 var _body = null;
265
266 if (request != null) {
267 _body = convert.JSON.encode((request).toJson());
268 }
269 if (serviceName == null) {
270 throw new core.ArgumentError("Parameter serviceName is required.");
271 }
272
273 _url = 'v1/services/' + commons.Escaper.ecapeVariable('$serviceName') + ':en able';
274
275 var _response = _requester.request(_url,
276 "POST",
277 body: _body,
278 queryParams: _queryParams,
279 uploadOptions: _uploadOptions,
280 uploadMedia: _uploadMedia,
281 downloadOptions: _downloadOptions);
282 return _response.then((data) => new Operation.fromJson(data));
283 }
284
285 /**
286 * Generates and returns a report (errors, warnings and changes from
287 * existing configurations) associated with
288 * GenerateConfigReportRequest.new_value
289 *
290 * If GenerateConfigReportRequest.old_value is specified,
291 * GenerateConfigReportRequest will contain a single ChangeReport based on the
292 * comparison between GenerateConfigReportRequest.new_value and
293 * GenerateConfigReportRequest.old_value.
294 * If GenerateConfigReportRequest.old_value is not specified, this method
295 * will compare GenerateConfigReportRequest.new_value with the last pushed
296 * service configuration.
297 *
298 * [request] - The metadata request object.
299 *
300 * Request parameters:
301 *
302 * Completes with a [GenerateConfigReportResponse].
303 *
304 * Completes with a [commons.ApiRequestError] if the API endpoint returned an
305 * error.
306 *
307 * If the used [http_1.Client] completes with an error when making a REST
308 * call, this method will complete with the same error.
309 */
310 async.Future<GenerateConfigReportResponse> generateConfigReport(GenerateConfig ReportRequest request) {
311 var _url = null;
312 var _queryParams = new core.Map();
313 var _uploadMedia = null;
314 var _uploadOptions = null;
315 var _downloadOptions = commons.DownloadOptions.Metadata;
316 var _body = null;
317
318 if (request != null) {
319 _body = convert.JSON.encode((request).toJson());
320 }
321
322 _url = 'v1/services:generateConfigReport';
323
324 var _response = _requester.request(_url,
325 "POST",
326 body: _body,
327 queryParams: _queryParams,
328 uploadOptions: _uploadOptions,
329 uploadMedia: _uploadMedia,
330 downloadOptions: _downloadOptions);
331 return _response.then((data) => new GenerateConfigReportResponse.fromJson(da ta));
332 }
333
334 /**
335 * Gets a managed service.
336 *
337 * Request parameters:
338 *
339 * [serviceName] - The name of the service. See the `ServiceManager` overview
340 * for naming
341 * requirements. For example: `example.googleapis.com`.
342 *
343 * Completes with a [ManagedService].
344 *
345 * Completes with a [commons.ApiRequestError] if the API endpoint returned an
346 * error.
347 *
348 * If the used [http_1.Client] completes with an error when making a REST
349 * call, this method will complete with the same error.
350 */
351 async.Future<ManagedService> get(core.String serviceName) {
352 var _url = null;
353 var _queryParams = new core.Map();
354 var _uploadMedia = null;
355 var _uploadOptions = null;
356 var _downloadOptions = commons.DownloadOptions.Metadata;
357 var _body = null;
358
359 if (serviceName == null) {
360 throw new core.ArgumentError("Parameter serviceName is required.");
361 }
362
363 _url = 'v1/services/' + commons.Escaper.ecapeVariable('$serviceName');
364
365 var _response = _requester.request(_url,
366 "GET",
367 body: _body,
368 queryParams: _queryParams,
369 uploadOptions: _uploadOptions,
370 uploadMedia: _uploadMedia,
371 downloadOptions: _downloadOptions);
372 return _response.then((data) => new ManagedService.fromJson(data));
373 }
374
375 /**
376 * Gets a service configuration (version) for a managed service.
377 *
378 * Request parameters:
379 *
380 * [serviceName] - The name of the service. See the `ServiceManager` overview
381 * for naming
382 * requirements. For example: `example.googleapis.com`.
383 *
384 * [configId] - null
385 *
386 * Completes with a [Service].
387 *
388 * Completes with a [commons.ApiRequestError] if the API endpoint returned an
389 * error.
390 *
391 * If the used [http_1.Client] completes with an error when making a REST
392 * call, this method will complete with the same error.
393 */
394 async.Future<Service> getConfig(core.String serviceName, {core.String configId }) {
395 var _url = null;
396 var _queryParams = new core.Map();
397 var _uploadMedia = null;
398 var _uploadOptions = null;
399 var _downloadOptions = commons.DownloadOptions.Metadata;
400 var _body = null;
401
402 if (serviceName == null) {
403 throw new core.ArgumentError("Parameter serviceName is required.");
404 }
405 if (configId != null) {
406 _queryParams["configId"] = [configId];
407 }
408
409 _url = 'v1/services/' + commons.Escaper.ecapeVariable('$serviceName') + '/co nfig';
410
411 var _response = _requester.request(_url,
412 "GET",
413 body: _body,
414 queryParams: _queryParams,
415 uploadOptions: _uploadOptions,
416 uploadMedia: _uploadMedia,
417 downloadOptions: _downloadOptions);
418 return _response.then((data) => new Service.fromJson(data));
419 }
420
421 /**
422 * Gets the access control policy for a resource.
423 * Returns an empty policy if the resource exists and does not have a policy
424 * set.
425 *
426 * [request] - The metadata request object.
427 *
428 * Request parameters:
429 *
430 * [resource] - REQUIRED: The resource for which the policy is being
431 * requested.
432 * `resource` is usually specified as a path. For example, a Project
433 * resource is specified as `projects/{project}`.
434 * Value must have pattern "^services/[^/]*$".
435 *
436 * Completes with a [Policy].
437 *
438 * Completes with a [commons.ApiRequestError] if the API endpoint returned an
439 * error.
440 *
441 * If the used [http_1.Client] completes with an error when making a REST
442 * call, this method will complete with the same error.
443 */
444 async.Future<Policy> getIamPolicy(GetIamPolicyRequest request, core.String res ource) {
445 var _url = null;
446 var _queryParams = new core.Map();
447 var _uploadMedia = null;
448 var _uploadOptions = null;
449 var _downloadOptions = commons.DownloadOptions.Metadata;
450 var _body = null;
451
452 if (request != null) {
453 _body = convert.JSON.encode((request).toJson());
454 }
455 if (resource == null) {
456 throw new core.ArgumentError("Parameter resource is required.");
457 }
458
459 _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$resource') + ':getIam Policy';
460
461 var _response = _requester.request(_url,
462 "POST",
463 body: _body,
464 queryParams: _queryParams,
465 uploadOptions: _uploadOptions,
466 uploadMedia: _uploadMedia,
467 downloadOptions: _downloadOptions);
468 return _response.then((data) => new Policy.fromJson(data));
469 }
470
471 /**
472 * Lists all managed services.
473 *
474 * Request parameters:
475 *
476 * [pageSize] - Requested size of the next page of data.
477 *
478 * [producerProjectId] - Include services produced by the specified project.
479 *
480 * [pageToken] - Token identifying which result to start with; returned by a
481 * previous list
482 * call.
483 *
484 * Completes with a [ListServicesResponse].
485 *
486 * Completes with a [commons.ApiRequestError] if the API endpoint returned an
487 * error.
488 *
489 * If the used [http_1.Client] completes with an error when making a REST
490 * call, this method will complete with the same error.
491 */
492 async.Future<ListServicesResponse> list({core.int pageSize, core.String produc erProjectId, core.String pageToken}) {
493 var _url = null;
494 var _queryParams = new core.Map();
495 var _uploadMedia = null;
496 var _uploadOptions = null;
497 var _downloadOptions = commons.DownloadOptions.Metadata;
498 var _body = null;
499
500 if (pageSize != null) {
501 _queryParams["pageSize"] = ["${pageSize}"];
502 }
503 if (producerProjectId != null) {
504 _queryParams["producerProjectId"] = [producerProjectId];
505 }
506 if (pageToken != null) {
507 _queryParams["pageToken"] = [pageToken];
508 }
509
510 _url = 'v1/services';
511
512 var _response = _requester.request(_url,
513 "GET",
514 body: _body,
515 queryParams: _queryParams,
516 uploadOptions: _uploadOptions,
517 uploadMedia: _uploadMedia,
518 downloadOptions: _downloadOptions);
519 return _response.then((data) => new ListServicesResponse.fromJson(data));
520 }
521
522 /**
523 * Sets the access control policy on the specified resource. Replaces any
524 * existing policy.
525 *
526 * [request] - The metadata request object.
527 *
528 * Request parameters:
529 *
530 * [resource] - REQUIRED: The resource for which the policy is being
531 * specified.
532 * `resource` is usually specified as a path. For example, a Project
533 * resource is specified as `projects/{project}`.
534 * Value must have pattern "^services/[^/]*$".
535 *
536 * Completes with a [Policy].
537 *
538 * Completes with a [commons.ApiRequestError] if the API endpoint returned an
539 * error.
540 *
541 * If the used [http_1.Client] completes with an error when making a REST
542 * call, this method will complete with the same error.
543 */
544 async.Future<Policy> setIamPolicy(SetIamPolicyRequest request, core.String res ource) {
545 var _url = null;
546 var _queryParams = new core.Map();
547 var _uploadMedia = null;
548 var _uploadOptions = null;
549 var _downloadOptions = commons.DownloadOptions.Metadata;
550 var _body = null;
551
552 if (request != null) {
553 _body = convert.JSON.encode((request).toJson());
554 }
555 if (resource == null) {
556 throw new core.ArgumentError("Parameter resource is required.");
557 }
558
559 _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$resource') + ':setIam Policy';
560
561 var _response = _requester.request(_url,
562 "POST",
563 body: _body,
564 queryParams: _queryParams,
565 uploadOptions: _uploadOptions,
566 uploadMedia: _uploadMedia,
567 downloadOptions: _downloadOptions);
568 return _response.then((data) => new Policy.fromJson(data));
569 }
570
571 /**
572 * Returns permissions that a caller has on the specified resource.
573 *
574 * [request] - The metadata request object.
575 *
576 * Request parameters:
577 *
578 * [resource] - REQUIRED: The resource for which the policy detail is being
579 * requested.
580 * `resource` is usually specified as a path. For example, a Project
581 * resource is specified as `projects/{project}`.
582 * Value must have pattern "^services/[^/]*$".
583 *
584 * Completes with a [TestIamPermissionsResponse].
585 *
586 * Completes with a [commons.ApiRequestError] if the API endpoint returned an
587 * error.
588 *
589 * If the used [http_1.Client] completes with an error when making a REST
590 * call, this method will complete with the same error.
591 */
592 async.Future<TestIamPermissionsResponse> testIamPermissions(TestIamPermissions Request request, core.String resource) {
593 var _url = null;
594 var _queryParams = new core.Map();
595 var _uploadMedia = null;
596 var _uploadOptions = null;
597 var _downloadOptions = commons.DownloadOptions.Metadata;
598 var _body = null;
599
600 if (request != null) {
601 _body = convert.JSON.encode((request).toJson());
602 }
603 if (resource == null) {
604 throw new core.ArgumentError("Parameter resource is required.");
605 }
606
607 _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$resource') + ':testIa mPermissions';
608
609 var _response = _requester.request(_url,
610 "POST",
611 body: _body,
612 queryParams: _queryParams,
613 uploadOptions: _uploadOptions,
614 uploadMedia: _uploadMedia,
615 downloadOptions: _downloadOptions);
616 return _response.then((data) => new TestIamPermissionsResponse.fromJson(data ));
617 }
618
619 /**
620 * Revives a previously deleted managed service. The method restores the
621 * service using the configuration at the time the service was deleted.
622 * The target service must exist and must have been deleted within the
623 * last 30 days.
624 *
625 * Operation<response: UndeleteServiceResponse>
626 *
627 * Request parameters:
628 *
629 * [serviceName] - The name of the service. See the `ServiceManager` overview
630 * for naming
631 * requirements. For example: `example.googleapis.com`.
632 *
633 * Completes with a [Operation].
634 *
635 * Completes with a [commons.ApiRequestError] if the API endpoint returned an
636 * error.
637 *
638 * If the used [http_1.Client] completes with an error when making a REST
639 * call, this method will complete with the same error.
640 */
641 async.Future<Operation> undelete(core.String serviceName) {
642 var _url = null;
643 var _queryParams = new core.Map();
644 var _uploadMedia = null;
645 var _uploadOptions = null;
646 var _downloadOptions = commons.DownloadOptions.Metadata;
647 var _body = null;
648
649 if (serviceName == null) {
650 throw new core.ArgumentError("Parameter serviceName is required.");
651 }
652
653 _url = 'v1/services/' + commons.Escaper.ecapeVariable('$serviceName') + ':un delete';
654
655 var _response = _requester.request(_url,
656 "POST",
657 body: _body,
658 queryParams: _queryParams,
659 uploadOptions: _uploadOptions,
660 uploadMedia: _uploadMedia,
661 downloadOptions: _downloadOptions);
662 return _response.then((data) => new Operation.fromJson(data));
663 }
664
665 }
666
667
668 class ServicesConfigsResourceApi {
669 final commons.ApiRequester _requester;
670
671 ServicesConfigsResourceApi(commons.ApiRequester client) :
672 _requester = client;
673
674 /**
675 * Creates a new service configuration (version) for a managed service.
676 * This method only stores the service configuration. To roll out the service
677 * configuration to backend systems please call
678 * CreateServiceRollout.
679 *
680 * [request] - The metadata request object.
681 *
682 * Request parameters:
683 *
684 * [serviceName] - The name of the service. See the `ServiceManager` overview
685 * for naming
686 * requirements. For example: `example.googleapis.com`.
687 *
688 * Completes with a [Service].
689 *
690 * Completes with a [commons.ApiRequestError] if the API endpoint returned an
691 * error.
692 *
693 * If the used [http_1.Client] completes with an error when making a REST
694 * call, this method will complete with the same error.
695 */
696 async.Future<Service> create(Service request, core.String serviceName) {
697 var _url = null;
698 var _queryParams = new core.Map();
699 var _uploadMedia = null;
700 var _uploadOptions = null;
701 var _downloadOptions = commons.DownloadOptions.Metadata;
702 var _body = null;
703
704 if (request != null) {
705 _body = convert.JSON.encode((request).toJson());
706 }
707 if (serviceName == null) {
708 throw new core.ArgumentError("Parameter serviceName is required.");
709 }
710
711 _url = 'v1/services/' + commons.Escaper.ecapeVariable('$serviceName') + '/co nfigs';
712
713 var _response = _requester.request(_url,
714 "POST",
715 body: _body,
716 queryParams: _queryParams,
717 uploadOptions: _uploadOptions,
718 uploadMedia: _uploadMedia,
719 downloadOptions: _downloadOptions);
720 return _response.then((data) => new Service.fromJson(data));
721 }
722
723 /**
724 * Gets a service configuration (version) for a managed service.
725 *
726 * Request parameters:
727 *
728 * [serviceName] - The name of the service. See the `ServiceManager` overview
729 * for naming
730 * requirements. For example: `example.googleapis.com`.
731 *
732 * [configId] - null
733 *
734 * Completes with a [Service].
735 *
736 * Completes with a [commons.ApiRequestError] if the API endpoint returned an
737 * error.
738 *
739 * If the used [http_1.Client] completes with an error when making a REST
740 * call, this method will complete with the same error.
741 */
742 async.Future<Service> get(core.String serviceName, core.String configId) {
743 var _url = null;
744 var _queryParams = new core.Map();
745 var _uploadMedia = null;
746 var _uploadOptions = null;
747 var _downloadOptions = commons.DownloadOptions.Metadata;
748 var _body = null;
749
750 if (serviceName == null) {
751 throw new core.ArgumentError("Parameter serviceName is required.");
752 }
753 if (configId == null) {
754 throw new core.ArgumentError("Parameter configId is required.");
755 }
756
757 _url = 'v1/services/' + commons.Escaper.ecapeVariable('$serviceName') + '/co nfigs/' + commons.Escaper.ecapeVariable('$configId');
758
759 var _response = _requester.request(_url,
760 "GET",
761 body: _body,
762 queryParams: _queryParams,
763 uploadOptions: _uploadOptions,
764 uploadMedia: _uploadMedia,
765 downloadOptions: _downloadOptions);
766 return _response.then((data) => new Service.fromJson(data));
767 }
768
769 /**
770 * Lists the history of the service configuration for a managed service,
771 * from the newest to the oldest.
772 *
773 * Request parameters:
774 *
775 * [serviceName] - The name of the service. See the `ServiceManager` overview
776 * for naming
777 * requirements. For example: `example.googleapis.com`.
778 *
779 * [pageSize] - The max number of items to include in the response list.
780 *
781 * [pageToken] - The token of the page to retrieve.
782 *
783 * Completes with a [ListServiceConfigsResponse].
784 *
785 * Completes with a [commons.ApiRequestError] if the API endpoint returned an
786 * error.
787 *
788 * If the used [http_1.Client] completes with an error when making a REST
789 * call, this method will complete with the same error.
790 */
791 async.Future<ListServiceConfigsResponse> list(core.String serviceName, {core.i nt pageSize, core.String pageToken}) {
792 var _url = null;
793 var _queryParams = new core.Map();
794 var _uploadMedia = null;
795 var _uploadOptions = null;
796 var _downloadOptions = commons.DownloadOptions.Metadata;
797 var _body = null;
798
799 if (serviceName == null) {
800 throw new core.ArgumentError("Parameter serviceName is required.");
801 }
802 if (pageSize != null) {
803 _queryParams["pageSize"] = ["${pageSize}"];
804 }
805 if (pageToken != null) {
806 _queryParams["pageToken"] = [pageToken];
807 }
808
809 _url = 'v1/services/' + commons.Escaper.ecapeVariable('$serviceName') + '/co nfigs';
810
811 var _response = _requester.request(_url,
812 "GET",
813 body: _body,
814 queryParams: _queryParams,
815 uploadOptions: _uploadOptions,
816 uploadMedia: _uploadMedia,
817 downloadOptions: _downloadOptions);
818 return _response.then((data) => new ListServiceConfigsResponse.fromJson(data ));
819 }
820
821 /**
822 * Creates a new service configuration (version) for a managed service based
823 * on
824 * user-supplied configuration source files (for example: OpenAPI
825 * Specification). This method stores the source configurations as well as the
826 * generated service configuration. To rollout the service configuration to
827 * other services,
828 * please call CreateServiceRollout.
829 *
830 * Operation<response: SubmitConfigSourceResponse>
831 *
832 * [request] - The metadata request object.
833 *
834 * Request parameters:
835 *
836 * [serviceName] - The name of the service. See the `ServiceManager` overview
837 * for naming
838 * requirements. For example: `example.googleapis.com`.
839 *
840 * Completes with a [Operation].
841 *
842 * Completes with a [commons.ApiRequestError] if the API endpoint returned an
843 * error.
844 *
845 * If the used [http_1.Client] completes with an error when making a REST
846 * call, this method will complete with the same error.
847 */
848 async.Future<Operation> submit(SubmitConfigSourceRequest request, core.String serviceName) {
849 var _url = null;
850 var _queryParams = new core.Map();
851 var _uploadMedia = null;
852 var _uploadOptions = null;
853 var _downloadOptions = commons.DownloadOptions.Metadata;
854 var _body = null;
855
856 if (request != null) {
857 _body = convert.JSON.encode((request).toJson());
858 }
859 if (serviceName == null) {
860 throw new core.ArgumentError("Parameter serviceName is required.");
861 }
862
863 _url = 'v1/services/' + commons.Escaper.ecapeVariable('$serviceName') + '/co nfigs:submit';
864
865 var _response = _requester.request(_url,
866 "POST",
867 body: _body,
868 queryParams: _queryParams,
869 uploadOptions: _uploadOptions,
870 uploadMedia: _uploadMedia,
871 downloadOptions: _downloadOptions);
872 return _response.then((data) => new Operation.fromJson(data));
873 }
874
875 }
876
877
878 class ServicesRolloutsResourceApi {
879 final commons.ApiRequester _requester;
880
881 ServicesRolloutsResourceApi(commons.ApiRequester client) :
882 _requester = client;
883
884 /**
885 * Creates a new service configuration rollout. Based on rollout, the
886 * Google Service Management will roll out the service configurations to
887 * different backend services. For example, the logging configuration will be
888 * pushed to Google Cloud Logging.
889 *
890 * Operation<response: Rollout>
891 *
892 * [request] - The metadata request object.
893 *
894 * Request parameters:
895 *
896 * [serviceName] - The name of the service. See the `ServiceManager` overview
897 * for naming
898 * requirements. For example: `example.googleapis.com`.
899 *
900 * Completes with a [Operation].
901 *
902 * Completes with a [commons.ApiRequestError] if the API endpoint returned an
903 * error.
904 *
905 * If the used [http_1.Client] completes with an error when making a REST
906 * call, this method will complete with the same error.
907 */
908 async.Future<Operation> create(Rollout request, core.String serviceName) {
909 var _url = null;
910 var _queryParams = new core.Map();
911 var _uploadMedia = null;
912 var _uploadOptions = null;
913 var _downloadOptions = commons.DownloadOptions.Metadata;
914 var _body = null;
915
916 if (request != null) {
917 _body = convert.JSON.encode((request).toJson());
918 }
919 if (serviceName == null) {
920 throw new core.ArgumentError("Parameter serviceName is required.");
921 }
922
923 _url = 'v1/services/' + commons.Escaper.ecapeVariable('$serviceName') + '/ro llouts';
924
925 var _response = _requester.request(_url,
926 "POST",
927 body: _body,
928 queryParams: _queryParams,
929 uploadOptions: _uploadOptions,
930 uploadMedia: _uploadMedia,
931 downloadOptions: _downloadOptions);
932 return _response.then((data) => new Operation.fromJson(data));
933 }
934
935 /**
936 * Gets a service configuration rollout.
937 *
938 * Request parameters:
939 *
940 * [serviceName] - The name of the service. See the `ServiceManager` overview
941 * for naming
942 * requirements. For example: `example.googleapis.com`.
943 *
944 * [rolloutId] - The id of the rollout resource.
945 *
946 * Completes with a [Rollout].
947 *
948 * Completes with a [commons.ApiRequestError] if the API endpoint returned an
949 * error.
950 *
951 * If the used [http_1.Client] completes with an error when making a REST
952 * call, this method will complete with the same error.
953 */
954 async.Future<Rollout> get(core.String serviceName, core.String rolloutId) {
955 var _url = null;
956 var _queryParams = new core.Map();
957 var _uploadMedia = null;
958 var _uploadOptions = null;
959 var _downloadOptions = commons.DownloadOptions.Metadata;
960 var _body = null;
961
962 if (serviceName == null) {
963 throw new core.ArgumentError("Parameter serviceName is required.");
964 }
965 if (rolloutId == null) {
966 throw new core.ArgumentError("Parameter rolloutId is required.");
967 }
968
969 _url = 'v1/services/' + commons.Escaper.ecapeVariable('$serviceName') + '/ro llouts/' + commons.Escaper.ecapeVariable('$rolloutId');
970
971 var _response = _requester.request(_url,
972 "GET",
973 body: _body,
974 queryParams: _queryParams,
975 uploadOptions: _uploadOptions,
976 uploadMedia: _uploadMedia,
977 downloadOptions: _downloadOptions);
978 return _response.then((data) => new Rollout.fromJson(data));
979 }
980
981 /**
982 * Lists the history of the service configuration rollouts for a managed
983 * service, from the newest to the oldest.
984 *
985 * Request parameters:
986 *
987 * [serviceName] - The name of the service. See the `ServiceManager` overview
988 * for naming
989 * requirements. For example: `example.googleapis.com`.
990 *
991 * [pageSize] - The max number of items to include in the response list.
992 *
993 * [pageToken] - The token of the page to retrieve.
994 *
995 * Completes with a [ListServiceRolloutsResponse].
996 *
997 * Completes with a [commons.ApiRequestError] if the API endpoint returned an
998 * error.
999 *
1000 * If the used [http_1.Client] completes with an error when making a REST
1001 * call, this method will complete with the same error.
1002 */
1003 async.Future<ListServiceRolloutsResponse> list(core.String serviceName, {core. int pageSize, core.String pageToken}) {
1004 var _url = null;
1005 var _queryParams = new core.Map();
1006 var _uploadMedia = null;
1007 var _uploadOptions = null;
1008 var _downloadOptions = commons.DownloadOptions.Metadata;
1009 var _body = null;
1010
1011 if (serviceName == null) {
1012 throw new core.ArgumentError("Parameter serviceName is required.");
1013 }
1014 if (pageSize != null) {
1015 _queryParams["pageSize"] = ["${pageSize}"];
1016 }
1017 if (pageToken != null) {
1018 _queryParams["pageToken"] = [pageToken];
1019 }
1020
1021 _url = 'v1/services/' + commons.Escaper.ecapeVariable('$serviceName') + '/ro llouts';
1022
1023 var _response = _requester.request(_url,
1024 "GET",
1025 body: _body,
1026 queryParams: _queryParams,
1027 uploadOptions: _uploadOptions,
1028 uploadMedia: _uploadMedia,
1029 downloadOptions: _downloadOptions);
1030 return _response.then((data) => new ListServiceRolloutsResponse.fromJson(dat a));
1031 }
1032
1033 }
1034
1035
1036
1037 /**
1038 * Generated advice about this change, used for providing more
1039 * information about how a change will affect the existing service.
1040 */
1041 class Advice {
1042 /**
1043 * Useful description for why this advice was applied and what actions should
1044 * be taken to mitigate any implied risks.
1045 */
1046 core.String description;
1047
1048 Advice();
1049
1050 Advice.fromJson(core.Map _json) {
1051 if (_json.containsKey("description")) {
1052 description = _json["description"];
1053 }
1054 }
1055
1056 core.Map toJson() {
1057 var _json = new core.Map();
1058 if (description != null) {
1059 _json["description"] = description;
1060 }
1061 return _json;
1062 }
1063 }
1064
1065 /** Api is a light-weight descriptor for a protocol buffer service. */
1066 class Api {
1067 /** The methods of this api, in unspecified order. */
1068 core.List<Method> methods;
1069 /** Included APIs. See Mixin. */
1070 core.List<Mixin> mixins;
1071 /**
1072 * The fully qualified name of this api, including package name
1073 * followed by the api's simple name.
1074 */
1075 core.String name;
1076 /** Any metadata attached to the API. */
1077 core.List<Option> options;
1078 /**
1079 * Source context for the protocol buffer service represented by this
1080 * message.
1081 */
1082 SourceContext sourceContext;
1083 /**
1084 * The source syntax of the service.
1085 * Possible string values are:
1086 * - "SYNTAX_PROTO2" : Syntax `proto2`.
1087 * - "SYNTAX_PROTO3" : Syntax `proto3`.
1088 */
1089 core.String syntax;
1090 /**
1091 * A version string for this api. If specified, must have the form
1092 * `major-version.minor-version`, as in `1.10`. If the minor version
1093 * is omitted, it defaults to zero. If the entire version field is
1094 * empty, the major version is derived from the package name, as
1095 * outlined below. If the field is not empty, the version in the
1096 * package name will be verified to be consistent with what is
1097 * provided here.
1098 *
1099 * The versioning schema uses [semantic
1100 * versioning](http://semver.org) where the major version number
1101 * indicates a breaking change and the minor version an additive,
1102 * non-breaking change. Both version numbers are signals to users
1103 * what to expect from different versions, and should be carefully
1104 * chosen based on the product plan.
1105 *
1106 * The major version is also reflected in the package name of the
1107 * API, which must end in `v<major-version>`, as in
1108 * `google.feature.v1`. For major versions 0 and 1, the suffix can
1109 * be omitted. Zero major versions must only be used for
1110 * experimental, none-GA apis.
1111 */
1112 core.String version;
1113
1114 Api();
1115
1116 Api.fromJson(core.Map _json) {
1117 if (_json.containsKey("methods")) {
1118 methods = _json["methods"].map((value) => new Method.fromJson(value)).toLi st();
1119 }
1120 if (_json.containsKey("mixins")) {
1121 mixins = _json["mixins"].map((value) => new Mixin.fromJson(value)).toList( );
1122 }
1123 if (_json.containsKey("name")) {
1124 name = _json["name"];
1125 }
1126 if (_json.containsKey("options")) {
1127 options = _json["options"].map((value) => new Option.fromJson(value)).toLi st();
1128 }
1129 if (_json.containsKey("sourceContext")) {
1130 sourceContext = new SourceContext.fromJson(_json["sourceContext"]);
1131 }
1132 if (_json.containsKey("syntax")) {
1133 syntax = _json["syntax"];
1134 }
1135 if (_json.containsKey("version")) {
1136 version = _json["version"];
1137 }
1138 }
1139
1140 core.Map toJson() {
1141 var _json = new core.Map();
1142 if (methods != null) {
1143 _json["methods"] = methods.map((value) => (value).toJson()).toList();
1144 }
1145 if (mixins != null) {
1146 _json["mixins"] = mixins.map((value) => (value).toJson()).toList();
1147 }
1148 if (name != null) {
1149 _json["name"] = name;
1150 }
1151 if (options != null) {
1152 _json["options"] = options.map((value) => (value).toJson()).toList();
1153 }
1154 if (sourceContext != null) {
1155 _json["sourceContext"] = (sourceContext).toJson();
1156 }
1157 if (syntax != null) {
1158 _json["syntax"] = syntax;
1159 }
1160 if (version != null) {
1161 _json["version"] = version;
1162 }
1163 return _json;
1164 }
1165 }
1166
1167 /**
1168 * Enables "data access" audit logging for a service and specifies a list
1169 * of members that are log-exempted.
1170 */
1171 class AuditConfig {
1172 /**
1173 * Specifies the identities that are exempted from "data access" audit
1174 * logging for the `service` specified above.
1175 * Follows the same format of Binding.members.
1176 */
1177 core.List<core.String> exemptedMembers;
1178 /**
1179 * Specifies a service that will be enabled for "data access" audit
1180 * logging.
1181 * For example, `resourcemanager`, `storage`, `compute`.
1182 * `allServices` is a special value that covers all services.
1183 */
1184 core.String service;
1185
1186 AuditConfig();
1187
1188 AuditConfig.fromJson(core.Map _json) {
1189 if (_json.containsKey("exemptedMembers")) {
1190 exemptedMembers = _json["exemptedMembers"];
1191 }
1192 if (_json.containsKey("service")) {
1193 service = _json["service"];
1194 }
1195 }
1196
1197 core.Map toJson() {
1198 var _json = new core.Map();
1199 if (exemptedMembers != null) {
1200 _json["exemptedMembers"] = exemptedMembers;
1201 }
1202 if (service != null) {
1203 _json["service"] = service;
1204 }
1205 return _json;
1206 }
1207 }
1208
1209 /**
1210 * Configuration for an anthentication provider, including support for
1211 * [JSON Web Token
1212 * (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).
1213 */
1214 class AuthProvider {
1215 /**
1216 * The unique identifier of the auth provider. It will be referred to by
1217 * `AuthRequirement.provider_id`.
1218 *
1219 * Example: "bookstore_auth".
1220 */
1221 core.String id;
1222 /**
1223 * Identifies the principal that issued the JWT. See
1224 * https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1. 1
1225 * Usually a URL or an email address.
1226 *
1227 * Example: https://securetoken.google.com
1228 * Example: 1234567-compute@developer.gserviceaccount.com
1229 */
1230 core.String issuer;
1231 /**
1232 * URL of the provider's public key set to validate signature of the JWT. See
1233 * [OpenID
1234 * Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html#Provi derMetadata).
1235 * Optional if the key set document:
1236 * - can be retrieved from
1237 * [OpenID
1238 * Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html
1239 * of the issuer.
1240 * - can be inferred from the email domain of the issuer (e.g. a Google
1241 * service account).
1242 *
1243 * Example: https://www.googleapis.com/oauth2/v1/certs
1244 */
1245 core.String jwksUri;
1246
1247 AuthProvider();
1248
1249 AuthProvider.fromJson(core.Map _json) {
1250 if (_json.containsKey("id")) {
1251 id = _json["id"];
1252 }
1253 if (_json.containsKey("issuer")) {
1254 issuer = _json["issuer"];
1255 }
1256 if (_json.containsKey("jwksUri")) {
1257 jwksUri = _json["jwksUri"];
1258 }
1259 }
1260
1261 core.Map toJson() {
1262 var _json = new core.Map();
1263 if (id != null) {
1264 _json["id"] = id;
1265 }
1266 if (issuer != null) {
1267 _json["issuer"] = issuer;
1268 }
1269 if (jwksUri != null) {
1270 _json["jwksUri"] = jwksUri;
1271 }
1272 return _json;
1273 }
1274 }
1275
1276 /**
1277 * User-defined authentication requirements, including support for
1278 * [JSON Web Token
1279 * (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).
1280 */
1281 class AuthRequirement {
1282 /**
1283 * The list of JWT
1284 * [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32# section-4.1.3).
1285 * that are allowed to access. A JWT containing any of these audiences will
1286 * be accepted. When this setting is absent, only JWTs with audience
1287 * "https://Service_name/API_name"
1288 * will be accepted. For example, if no audiences are in the setting,
1289 * LibraryService API will only accept JWTs with the following audience
1290 * "https://library-example.googleapis.com/google.example.library.v1.LibrarySe rvice".
1291 *
1292 * Example:
1293 *
1294 * audiences: bookstore_android.apps.googleusercontent.com,
1295 * bookstore_web.apps.googleusercontent.com
1296 */
1297 core.String audiences;
1298 /**
1299 * id from authentication provider.
1300 *
1301 * Example:
1302 *
1303 * provider_id: bookstore_auth
1304 */
1305 core.String providerId;
1306
1307 AuthRequirement();
1308
1309 AuthRequirement.fromJson(core.Map _json) {
1310 if (_json.containsKey("audiences")) {
1311 audiences = _json["audiences"];
1312 }
1313 if (_json.containsKey("providerId")) {
1314 providerId = _json["providerId"];
1315 }
1316 }
1317
1318 core.Map toJson() {
1319 var _json = new core.Map();
1320 if (audiences != null) {
1321 _json["audiences"] = audiences;
1322 }
1323 if (providerId != null) {
1324 _json["providerId"] = providerId;
1325 }
1326 return _json;
1327 }
1328 }
1329
1330 /**
1331 * `Authentication` defines the authentication configuration for an API.
1332 *
1333 * Example for an API targeted for external use:
1334 *
1335 * name: calendar.googleapis.com
1336 * authentication:
1337 * rules:
1338 * - selector: "*"
1339 * oauth:
1340 * canonical_scopes: https://www.googleapis.com/auth/calendar
1341 *
1342 * - selector: google.calendar.Delegate
1343 * oauth:
1344 * canonical_scopes: https://www.googleapis.com/auth/calendar.read
1345 */
1346 class Authentication {
1347 /** Defines a set of authentication providers that a service supports. */
1348 core.List<AuthProvider> providers;
1349 /**
1350 * A list of authentication rules that apply to individual API methods.
1351 *
1352 * **NOTE:** All service configuration rules follow "last one wins" order.
1353 */
1354 core.List<AuthenticationRule> rules;
1355
1356 Authentication();
1357
1358 Authentication.fromJson(core.Map _json) {
1359 if (_json.containsKey("providers")) {
1360 providers = _json["providers"].map((value) => new AuthProvider.fromJson(va lue)).toList();
1361 }
1362 if (_json.containsKey("rules")) {
1363 rules = _json["rules"].map((value) => new AuthenticationRule.fromJson(valu e)).toList();
1364 }
1365 }
1366
1367 core.Map toJson() {
1368 var _json = new core.Map();
1369 if (providers != null) {
1370 _json["providers"] = providers.map((value) => (value).toJson()).toList();
1371 }
1372 if (rules != null) {
1373 _json["rules"] = rules.map((value) => (value).toJson()).toList();
1374 }
1375 return _json;
1376 }
1377 }
1378
1379 /**
1380 * Authentication rules for the service.
1381 *
1382 * By default, if a method has any authentication requirements, every request
1383 * must include a valid credential matching one of the requirements.
1384 * It's an error to include more than one kind of credential in a single
1385 * request.
1386 *
1387 * If a method doesn't have any auth requirements, request credentials will be
1388 * ignored.
1389 */
1390 class AuthenticationRule {
1391 /**
1392 * Whether to allow requests without a credential. If quota is enabled, an
1393 * API key is required for such request to pass the quota check.
1394 */
1395 core.bool allowWithoutCredential;
1396 /** The requirements for OAuth credentials. */
1397 OAuthRequirements oauth;
1398 /** Requirements for additional authentication providers. */
1399 core.List<AuthRequirement> requirements;
1400 /**
1401 * Selects the methods to which this rule applies.
1402 *
1403 * Refer to selector for syntax details.
1404 */
1405 core.String selector;
1406
1407 AuthenticationRule();
1408
1409 AuthenticationRule.fromJson(core.Map _json) {
1410 if (_json.containsKey("allowWithoutCredential")) {
1411 allowWithoutCredential = _json["allowWithoutCredential"];
1412 }
1413 if (_json.containsKey("oauth")) {
1414 oauth = new OAuthRequirements.fromJson(_json["oauth"]);
1415 }
1416 if (_json.containsKey("requirements")) {
1417 requirements = _json["requirements"].map((value) => new AuthRequirement.fr omJson(value)).toList();
1418 }
1419 if (_json.containsKey("selector")) {
1420 selector = _json["selector"];
1421 }
1422 }
1423
1424 core.Map toJson() {
1425 var _json = new core.Map();
1426 if (allowWithoutCredential != null) {
1427 _json["allowWithoutCredential"] = allowWithoutCredential;
1428 }
1429 if (oauth != null) {
1430 _json["oauth"] = (oauth).toJson();
1431 }
1432 if (requirements != null) {
1433 _json["requirements"] = requirements.map((value) => (value).toJson()).toLi st();
1434 }
1435 if (selector != null) {
1436 _json["selector"] = selector;
1437 }
1438 return _json;
1439 }
1440 }
1441
1442 /** `Backend` defines the backend configuration for a service. */
1443 class Backend {
1444 /**
1445 * A list of API backend rules that apply to individual API methods.
1446 *
1447 * **NOTE:** All service configuration rules follow "last one wins" order.
1448 */
1449 core.List<BackendRule> rules;
1450
1451 Backend();
1452
1453 Backend.fromJson(core.Map _json) {
1454 if (_json.containsKey("rules")) {
1455 rules = _json["rules"].map((value) => new BackendRule.fromJson(value)).toL ist();
1456 }
1457 }
1458
1459 core.Map toJson() {
1460 var _json = new core.Map();
1461 if (rules != null) {
1462 _json["rules"] = rules.map((value) => (value).toJson()).toList();
1463 }
1464 return _json;
1465 }
1466 }
1467
1468 /** A backend rule provides configuration for an individual API element. */
1469 class BackendRule {
1470 /** The address of the API backend. */
1471 core.String address;
1472 /**
1473 * The number of seconds to wait for a response from a request. The
1474 * default depends on the deployment context.
1475 */
1476 core.double deadline;
1477 /**
1478 * Selects the methods to which this rule applies.
1479 *
1480 * Refer to selector for syntax details.
1481 */
1482 core.String selector;
1483
1484 BackendRule();
1485
1486 BackendRule.fromJson(core.Map _json) {
1487 if (_json.containsKey("address")) {
1488 address = _json["address"];
1489 }
1490 if (_json.containsKey("deadline")) {
1491 deadline = _json["deadline"];
1492 }
1493 if (_json.containsKey("selector")) {
1494 selector = _json["selector"];
1495 }
1496 }
1497
1498 core.Map toJson() {
1499 var _json = new core.Map();
1500 if (address != null) {
1501 _json["address"] = address;
1502 }
1503 if (deadline != null) {
1504 _json["deadline"] = deadline;
1505 }
1506 if (selector != null) {
1507 _json["selector"] = selector;
1508 }
1509 return _json;
1510 }
1511 }
1512
1513 /** Associates `members` with a `role`. */
1514 class Binding {
1515 /**
1516 * Specifies the identities requesting access for a Cloud Platform resource.
1517 * `members` can have the following values:
1518 *
1519 * * `allUsers`: A special identifier that represents anyone who is
1520 * on the internet; with or without a Google account.
1521 *
1522 * * `allAuthenticatedUsers`: A special identifier that represents anyone
1523 * who is authenticated with a Google account or a service account.
1524 *
1525 * * `user:{emailid}`: An email address that represents a specific Google
1526 * account. For example, `alice@gmail.com` or `joe@example.com`.
1527 *
1528 * * `serviceAccount:{emailid}`: An email address that represents a service
1529 * account. For example, `my-other-app@appspot.gserviceaccount.com`.
1530 *
1531 * * `group:{emailid}`: An email address that represents a Google group.
1532 * For example, `admins@example.com`.
1533 *
1534 * * `domain:{domain}`: A Google Apps domain name that represents all the
1535 * users of that domain. For example, `google.com` or `example.com`.
1536 */
1537 core.List<core.String> members;
1538 /**
1539 * Role that is assigned to `members`.
1540 * For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
1541 * Required
1542 */
1543 core.String role;
1544
1545 Binding();
1546
1547 Binding.fromJson(core.Map _json) {
1548 if (_json.containsKey("members")) {
1549 members = _json["members"];
1550 }
1551 if (_json.containsKey("role")) {
1552 role = _json["role"];
1553 }
1554 }
1555
1556 core.Map toJson() {
1557 var _json = new core.Map();
1558 if (members != null) {
1559 _json["members"] = members;
1560 }
1561 if (role != null) {
1562 _json["role"] = role;
1563 }
1564 return _json;
1565 }
1566 }
1567
1568 /**
1569 * Change report associated with a particular service configuration.
1570 *
1571 * It contains a list of ConfigChanges based on the comparison between
1572 * two service configurations.
1573 */
1574 class ChangeReport {
1575 /**
1576 * List of changes between two service configurations.
1577 * The changes will be alphabetically sorted based on the identifier
1578 * of each change.
1579 * A ConfigChange identifier is a dot separated path to the configuration.
1580 * Example: visibility.rules[selector='LibraryService.CreateBook'].restriction
1581 */
1582 core.List<ConfigChange> configChanges;
1583
1584 ChangeReport();
1585
1586 ChangeReport.fromJson(core.Map _json) {
1587 if (_json.containsKey("configChanges")) {
1588 configChanges = _json["configChanges"].map((value) => new ConfigChange.fro mJson(value)).toList();
1589 }
1590 }
1591
1592 core.Map toJson() {
1593 var _json = new core.Map();
1594 if (configChanges != null) {
1595 _json["configChanges"] = configChanges.map((value) => (value).toJson()).to List();
1596 }
1597 return _json;
1598 }
1599 }
1600
1601 /** Write a Cloud Audit log */
1602 class CloudAuditOptions {
1603
1604 CloudAuditOptions();
1605
1606 CloudAuditOptions.fromJson(core.Map _json) {
1607 }
1608
1609 core.Map toJson() {
1610 var _json = new core.Map();
1611 return _json;
1612 }
1613 }
1614
1615 /** A condition to be met. */
1616 class Condition {
1617 /**
1618 * Trusted attributes supplied by the IAM system.
1619 * Possible string values are:
1620 * - "NO_ATTR" : Default non-attribute.
1621 * - "AUTHORITY" : Either principal or (if present) authority
1622 * - "ATTRIBUTION" : selector
1623 * Always the original principal, but making clear
1624 */
1625 core.String iam;
1626 /**
1627 * An operator to apply the subject with.
1628 * Possible string values are:
1629 * - "NO_OP" : Default no-op.
1630 * - "EQUALS" : DEPRECATED. Use IN instead.
1631 * - "NOT_EQUALS" : DEPRECATED. Use NOT_IN instead.
1632 * - "IN" : Set-inclusion check.
1633 * - "NOT_IN" : Set-exclusion check.
1634 * - "DISCHARGED" : Subject is discharged
1635 */
1636 core.String op;
1637 /** Trusted attributes discharged by the service. */
1638 core.String svc;
1639 /**
1640 * Trusted attributes supplied by any service that owns resources and uses
1641 * the IAM system for access control.
1642 * Possible string values are:
1643 * - "NO_ATTR" : Default non-attribute type
1644 * - "REGION" : Region of the resource
1645 * - "SERVICE" : Service name
1646 * - "NAME" : Resource name
1647 * - "IP" : IP address of the caller
1648 */
1649 core.String sys;
1650 /** DEPRECATED. Use 'values' instead. */
1651 core.String value;
1652 /** The objects of the condition. This is mutually exclusive with 'value'. */
1653 core.List<core.String> values;
1654
1655 Condition();
1656
1657 Condition.fromJson(core.Map _json) {
1658 if (_json.containsKey("iam")) {
1659 iam = _json["iam"];
1660 }
1661 if (_json.containsKey("op")) {
1662 op = _json["op"];
1663 }
1664 if (_json.containsKey("svc")) {
1665 svc = _json["svc"];
1666 }
1667 if (_json.containsKey("sys")) {
1668 sys = _json["sys"];
1669 }
1670 if (_json.containsKey("value")) {
1671 value = _json["value"];
1672 }
1673 if (_json.containsKey("values")) {
1674 values = _json["values"];
1675 }
1676 }
1677
1678 core.Map toJson() {
1679 var _json = new core.Map();
1680 if (iam != null) {
1681 _json["iam"] = iam;
1682 }
1683 if (op != null) {
1684 _json["op"] = op;
1685 }
1686 if (svc != null) {
1687 _json["svc"] = svc;
1688 }
1689 if (sys != null) {
1690 _json["sys"] = sys;
1691 }
1692 if (value != null) {
1693 _json["value"] = value;
1694 }
1695 if (values != null) {
1696 _json["values"] = values;
1697 }
1698 return _json;
1699 }
1700 }
1701
1702 /**
1703 * Output generated from semantically comparing two versions of a service
1704 * configuration.
1705 *
1706 * Includes detailed information about a field that have changed with
1707 * applicable advice about potential consequences for the change, such as
1708 * backwards-incompatibility.
1709 */
1710 class ConfigChange {
1711 /**
1712 * Collection of advice provided for this change, useful for determining the
1713 * possible impact of this change.
1714 */
1715 core.List<Advice> advices;
1716 /**
1717 * The type for this change, either ADDED, REMOVED, or MODIFIED.
1718 * Possible string values are:
1719 * - "CHANGE_TYPE_UNSPECIFIED" : No value was provided.
1720 * - "ADDED" : The changed object exists in the 'new' service configuration,
1721 * but not
1722 * in the 'old' service configuration.
1723 * - "REMOVED" : The changed object exists in the 'old' service configuration,
1724 * but not
1725 * in the 'new' service configuration.
1726 * - "MODIFIED" : The changed object exists in both service configurations,
1727 * but its value
1728 * is different.
1729 */
1730 core.String changeType;
1731 /**
1732 * Object hierarchy path to the change, with levels separated by a '.'
1733 * character. For repeated fields, an applicable unique identifier field is
1734 * used for the index (usually selector, name, or id). For maps, the term
1735 * 'key' is used. If the field has no unique identifier, the numeric index
1736 * is used.
1737 * Examples:
1738 * -
1739 * visibility.rules[selector=="google.LibraryService.CreateBook"].restriction
1740 * - quota.metric_rules[selector=="google"].metric_costs[key=="reads"].value
1741 * - logging.producer_destinations[0]
1742 */
1743 core.String element;
1744 /**
1745 * Value of the changed object in the new Service configuration,
1746 * in JSON format. This field will not be populated if ChangeType == REMOVED.
1747 */
1748 core.String newValue;
1749 /**
1750 * Value of the changed object in the old Service configuration,
1751 * in JSON format. This field will not be populated if ChangeType == ADDED.
1752 */
1753 core.String oldValue;
1754
1755 ConfigChange();
1756
1757 ConfigChange.fromJson(core.Map _json) {
1758 if (_json.containsKey("advices")) {
1759 advices = _json["advices"].map((value) => new Advice.fromJson(value)).toLi st();
1760 }
1761 if (_json.containsKey("changeType")) {
1762 changeType = _json["changeType"];
1763 }
1764 if (_json.containsKey("element")) {
1765 element = _json["element"];
1766 }
1767 if (_json.containsKey("newValue")) {
1768 newValue = _json["newValue"];
1769 }
1770 if (_json.containsKey("oldValue")) {
1771 oldValue = _json["oldValue"];
1772 }
1773 }
1774
1775 core.Map toJson() {
1776 var _json = new core.Map();
1777 if (advices != null) {
1778 _json["advices"] = advices.map((value) => (value).toJson()).toList();
1779 }
1780 if (changeType != null) {
1781 _json["changeType"] = changeType;
1782 }
1783 if (element != null) {
1784 _json["element"] = element;
1785 }
1786 if (newValue != null) {
1787 _json["newValue"] = newValue;
1788 }
1789 if (oldValue != null) {
1790 _json["oldValue"] = oldValue;
1791 }
1792 return _json;
1793 }
1794 }
1795
1796 /** Generic specification of a source configuration file */
1797 class ConfigFile {
1798 /** The bytes that constitute the file. */
1799 core.String fileContents;
1800 core.List<core.int> get fileContentsAsBytes {
1801 return convert.BASE64.decode(fileContents);
1802 }
1803
1804 void set fileContentsAsBytes(core.List<core.int> _bytes) {
1805 fileContents = convert.BASE64.encode(_bytes).replaceAll("/", "_").replaceAll ("+", "-");
1806 }
1807 /** The file name of the configuration file (full or relative path). */
1808 core.String filePath;
1809 /**
1810 * The type of configuration file this represents.
1811 * Possible string values are:
1812 * - "FILE_TYPE_UNSPECIFIED" : Unknown file type.
1813 * - "SERVICE_CONFIG_YAML" : YAML-specification of service.
1814 * - "OPEN_API_JSON" : OpenAPI specification, serialized in JSON.
1815 * - "OPEN_API_YAML" : OpenAPI specification, serialized in YAML.
1816 * - "FILE_DESCRIPTOR_SET_PROTO" : FileDescriptorSet, generated by protoc.
1817 *
1818 * To generate, use protoc with imports and source info included.
1819 * For an example test.proto file, the following command would put the value
1820 * in a new file named out.pb.
1821 *
1822 * $protoc --include_imports --include_source_info test.proto -o out.pb
1823 */
1824 core.String fileType;
1825
1826 ConfigFile();
1827
1828 ConfigFile.fromJson(core.Map _json) {
1829 if (_json.containsKey("fileContents")) {
1830 fileContents = _json["fileContents"];
1831 }
1832 if (_json.containsKey("filePath")) {
1833 filePath = _json["filePath"];
1834 }
1835 if (_json.containsKey("fileType")) {
1836 fileType = _json["fileType"];
1837 }
1838 }
1839
1840 core.Map toJson() {
1841 var _json = new core.Map();
1842 if (fileContents != null) {
1843 _json["fileContents"] = fileContents;
1844 }
1845 if (filePath != null) {
1846 _json["filePath"] = filePath;
1847 }
1848 if (fileType != null) {
1849 _json["fileType"] = fileType;
1850 }
1851 return _json;
1852 }
1853 }
1854
1855 /**
1856 * A set of options to cover use of source config within `ServiceManager`
1857 * and related tools.
1858 */
1859 class ConfigOptions {
1860
1861 ConfigOptions();
1862
1863 ConfigOptions.fromJson(core.Map _json) {
1864 }
1865
1866 core.Map toJson() {
1867 var _json = new core.Map();
1868 return _json;
1869 }
1870 }
1871
1872 /** Represents a service configuration with its name and id. */
1873 class ConfigRef {
1874 /**
1875 * Resource name of a service config. It must have the following
1876 * format: "services/{service name}/configs/{config id}".
1877 */
1878 core.String name;
1879
1880 ConfigRef();
1881
1882 ConfigRef.fromJson(core.Map _json) {
1883 if (_json.containsKey("name")) {
1884 name = _json["name"];
1885 }
1886 }
1887
1888 core.Map toJson() {
1889 var _json = new core.Map();
1890 if (name != null) {
1891 _json["name"] = name;
1892 }
1893 return _json;
1894 }
1895 }
1896
1897 /**
1898 * Represents a source file which is used to generate the service configuration
1899 * defined by `google.api.Service`.
1900 */
1901 class ConfigSource {
1902 /**
1903 * Set of source configuration files that are used to generate a service
1904 * configuration (`google.api.Service`).
1905 */
1906 core.List<ConfigFile> files;
1907 /**
1908 * A unique ID for a specific instance of this message, typically assigned
1909 * by the client for tracking purpose. If empty, the server may choose to
1910 * generate one instead.
1911 */
1912 core.String id;
1913 /**
1914 * Options to cover use of source configuration within ServiceManager and
1915 * tools
1916 */
1917 ConfigOptions options;
1918
1919 ConfigSource();
1920
1921 ConfigSource.fromJson(core.Map _json) {
1922 if (_json.containsKey("files")) {
1923 files = _json["files"].map((value) => new ConfigFile.fromJson(value)).toLi st();
1924 }
1925 if (_json.containsKey("id")) {
1926 id = _json["id"];
1927 }
1928 if (_json.containsKey("options")) {
1929 options = new ConfigOptions.fromJson(_json["options"]);
1930 }
1931 }
1932
1933 core.Map toJson() {
1934 var _json = new core.Map();
1935 if (files != null) {
1936 _json["files"] = files.map((value) => (value).toJson()).toList();
1937 }
1938 if (id != null) {
1939 _json["id"] = id;
1940 }
1941 if (options != null) {
1942 _json["options"] = (options).toJson();
1943 }
1944 return _json;
1945 }
1946 }
1947
1948 /**
1949 * `Context` defines which contexts an API requests.
1950 *
1951 * Example:
1952 *
1953 * context:
1954 * rules:
1955 * - selector: "*"
1956 * requested:
1957 * - google.rpc.context.ProjectContext
1958 * - google.rpc.context.OriginContext
1959 *
1960 * The above specifies that all methods in the API request
1961 * `google.rpc.context.ProjectContext` and
1962 * `google.rpc.context.OriginContext`.
1963 *
1964 * Available context types are defined in package
1965 * `google.rpc.context`.
1966 */
1967 class Context {
1968 /**
1969 * A list of RPC context rules that apply to individual API methods.
1970 *
1971 * **NOTE:** All service configuration rules follow "last one wins" order.
1972 */
1973 core.List<ContextRule> rules;
1974
1975 Context();
1976
1977 Context.fromJson(core.Map _json) {
1978 if (_json.containsKey("rules")) {
1979 rules = _json["rules"].map((value) => new ContextRule.fromJson(value)).toL ist();
1980 }
1981 }
1982
1983 core.Map toJson() {
1984 var _json = new core.Map();
1985 if (rules != null) {
1986 _json["rules"] = rules.map((value) => (value).toJson()).toList();
1987 }
1988 return _json;
1989 }
1990 }
1991
1992 /**
1993 * A context rule provides information about the context for an individual API
1994 * element.
1995 */
1996 class ContextRule {
1997 /** A list of full type names of provided contexts. */
1998 core.List<core.String> provided;
1999 /** A list of full type names of requested contexts. */
2000 core.List<core.String> requested;
2001 /**
2002 * Selects the methods to which this rule applies.
2003 *
2004 * Refer to selector for syntax details.
2005 */
2006 core.String selector;
2007
2008 ContextRule();
2009
2010 ContextRule.fromJson(core.Map _json) {
2011 if (_json.containsKey("provided")) {
2012 provided = _json["provided"];
2013 }
2014 if (_json.containsKey("requested")) {
2015 requested = _json["requested"];
2016 }
2017 if (_json.containsKey("selector")) {
2018 selector = _json["selector"];
2019 }
2020 }
2021
2022 core.Map toJson() {
2023 var _json = new core.Map();
2024 if (provided != null) {
2025 _json["provided"] = provided;
2026 }
2027 if (requested != null) {
2028 _json["requested"] = requested;
2029 }
2030 if (selector != null) {
2031 _json["selector"] = selector;
2032 }
2033 return _json;
2034 }
2035 }
2036
2037 /**
2038 * Selects and configures the service controller used by the service. The
2039 * service controller handles features like abuse, quota, billing, logging,
2040 * monitoring, etc.
2041 */
2042 class Control {
2043 /**
2044 * The service control environment to use. If empty, no control plane
2045 * feature (like quota and billing) will be enabled.
2046 */
2047 core.String environment;
2048
2049 Control();
2050
2051 Control.fromJson(core.Map _json) {
2052 if (_json.containsKey("environment")) {
2053 environment = _json["environment"];
2054 }
2055 }
2056
2057 core.Map toJson() {
2058 var _json = new core.Map();
2059 if (environment != null) {
2060 _json["environment"] = environment;
2061 }
2062 return _json;
2063 }
2064 }
2065
2066 /** Options for counters */
2067 class CounterOptions {
2068 /** The field value to attribute. */
2069 core.String field;
2070 /** The metric to update. */
2071 core.String metric;
2072
2073 CounterOptions();
2074
2075 CounterOptions.fromJson(core.Map _json) {
2076 if (_json.containsKey("field")) {
2077 field = _json["field"];
2078 }
2079 if (_json.containsKey("metric")) {
2080 metric = _json["metric"];
2081 }
2082 }
2083
2084 core.Map toJson() {
2085 var _json = new core.Map();
2086 if (field != null) {
2087 _json["field"] = field;
2088 }
2089 if (metric != null) {
2090 _json["metric"] = metric;
2091 }
2092 return _json;
2093 }
2094 }
2095
2096 /**
2097 * Customize service error responses. For example, list any service
2098 * specific protobuf types that can appear in error detail lists of
2099 * error responses.
2100 *
2101 * Example:
2102 *
2103 * custom_error:
2104 * types:
2105 * - google.foo.v1.CustomError
2106 * - google.foo.v1.AnotherError
2107 */
2108 class CustomError {
2109 /**
2110 * The list of custom error rules that apply to individual API messages.
2111 *
2112 * **NOTE:** All service configuration rules follow "last one wins" order.
2113 */
2114 core.List<CustomErrorRule> rules;
2115 /**
2116 * The list of custom error detail types, e.g. 'google.foo.v1.CustomError'.
2117 */
2118 core.List<core.String> types;
2119
2120 CustomError();
2121
2122 CustomError.fromJson(core.Map _json) {
2123 if (_json.containsKey("rules")) {
2124 rules = _json["rules"].map((value) => new CustomErrorRule.fromJson(value)) .toList();
2125 }
2126 if (_json.containsKey("types")) {
2127 types = _json["types"];
2128 }
2129 }
2130
2131 core.Map toJson() {
2132 var _json = new core.Map();
2133 if (rules != null) {
2134 _json["rules"] = rules.map((value) => (value).toJson()).toList();
2135 }
2136 if (types != null) {
2137 _json["types"] = types;
2138 }
2139 return _json;
2140 }
2141 }
2142
2143 /** A custom error rule. */
2144 class CustomErrorRule {
2145 /**
2146 * Mark this message as possible payload in error response. Otherwise,
2147 * objects of this type will be filtered when they appear in error payload.
2148 */
2149 core.bool isErrorType;
2150 /**
2151 * Selects messages to which this rule applies.
2152 *
2153 * Refer to selector for syntax details.
2154 */
2155 core.String selector;
2156
2157 CustomErrorRule();
2158
2159 CustomErrorRule.fromJson(core.Map _json) {
2160 if (_json.containsKey("isErrorType")) {
2161 isErrorType = _json["isErrorType"];
2162 }
2163 if (_json.containsKey("selector")) {
2164 selector = _json["selector"];
2165 }
2166 }
2167
2168 core.Map toJson() {
2169 var _json = new core.Map();
2170 if (isErrorType != null) {
2171 _json["isErrorType"] = isErrorType;
2172 }
2173 if (selector != null) {
2174 _json["selector"] = selector;
2175 }
2176 return _json;
2177 }
2178 }
2179
2180 /** A custom pattern is used for defining custom HTTP verb. */
2181 class CustomHttpPattern {
2182 /** The name of this custom HTTP verb. */
2183 core.String kind;
2184 /** The path matched by this custom verb. */
2185 core.String path;
2186
2187 CustomHttpPattern();
2188
2189 CustomHttpPattern.fromJson(core.Map _json) {
2190 if (_json.containsKey("kind")) {
2191 kind = _json["kind"];
2192 }
2193 if (_json.containsKey("path")) {
2194 path = _json["path"];
2195 }
2196 }
2197
2198 core.Map toJson() {
2199 var _json = new core.Map();
2200 if (kind != null) {
2201 _json["kind"] = kind;
2202 }
2203 if (path != null) {
2204 _json["path"] = path;
2205 }
2206 return _json;
2207 }
2208 }
2209
2210 /** Write a Data Access (Gin) log */
2211 class DataAccessOptions {
2212
2213 DataAccessOptions();
2214
2215 DataAccessOptions.fromJson(core.Map _json) {
2216 }
2217
2218 core.Map toJson() {
2219 var _json = new core.Map();
2220 return _json;
2221 }
2222 }
2223
2224 /**
2225 * Strategy used to delete a service. This strategy is a placeholder only
2226 * used by the system generated rollout to delete a service.
2227 */
2228 class DeleteServiceStrategy {
2229
2230 DeleteServiceStrategy();
2231
2232 DeleteServiceStrategy.fromJson(core.Map _json) {
2233 }
2234
2235 core.Map toJson() {
2236 var _json = new core.Map();
2237 return _json;
2238 }
2239 }
2240
2241 /** Represents a diagnostic message (error or warning) */
2242 class Diagnostic {
2243 /**
2244 * The kind of diagnostic information provided.
2245 * Possible string values are:
2246 * - "WARNING" : Warnings and errors
2247 * - "ERROR" : Only errors
2248 */
2249 core.String kind;
2250 /** File name and line number of the error or warning. */
2251 core.String location;
2252 /** Message describing the error or warning. */
2253 core.String message;
2254
2255 Diagnostic();
2256
2257 Diagnostic.fromJson(core.Map _json) {
2258 if (_json.containsKey("kind")) {
2259 kind = _json["kind"];
2260 }
2261 if (_json.containsKey("location")) {
2262 location = _json["location"];
2263 }
2264 if (_json.containsKey("message")) {
2265 message = _json["message"];
2266 }
2267 }
2268
2269 core.Map toJson() {
2270 var _json = new core.Map();
2271 if (kind != null) {
2272 _json["kind"] = kind;
2273 }
2274 if (location != null) {
2275 _json["location"] = location;
2276 }
2277 if (message != null) {
2278 _json["message"] = message;
2279 }
2280 return _json;
2281 }
2282 }
2283
2284 /** Request message for DisableService method. */
2285 class DisableServiceRequest {
2286 /**
2287 * The identity of consumer resource which service disablement will be
2288 * applied to.
2289 *
2290 * The Google Service Management implementation accepts the following
2291 * forms: "project:<project_id>", "project_number:<project_number>".
2292 *
2293 * Note: this is made compatible with
2294 * google.api.servicecontrol.v1.Operation.consumer_id.
2295 */
2296 core.String consumerId;
2297
2298 DisableServiceRequest();
2299
2300 DisableServiceRequest.fromJson(core.Map _json) {
2301 if (_json.containsKey("consumerId")) {
2302 consumerId = _json["consumerId"];
2303 }
2304 }
2305
2306 core.Map toJson() {
2307 var _json = new core.Map();
2308 if (consumerId != null) {
2309 _json["consumerId"] = consumerId;
2310 }
2311 return _json;
2312 }
2313 }
2314
2315 /**
2316 * `Documentation` provides the information for describing a service.
2317 *
2318 * Example:
2319 * <pre><code>documentation:
2320 * summary: >
2321 * The Google Calendar API gives access
2322 * to most calendar features.
2323 * pages:
2324 * - name: Overview
2325 * content: &#40;== include google/foo/overview.md ==&#41;
2326 * - name: Tutorial
2327 * content: &#40;== include google/foo/tutorial.md ==&#41;
2328 * subpages;
2329 * - name: Java
2330 * content: &#40;== include google/foo/tutorial_java.md ==&#41;
2331 * rules:
2332 * - selector: google.calendar.Calendar.Get
2333 * description: >
2334 * ...
2335 * - selector: google.calendar.Calendar.Put
2336 * description: >
2337 * ...
2338 * </code></pre>
2339 * Documentation is provided in markdown syntax. In addition to
2340 * standard markdown features, definition lists, tables and fenced
2341 * code blocks are supported. Section headers can be provided and are
2342 * interpreted relative to the section nesting of the context where
2343 * a documentation fragment is embedded.
2344 *
2345 * Documentation from the IDL is merged with documentation defined
2346 * via the config at normalization time, where documentation provided
2347 * by config rules overrides IDL provided.
2348 *
2349 * A number of constructs specific to the API platform are supported
2350 * in documentation text.
2351 *
2352 * In order to reference a proto element, the following
2353 * notation can be used:
2354 * <pre><code>&#91;fully.qualified.proto.name]&#91;]</code></pre>
2355 * To override the display text used for the link, this can be used:
2356 * <pre><code>&#91;display text]&#91;fully.qualified.proto.name]</code></pre>
2357 * Text can be excluded from doc using the following notation:
2358 * <pre><code>&#40;-- internal comment --&#41;</code></pre>
2359 * Comments can be made conditional using a visibility label. The below
2360 * text will be only rendered if the `BETA` label is available:
2361 * <pre><code>&#40;--BETA: comment for BETA users --&#41;</code></pre>
2362 * A few directives are available in documentation. Note that
2363 * directives must appear on a single line to be properly
2364 * identified. The `include` directive includes a markdown file from
2365 * an external source:
2366 * <pre><code>&#40;== include path/to/file ==&#41;</code></pre>
2367 * The `resource_for` directive marks a message to be the resource of
2368 * a collection in REST view. If it is not specified, tools attempt
2369 * to infer the resource from the operations in a collection:
2370 * <pre><code>&#40;== resource_for v1.shelves.books ==&#41;</code></pre>
2371 * The directive `suppress_warning` does not directly affect documentation
2372 * and is documented together with service config validation.
2373 */
2374 class Documentation {
2375 /** The URL to the root of documentation. */
2376 core.String documentationRootUrl;
2377 /**
2378 * Declares a single overview page. For example:
2379 * <pre><code>documentation:
2380 * summary: ...
2381 * overview: &#40;== include overview.md ==&#41;
2382 * </code></pre>
2383 * This is a shortcut for the following declaration (using pages style):
2384 * <pre><code>documentation:
2385 * summary: ...
2386 * pages:
2387 * - name: Overview
2388 * content: &#40;== include overview.md ==&#41;
2389 * </code></pre>
2390 * Note: you cannot specify both `overview` field and `pages` field.
2391 */
2392 core.String overview;
2393 /** The top level pages for the documentation set. */
2394 core.List<Page> pages;
2395 /**
2396 * A list of documentation rules that apply to individual API elements.
2397 *
2398 * **NOTE:** All service configuration rules follow "last one wins" order.
2399 */
2400 core.List<DocumentationRule> rules;
2401 /**
2402 * A short summary of what the service does. Can only be provided by
2403 * plain text.
2404 */
2405 core.String summary;
2406
2407 Documentation();
2408
2409 Documentation.fromJson(core.Map _json) {
2410 if (_json.containsKey("documentationRootUrl")) {
2411 documentationRootUrl = _json["documentationRootUrl"];
2412 }
2413 if (_json.containsKey("overview")) {
2414 overview = _json["overview"];
2415 }
2416 if (_json.containsKey("pages")) {
2417 pages = _json["pages"].map((value) => new Page.fromJson(value)).toList();
2418 }
2419 if (_json.containsKey("rules")) {
2420 rules = _json["rules"].map((value) => new DocumentationRule.fromJson(value )).toList();
2421 }
2422 if (_json.containsKey("summary")) {
2423 summary = _json["summary"];
2424 }
2425 }
2426
2427 core.Map toJson() {
2428 var _json = new core.Map();
2429 if (documentationRootUrl != null) {
2430 _json["documentationRootUrl"] = documentationRootUrl;
2431 }
2432 if (overview != null) {
2433 _json["overview"] = overview;
2434 }
2435 if (pages != null) {
2436 _json["pages"] = pages.map((value) => (value).toJson()).toList();
2437 }
2438 if (rules != null) {
2439 _json["rules"] = rules.map((value) => (value).toJson()).toList();
2440 }
2441 if (summary != null) {
2442 _json["summary"] = summary;
2443 }
2444 return _json;
2445 }
2446 }
2447
2448 /** A documentation rule provides information about individual API elements. */
2449 class DocumentationRule {
2450 /**
2451 * Deprecation description of the selected element(s). It can be provided if
2452 * an
2453 * element is marked as `deprecated`.
2454 */
2455 core.String deprecationDescription;
2456 /** Description of the selected API(s). */
2457 core.String description;
2458 /**
2459 * The selector is a comma-separated list of patterns. Each pattern is a
2460 * qualified name of the element which may end in "*", indicating a wildcard.
2461 * Wildcards are only allowed at the end and for a whole component of the
2462 * qualified name, i.e. "foo.*" is ok, but not "foo.b*" or "foo.*.bar". To
2463 * specify a default for all applicable elements, the whole pattern "*"
2464 * is used.
2465 */
2466 core.String selector;
2467
2468 DocumentationRule();
2469
2470 DocumentationRule.fromJson(core.Map _json) {
2471 if (_json.containsKey("deprecationDescription")) {
2472 deprecationDescription = _json["deprecationDescription"];
2473 }
2474 if (_json.containsKey("description")) {
2475 description = _json["description"];
2476 }
2477 if (_json.containsKey("selector")) {
2478 selector = _json["selector"];
2479 }
2480 }
2481
2482 core.Map toJson() {
2483 var _json = new core.Map();
2484 if (deprecationDescription != null) {
2485 _json["deprecationDescription"] = deprecationDescription;
2486 }
2487 if (description != null) {
2488 _json["description"] = description;
2489 }
2490 if (selector != null) {
2491 _json["selector"] = selector;
2492 }
2493 return _json;
2494 }
2495 }
2496
2497 /** Request message for EnableService method. */
2498 class EnableServiceRequest {
2499 /**
2500 * The identity of consumer resource which service enablement will be
2501 * applied to.
2502 *
2503 * The Google Service Management implementation accepts the following
2504 * forms: "project:<project_id>", "project_number:<project_number>".
2505 *
2506 * Note: this is made compatible with
2507 * google.api.servicecontrol.v1.Operation.consumer_id.
2508 */
2509 core.String consumerId;
2510
2511 EnableServiceRequest();
2512
2513 EnableServiceRequest.fromJson(core.Map _json) {
2514 if (_json.containsKey("consumerId")) {
2515 consumerId = _json["consumerId"];
2516 }
2517 }
2518
2519 core.Map toJson() {
2520 var _json = new core.Map();
2521 if (consumerId != null) {
2522 _json["consumerId"] = consumerId;
2523 }
2524 return _json;
2525 }
2526 }
2527
2528 /** Enum type definition. */
2529 class Enum {
2530 /** Enum value definitions. */
2531 core.List<EnumValue> enumvalue;
2532 /** Enum type name. */
2533 core.String name;
2534 /** Protocol buffer options. */
2535 core.List<Option> options;
2536 /** The source context. */
2537 SourceContext sourceContext;
2538 /**
2539 * The source syntax.
2540 * Possible string values are:
2541 * - "SYNTAX_PROTO2" : Syntax `proto2`.
2542 * - "SYNTAX_PROTO3" : Syntax `proto3`.
2543 */
2544 core.String syntax;
2545
2546 Enum();
2547
2548 Enum.fromJson(core.Map _json) {
2549 if (_json.containsKey("enumvalue")) {
2550 enumvalue = _json["enumvalue"].map((value) => new EnumValue.fromJson(value )).toList();
2551 }
2552 if (_json.containsKey("name")) {
2553 name = _json["name"];
2554 }
2555 if (_json.containsKey("options")) {
2556 options = _json["options"].map((value) => new Option.fromJson(value)).toLi st();
2557 }
2558 if (_json.containsKey("sourceContext")) {
2559 sourceContext = new SourceContext.fromJson(_json["sourceContext"]);
2560 }
2561 if (_json.containsKey("syntax")) {
2562 syntax = _json["syntax"];
2563 }
2564 }
2565
2566 core.Map toJson() {
2567 var _json = new core.Map();
2568 if (enumvalue != null) {
2569 _json["enumvalue"] = enumvalue.map((value) => (value).toJson()).toList();
2570 }
2571 if (name != null) {
2572 _json["name"] = name;
2573 }
2574 if (options != null) {
2575 _json["options"] = options.map((value) => (value).toJson()).toList();
2576 }
2577 if (sourceContext != null) {
2578 _json["sourceContext"] = (sourceContext).toJson();
2579 }
2580 if (syntax != null) {
2581 _json["syntax"] = syntax;
2582 }
2583 return _json;
2584 }
2585 }
2586
2587 /** Enum value definition. */
2588 class EnumValue {
2589 /** Enum value name. */
2590 core.String name;
2591 /** Enum value number. */
2592 core.int number;
2593 /** Protocol buffer options. */
2594 core.List<Option> options;
2595
2596 EnumValue();
2597
2598 EnumValue.fromJson(core.Map _json) {
2599 if (_json.containsKey("name")) {
2600 name = _json["name"];
2601 }
2602 if (_json.containsKey("number")) {
2603 number = _json["number"];
2604 }
2605 if (_json.containsKey("options")) {
2606 options = _json["options"].map((value) => new Option.fromJson(value)).toLi st();
2607 }
2608 }
2609
2610 core.Map toJson() {
2611 var _json = new core.Map();
2612 if (name != null) {
2613 _json["name"] = name;
2614 }
2615 if (number != null) {
2616 _json["number"] = number;
2617 }
2618 if (options != null) {
2619 _json["options"] = options.map((value) => (value).toJson()).toList();
2620 }
2621 return _json;
2622 }
2623 }
2624
2625 /** A single field of a message type. */
2626 class Field {
2627 /**
2628 * The field cardinality.
2629 * Possible string values are:
2630 * - "CARDINALITY_UNKNOWN" : For fields with unknown cardinality.
2631 * - "CARDINALITY_OPTIONAL" : For optional fields.
2632 * - "CARDINALITY_REQUIRED" : For required fields. Proto2 syntax only.
2633 * - "CARDINALITY_REPEATED" : For repeated fields.
2634 */
2635 core.String cardinality;
2636 /**
2637 * The string value of the default value of this field. Proto2 syntax only.
2638 */
2639 core.String defaultValue;
2640 /** The field JSON name. */
2641 core.String jsonName;
2642 /**
2643 * The field type.
2644 * Possible string values are:
2645 * - "TYPE_UNKNOWN" : Field type unknown.
2646 * - "TYPE_DOUBLE" : Field type double.
2647 * - "TYPE_FLOAT" : Field type float.
2648 * - "TYPE_INT64" : Field type int64.
2649 * - "TYPE_UINT64" : Field type uint64.
2650 * - "TYPE_INT32" : Field type int32.
2651 * - "TYPE_FIXED64" : Field type fixed64.
2652 * - "TYPE_FIXED32" : Field type fixed32.
2653 * - "TYPE_BOOL" : Field type bool.
2654 * - "TYPE_STRING" : Field type string.
2655 * - "TYPE_GROUP" : Field type group. Proto2 syntax only, and deprecated.
2656 * - "TYPE_MESSAGE" : Field type message.
2657 * - "TYPE_BYTES" : Field type bytes.
2658 * - "TYPE_UINT32" : Field type uint32.
2659 * - "TYPE_ENUM" : Field type enum.
2660 * - "TYPE_SFIXED32" : Field type sfixed32.
2661 * - "TYPE_SFIXED64" : Field type sfixed64.
2662 * - "TYPE_SINT32" : Field type sint32.
2663 * - "TYPE_SINT64" : Field type sint64.
2664 */
2665 core.String kind;
2666 /** The field name. */
2667 core.String name;
2668 /** The field number. */
2669 core.int number;
2670 /**
2671 * The index of the field type in `Type.oneofs`, for message or enumeration
2672 * types. The first type has index 1; zero means the type is not in the list.
2673 */
2674 core.int oneofIndex;
2675 /** The protocol buffer options. */
2676 core.List<Option> options;
2677 /** Whether to use alternative packed wire representation. */
2678 core.bool packed;
2679 /**
2680 * The field type URL, without the scheme, for message or enumeration
2681 * types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`.
2682 */
2683 core.String typeUrl;
2684
2685 Field();
2686
2687 Field.fromJson(core.Map _json) {
2688 if (_json.containsKey("cardinality")) {
2689 cardinality = _json["cardinality"];
2690 }
2691 if (_json.containsKey("defaultValue")) {
2692 defaultValue = _json["defaultValue"];
2693 }
2694 if (_json.containsKey("jsonName")) {
2695 jsonName = _json["jsonName"];
2696 }
2697 if (_json.containsKey("kind")) {
2698 kind = _json["kind"];
2699 }
2700 if (_json.containsKey("name")) {
2701 name = _json["name"];
2702 }
2703 if (_json.containsKey("number")) {
2704 number = _json["number"];
2705 }
2706 if (_json.containsKey("oneofIndex")) {
2707 oneofIndex = _json["oneofIndex"];
2708 }
2709 if (_json.containsKey("options")) {
2710 options = _json["options"].map((value) => new Option.fromJson(value)).toLi st();
2711 }
2712 if (_json.containsKey("packed")) {
2713 packed = _json["packed"];
2714 }
2715 if (_json.containsKey("typeUrl")) {
2716 typeUrl = _json["typeUrl"];
2717 }
2718 }
2719
2720 core.Map toJson() {
2721 var _json = new core.Map();
2722 if (cardinality != null) {
2723 _json["cardinality"] = cardinality;
2724 }
2725 if (defaultValue != null) {
2726 _json["defaultValue"] = defaultValue;
2727 }
2728 if (jsonName != null) {
2729 _json["jsonName"] = jsonName;
2730 }
2731 if (kind != null) {
2732 _json["kind"] = kind;
2733 }
2734 if (name != null) {
2735 _json["name"] = name;
2736 }
2737 if (number != null) {
2738 _json["number"] = number;
2739 }
2740 if (oneofIndex != null) {
2741 _json["oneofIndex"] = oneofIndex;
2742 }
2743 if (options != null) {
2744 _json["options"] = options.map((value) => (value).toJson()).toList();
2745 }
2746 if (packed != null) {
2747 _json["packed"] = packed;
2748 }
2749 if (typeUrl != null) {
2750 _json["typeUrl"] = typeUrl;
2751 }
2752 return _json;
2753 }
2754 }
2755
2756 /** Request message for GenerateConfigReport method. */
2757 class GenerateConfigReportRequest {
2758 /**
2759 * Service configuration for which we want to generate the report.
2760 * For this version of API, the supported types are
2761 * google.api.servicemanagement.v1.ConfigRef,
2762 * google.api.servicemanagement.v1.ConfigSource,
2763 * and google.api.Service
2764 *
2765 * The values for Object must be JSON objects. It can consist of `num`,
2766 * `String`, `bool` and `null` as well as `Map` and `List` values.
2767 */
2768 core.Map<core.String, core.Object> newConfig;
2769 /**
2770 * Service configuration against which the comparison will be done.
2771 * For this version of API, the supported types are
2772 * google.api.servicemanagement.v1.ConfigRef,
2773 * google.api.servicemanagement.v1.ConfigSource,
2774 * and google.api.Service
2775 *
2776 * The values for Object must be JSON objects. It can consist of `num`,
2777 * `String`, `bool` and `null` as well as `Map` and `List` values.
2778 */
2779 core.Map<core.String, core.Object> oldConfig;
2780
2781 GenerateConfigReportRequest();
2782
2783 GenerateConfigReportRequest.fromJson(core.Map _json) {
2784 if (_json.containsKey("newConfig")) {
2785 newConfig = _json["newConfig"];
2786 }
2787 if (_json.containsKey("oldConfig")) {
2788 oldConfig = _json["oldConfig"];
2789 }
2790 }
2791
2792 core.Map toJson() {
2793 var _json = new core.Map();
2794 if (newConfig != null) {
2795 _json["newConfig"] = newConfig;
2796 }
2797 if (oldConfig != null) {
2798 _json["oldConfig"] = oldConfig;
2799 }
2800 return _json;
2801 }
2802 }
2803
2804 /** Response message for GenerateConfigReport method. */
2805 class GenerateConfigReportResponse {
2806 /**
2807 * list of ChangeReport, each corresponding to comparison between two
2808 * service configurations.
2809 */
2810 core.List<ChangeReport> changeReports;
2811 /**
2812 * Errors / Linter warnings associated with the service definition this
2813 * report
2814 * belongs to.
2815 */
2816 core.List<Diagnostic> diagnostics;
2817 /** ID of the service configuration this report belongs to. */
2818 core.String id;
2819 /** Name of the service this report belongs to. */
2820 core.String serviceName;
2821
2822 GenerateConfigReportResponse();
2823
2824 GenerateConfigReportResponse.fromJson(core.Map _json) {
2825 if (_json.containsKey("changeReports")) {
2826 changeReports = _json["changeReports"].map((value) => new ChangeReport.fro mJson(value)).toList();
2827 }
2828 if (_json.containsKey("diagnostics")) {
2829 diagnostics = _json["diagnostics"].map((value) => new Diagnostic.fromJson( value)).toList();
2830 }
2831 if (_json.containsKey("id")) {
2832 id = _json["id"];
2833 }
2834 if (_json.containsKey("serviceName")) {
2835 serviceName = _json["serviceName"];
2836 }
2837 }
2838
2839 core.Map toJson() {
2840 var _json = new core.Map();
2841 if (changeReports != null) {
2842 _json["changeReports"] = changeReports.map((value) => (value).toJson()).to List();
2843 }
2844 if (diagnostics != null) {
2845 _json["diagnostics"] = diagnostics.map((value) => (value).toJson()).toList ();
2846 }
2847 if (id != null) {
2848 _json["id"] = id;
2849 }
2850 if (serviceName != null) {
2851 _json["serviceName"] = serviceName;
2852 }
2853 return _json;
2854 }
2855 }
2856
2857 /** Request message for `GetIamPolicy` method. */
2858 class GetIamPolicyRequest {
2859
2860 GetIamPolicyRequest();
2861
2862 GetIamPolicyRequest.fromJson(core.Map _json) {
2863 }
2864
2865 core.Map toJson() {
2866 var _json = new core.Map();
2867 return _json;
2868 }
2869 }
2870
2871 /**
2872 * Defines the HTTP configuration for a service. It contains a list of
2873 * HttpRule, each specifying the mapping of an RPC method
2874 * to one or more HTTP REST API methods.
2875 */
2876 class Http {
2877 /**
2878 * A list of HTTP configuration rules that apply to individual API methods.
2879 *
2880 * **NOTE:** All service configuration rules follow "last one wins" order.
2881 */
2882 core.List<HttpRule> rules;
2883
2884 Http();
2885
2886 Http.fromJson(core.Map _json) {
2887 if (_json.containsKey("rules")) {
2888 rules = _json["rules"].map((value) => new HttpRule.fromJson(value)).toList ();
2889 }
2890 }
2891
2892 core.Map toJson() {
2893 var _json = new core.Map();
2894 if (rules != null) {
2895 _json["rules"] = rules.map((value) => (value).toJson()).toList();
2896 }
2897 return _json;
2898 }
2899 }
2900
2901 /**
2902 * `HttpRule` defines the mapping of an RPC method to one or more HTTP
2903 * REST APIs. The mapping determines what portions of the request
2904 * message are populated from the path, query parameters, or body of
2905 * the HTTP request. The mapping is typically specified as an
2906 * `google.api.http` annotation, see "google/api/annotations.proto"
2907 * for details.
2908 *
2909 * The mapping consists of a field specifying the path template and
2910 * method kind. The path template can refer to fields in the request
2911 * message, as in the example below which describes a REST GET
2912 * operation on a resource collection of messages:
2913 *
2914 * ```proto
2915 * service Messaging {
2916 * rpc GetMessage(GetMessageRequest) returns (Message) {
2917 * option (google.api.http).get = "/v1/messages/{message_id}/{sub.subfield}";
2918 * }
2919 * }
2920 * message GetMessageRequest {
2921 * message SubMessage {
2922 * string subfield = 1;
2923 * }
2924 * string message_id = 1; // mapped to the URL
2925 * SubMessage sub = 2; // `sub.subfield` is url-mapped
2926 * }
2927 * message Message {
2928 * string text = 1; // content of the resource
2929 * }
2930 * ```
2931 *
2932 * This definition enables an automatic, bidrectional mapping of HTTP
2933 * JSON to RPC. Example:
2934 *
2935 * HTTP | RPC
2936 * -----|-----
2937 * `GET /v1/messages/123456/foo` | `GetMessage(message_id: "123456" sub:
2938 * SubMessage(subfield: "foo"))`
2939 *
2940 * In general, not only fields but also field paths can be referenced
2941 * from a path pattern. Fields mapped to the path pattern cannot be
2942 * repeated and must have a primitive (non-message) type.
2943 *
2944 * Any fields in the request message which are not bound by the path
2945 * pattern automatically become (optional) HTTP query
2946 * parameters. Assume the following definition of the request message:
2947 *
2948 * ```proto
2949 * message GetMessageRequest {
2950 * message SubMessage {
2951 * string subfield = 1;
2952 * }
2953 * string message_id = 1; // mapped to the URL
2954 * int64 revision = 2; // becomes a parameter
2955 * SubMessage sub = 3; // `sub.subfield` becomes a parameter
2956 * }
2957 * ```
2958 *
2959 * This enables a HTTP JSON to RPC mapping as below:
2960 *
2961 * HTTP | RPC
2962 * -----|-----
2963 * `GET /v1/messages/123456?revision=2&sub.subfield=foo` |
2964 * `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield:
2965 * "foo"))`
2966 *
2967 * Note that fields which are mapped to HTTP parameters must have a
2968 * primitive type or a repeated primitive type. Message types are not
2969 * allowed. In the case of a repeated type, the parameter can be
2970 * repeated in the URL, as in `...?param=A&param=B`.
2971 *
2972 * For HTTP method kinds which allow a request body, the `body` field
2973 * specifies the mapping. Consider a REST update method on the
2974 * message resource collection:
2975 *
2976 * ```proto
2977 * service Messaging {
2978 * rpc UpdateMessage(UpdateMessageRequest) returns (Message) {
2979 * option (google.api.http) = {
2980 * put: "/v1/messages/{message_id}"
2981 * body: "message"
2982 * };
2983 * }
2984 * }
2985 * message UpdateMessageRequest {
2986 * string message_id = 1; // mapped to the URL
2987 * Message message = 2; // mapped to the body
2988 * }
2989 * ```
2990 *
2991 * The following HTTP JSON to RPC mapping is enabled, where the
2992 * representation of the JSON in the request body is determined by
2993 * protos JSON encoding:
2994 *
2995 * HTTP | RPC
2996 * -----|-----
2997 * `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id:
2998 * "123456" message { text: "Hi!" })`
2999 *
3000 * The special name `*` can be used in the body mapping to define that
3001 * every field not bound by the path template should be mapped to the
3002 * request body. This enables the following alternative definition of
3003 * the update method:
3004 *
3005 * ```proto
3006 * service Messaging {
3007 * rpc UpdateMessage(Message) returns (Message) {
3008 * option (google.api.http) = {
3009 * put: "/v1/messages/{message_id}"
3010 * body: "*"
3011 * };
3012 * }
3013 * }
3014 * message Message {
3015 * string message_id = 1;
3016 * string text = 2;
3017 * }
3018 * ```
3019 *
3020 * The following HTTP JSON to RPC mapping is enabled:
3021 *
3022 * HTTP | RPC
3023 * -----|-----
3024 * `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id:
3025 * "123456" text: "Hi!")`
3026 *
3027 * Note that when using `*` in the body mapping, it is not possible to
3028 * have HTTP parameters, as all fields not bound by the path end in
3029 * the body. This makes this option more rarely used in practice of
3030 * defining REST APIs. The common usage of `*` is in custom methods
3031 * which don't use the URL at all for transferring data.
3032 *
3033 * It is possible to define multiple HTTP methods for one RPC by using
3034 * the `additional_bindings` option. Example:
3035 *
3036 * ```proto
3037 * service Messaging {
3038 * rpc GetMessage(GetMessageRequest) returns (Message) {
3039 * option (google.api.http) = {
3040 * get: "/v1/messages/{message_id}"
3041 * additional_bindings {
3042 * get: "/v1/users/{user_id}/messages/{message_id}"
3043 * }
3044 * };
3045 * }
3046 * }
3047 * message GetMessageRequest {
3048 * string message_id = 1;
3049 * string user_id = 2;
3050 * }
3051 * ```
3052 *
3053 * This enables the following two alternative HTTP JSON to RPC
3054 * mappings:
3055 *
3056 * HTTP | RPC
3057 * -----|-----
3058 * `GET /v1/messages/123456` | `GetMessage(message_id: "123456")`
3059 * `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id:
3060 * "123456")`
3061 *
3062 * # Rules for HTTP mapping
3063 *
3064 * The rules for mapping HTTP path, query parameters, and body fields
3065 * to the request message are as follows:
3066 *
3067 * 1. The `body` field specifies either `*` or a field path, or is
3068 * omitted. If omitted, it assumes there is no HTTP body.
3069 * 2. Leaf fields (recursive expansion of nested messages in the
3070 * request) can be classified into three types:
3071 * (a) Matched in the URL template.
3072 * (b) Covered by body (if body is `*`, everything except (a) fields;
3073 * else everything under the body field)
3074 * (c) All other fields.
3075 * 3. URL query parameters found in the HTTP request are mapped to (c) fields.
3076 * 4. Any body sent with an HTTP request can contain only (b) fields.
3077 *
3078 * The syntax of the path template is as follows:
3079 *
3080 * Template = "/" Segments [ Verb ] ;
3081 * Segments = Segment { "/" Segment } ;
3082 * Segment = "*" | "**" | LITERAL | Variable ;
3083 * Variable = "{" FieldPath [ "=" Segments ] "}" ;
3084 * FieldPath = IDENT { "." IDENT } ;
3085 * Verb = ":" LITERAL ;
3086 *
3087 * The syntax `*` matches a single path segment. It follows the semantics of
3088 * [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String
3089 * Expansion.
3090 *
3091 * The syntax `**` matches zero or more path segments. It follows the semantics
3092 * of [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.3 Reserved
3093 * Expansion.
3094 *
3095 * The syntax `LITERAL` matches literal text in the URL path.
3096 *
3097 * The syntax `Variable` matches the entire path as specified by its template;
3098 * this nested template must not contain further variables. If a variable
3099 * matches a single path segment, its template may be omitted, e.g. `{var}`
3100 * is equivalent to `{var=*}`.
3101 *
3102 * NOTE: the field paths in variables and in the `body` must not refer to
3103 * repeated fields or map fields.
3104 *
3105 * Use CustomHttpPattern to specify any HTTP method that is not included in the
3106 * `pattern` field, such as HEAD, or "*" to leave the HTTP method unspecified
3107 * for
3108 * a given URL path rule. The wild-card rule is useful for services that provide
3109 * content to Web (HTML) clients.
3110 */
3111 class HttpRule {
3112 /**
3113 * Additional HTTP bindings for the selector. Nested bindings must
3114 * not contain an `additional_bindings` field themselves (that is,
3115 * the nesting may only be one level deep).
3116 */
3117 core.List<HttpRule> additionalBindings;
3118 /**
3119 * The name of the request field whose value is mapped to the HTTP body, or
3120 * `*` for mapping all fields not captured by the path pattern to the HTTP
3121 * body. NOTE: the referred field must not be a repeated field and must be
3122 * present at the top-level of response message type.
3123 */
3124 core.String body;
3125 /** Custom pattern is used for defining custom verbs. */
3126 CustomHttpPattern custom;
3127 /** Used for deleting a resource. */
3128 core.String delete;
3129 /** Used for listing and getting information about resources. */
3130 core.String get;
3131 /**
3132 * Do not use this. For media support, add instead
3133 * [][google.bytestream.RestByteStream] as an API to your
3134 * configuration.
3135 */
3136 MediaDownload mediaDownload;
3137 /**
3138 * Do not use this. For media support, add instead
3139 * [][google.bytestream.RestByteStream] as an API to your
3140 * configuration.
3141 */
3142 MediaUpload mediaUpload;
3143 /** Used for updating a resource. */
3144 core.String patch;
3145 /** Used for creating a resource. */
3146 core.String post;
3147 /** Used for updating a resource. */
3148 core.String put;
3149 /**
3150 * The name of the response field whose value is mapped to the HTTP body of
3151 * response. Other response fields are ignored. This field is optional. When
3152 * not set, the response message will be used as HTTP body of response.
3153 * NOTE: the referred field must be not a repeated field and must be present
3154 * at the top-level of response message type.
3155 */
3156 core.String responseBody;
3157 /**
3158 * Selects methods to which this rule applies.
3159 *
3160 * Refer to selector for syntax details.
3161 */
3162 core.String selector;
3163
3164 HttpRule();
3165
3166 HttpRule.fromJson(core.Map _json) {
3167 if (_json.containsKey("additionalBindings")) {
3168 additionalBindings = _json["additionalBindings"].map((value) => new HttpRu le.fromJson(value)).toList();
3169 }
3170 if (_json.containsKey("body")) {
3171 body = _json["body"];
3172 }
3173 if (_json.containsKey("custom")) {
3174 custom = new CustomHttpPattern.fromJson(_json["custom"]);
3175 }
3176 if (_json.containsKey("delete")) {
3177 delete = _json["delete"];
3178 }
3179 if (_json.containsKey("get")) {
3180 get = _json["get"];
3181 }
3182 if (_json.containsKey("mediaDownload")) {
3183 mediaDownload = new MediaDownload.fromJson(_json["mediaDownload"]);
3184 }
3185 if (_json.containsKey("mediaUpload")) {
3186 mediaUpload = new MediaUpload.fromJson(_json["mediaUpload"]);
3187 }
3188 if (_json.containsKey("patch")) {
3189 patch = _json["patch"];
3190 }
3191 if (_json.containsKey("post")) {
3192 post = _json["post"];
3193 }
3194 if (_json.containsKey("put")) {
3195 put = _json["put"];
3196 }
3197 if (_json.containsKey("responseBody")) {
3198 responseBody = _json["responseBody"];
3199 }
3200 if (_json.containsKey("selector")) {
3201 selector = _json["selector"];
3202 }
3203 }
3204
3205 core.Map toJson() {
3206 var _json = new core.Map();
3207 if (additionalBindings != null) {
3208 _json["additionalBindings"] = additionalBindings.map((value) => (value).to Json()).toList();
3209 }
3210 if (body != null) {
3211 _json["body"] = body;
3212 }
3213 if (custom != null) {
3214 _json["custom"] = (custom).toJson();
3215 }
3216 if (delete != null) {
3217 _json["delete"] = delete;
3218 }
3219 if (get != null) {
3220 _json["get"] = get;
3221 }
3222 if (mediaDownload != null) {
3223 _json["mediaDownload"] = (mediaDownload).toJson();
3224 }
3225 if (mediaUpload != null) {
3226 _json["mediaUpload"] = (mediaUpload).toJson();
3227 }
3228 if (patch != null) {
3229 _json["patch"] = patch;
3230 }
3231 if (post != null) {
3232 _json["post"] = post;
3233 }
3234 if (put != null) {
3235 _json["put"] = put;
3236 }
3237 if (responseBody != null) {
3238 _json["responseBody"] = responseBody;
3239 }
3240 if (selector != null) {
3241 _json["selector"] = selector;
3242 }
3243 return _json;
3244 }
3245 }
3246
3247 /** A description of a label. */
3248 class LabelDescriptor {
3249 /** A human-readable description for the label. */
3250 core.String description;
3251 /** The label key. */
3252 core.String key;
3253 /**
3254 * The type of data that can be assigned to the label.
3255 * Possible string values are:
3256 * - "STRING" : A variable-length string. This is the default.
3257 * - "BOOL" : Boolean; true or false.
3258 * - "INT64" : A 64-bit signed integer.
3259 */
3260 core.String valueType;
3261
3262 LabelDescriptor();
3263
3264 LabelDescriptor.fromJson(core.Map _json) {
3265 if (_json.containsKey("description")) {
3266 description = _json["description"];
3267 }
3268 if (_json.containsKey("key")) {
3269 key = _json["key"];
3270 }
3271 if (_json.containsKey("valueType")) {
3272 valueType = _json["valueType"];
3273 }
3274 }
3275
3276 core.Map toJson() {
3277 var _json = new core.Map();
3278 if (description != null) {
3279 _json["description"] = description;
3280 }
3281 if (key != null) {
3282 _json["key"] = key;
3283 }
3284 if (valueType != null) {
3285 _json["valueType"] = valueType;
3286 }
3287 return _json;
3288 }
3289 }
3290
3291 /** Response message for ListServiceConfigs method. */
3292 class ListServiceConfigsResponse {
3293 /** The token of the next page of results. */
3294 core.String nextPageToken;
3295 /** The list of service configuration resources. */
3296 core.List<Service> serviceConfigs;
3297
3298 ListServiceConfigsResponse();
3299
3300 ListServiceConfigsResponse.fromJson(core.Map _json) {
3301 if (_json.containsKey("nextPageToken")) {
3302 nextPageToken = _json["nextPageToken"];
3303 }
3304 if (_json.containsKey("serviceConfigs")) {
3305 serviceConfigs = _json["serviceConfigs"].map((value) => new Service.fromJs on(value)).toList();
3306 }
3307 }
3308
3309 core.Map toJson() {
3310 var _json = new core.Map();
3311 if (nextPageToken != null) {
3312 _json["nextPageToken"] = nextPageToken;
3313 }
3314 if (serviceConfigs != null) {
3315 _json["serviceConfigs"] = serviceConfigs.map((value) => (value).toJson()). toList();
3316 }
3317 return _json;
3318 }
3319 }
3320
3321 /** Response message for ListServiceRollouts method. */
3322 class ListServiceRolloutsResponse {
3323 /** The token of the next page of results. */
3324 core.String nextPageToken;
3325 /** The list of rollout resources. */
3326 core.List<Rollout> rollouts;
3327
3328 ListServiceRolloutsResponse();
3329
3330 ListServiceRolloutsResponse.fromJson(core.Map _json) {
3331 if (_json.containsKey("nextPageToken")) {
3332 nextPageToken = _json["nextPageToken"];
3333 }
3334 if (_json.containsKey("rollouts")) {
3335 rollouts = _json["rollouts"].map((value) => new Rollout.fromJson(value)).t oList();
3336 }
3337 }
3338
3339 core.Map toJson() {
3340 var _json = new core.Map();
3341 if (nextPageToken != null) {
3342 _json["nextPageToken"] = nextPageToken;
3343 }
3344 if (rollouts != null) {
3345 _json["rollouts"] = rollouts.map((value) => (value).toJson()).toList();
3346 }
3347 return _json;
3348 }
3349 }
3350
3351 /** Response message for `ListServices` method. */
3352 class ListServicesResponse {
3353 /**
3354 * Token that can be passed to `ListServices` to resume a paginated query.
3355 */
3356 core.String nextPageToken;
3357 /** The results of the query. */
3358 core.List<ManagedService> services;
3359
3360 ListServicesResponse();
3361
3362 ListServicesResponse.fromJson(core.Map _json) {
3363 if (_json.containsKey("nextPageToken")) {
3364 nextPageToken = _json["nextPageToken"];
3365 }
3366 if (_json.containsKey("services")) {
3367 services = _json["services"].map((value) => new ManagedService.fromJson(va lue)).toList();
3368 }
3369 }
3370
3371 core.Map toJson() {
3372 var _json = new core.Map();
3373 if (nextPageToken != null) {
3374 _json["nextPageToken"] = nextPageToken;
3375 }
3376 if (services != null) {
3377 _json["services"] = services.map((value) => (value).toJson()).toList();
3378 }
3379 return _json;
3380 }
3381 }
3382
3383 /**
3384 * Specifies what kind of log the caller must write
3385 * Increment a streamz counter with the specified metric and field names.
3386 *
3387 * Metric names should start with a '/', generally be lowercase-only,
3388 * and end in "_count". Field names should not contain an initial slash.
3389 * The actual exported metric names will have "/iam/policy" prepended.
3390 *
3391 * Field names correspond to IAM request parameters and field values are
3392 * their respective values.
3393 *
3394 * At present the only supported field names are
3395 * - "iam_principal", corresponding to IAMContext.principal;
3396 * - "" (empty string), resulting in one aggretated counter with no field.
3397 *
3398 * Examples:
3399 * counter { metric: "/debug_access_count" field: "iam_principal" }
3400 * ==> increment counter /iam/policy/backend_debug_access_count
3401 * {iam_principal=[value of IAMContext.principal]}
3402 *
3403 * At this time we do not support:
3404 * * multiple field names (though this may be supported in the future)
3405 * * decrementing the counter
3406 * * incrementing it by anything other than 1
3407 */
3408 class LogConfig {
3409 /** Cloud audit options. */
3410 CloudAuditOptions cloudAudit;
3411 /** Counter options. */
3412 CounterOptions counter;
3413 /** Data access options. */
3414 DataAccessOptions dataAccess;
3415
3416 LogConfig();
3417
3418 LogConfig.fromJson(core.Map _json) {
3419 if (_json.containsKey("cloudAudit")) {
3420 cloudAudit = new CloudAuditOptions.fromJson(_json["cloudAudit"]);
3421 }
3422 if (_json.containsKey("counter")) {
3423 counter = new CounterOptions.fromJson(_json["counter"]);
3424 }
3425 if (_json.containsKey("dataAccess")) {
3426 dataAccess = new DataAccessOptions.fromJson(_json["dataAccess"]);
3427 }
3428 }
3429
3430 core.Map toJson() {
3431 var _json = new core.Map();
3432 if (cloudAudit != null) {
3433 _json["cloudAudit"] = (cloudAudit).toJson();
3434 }
3435 if (counter != null) {
3436 _json["counter"] = (counter).toJson();
3437 }
3438 if (dataAccess != null) {
3439 _json["dataAccess"] = (dataAccess).toJson();
3440 }
3441 return _json;
3442 }
3443 }
3444
3445 /**
3446 * A description of a log type. Example in YAML format:
3447 *
3448 * - name: library.googleapis.com/activity_history
3449 * description: The history of borrowing and returning library items.
3450 * display_name: Activity
3451 * labels:
3452 * - key: /customer_id
3453 * description: Identifier of a library customer
3454 */
3455 class LogDescriptor {
3456 /**
3457 * A human-readable description of this log. This information appears in
3458 * the documentation and can contain details.
3459 */
3460 core.String description;
3461 /**
3462 * The human-readable name for this log. This information appears on
3463 * the user interface and should be concise.
3464 */
3465 core.String displayName;
3466 /**
3467 * The set of labels that are available to describe a specific log entry.
3468 * Runtime requests that contain labels not specified here are
3469 * considered invalid.
3470 */
3471 core.List<LabelDescriptor> labels;
3472 /**
3473 * The name of the log. It must be less than 512 characters long and can
3474 * include the following characters: upper- and lower-case alphanumeric
3475 * characters [A-Za-z0-9], and punctuation characters including
3476 * slash, underscore, hyphen, period [/_-.].
3477 */
3478 core.String name;
3479
3480 LogDescriptor();
3481
3482 LogDescriptor.fromJson(core.Map _json) {
3483 if (_json.containsKey("description")) {
3484 description = _json["description"];
3485 }
3486 if (_json.containsKey("displayName")) {
3487 displayName = _json["displayName"];
3488 }
3489 if (_json.containsKey("labels")) {
3490 labels = _json["labels"].map((value) => new LabelDescriptor.fromJson(value )).toList();
3491 }
3492 if (_json.containsKey("name")) {
3493 name = _json["name"];
3494 }
3495 }
3496
3497 core.Map toJson() {
3498 var _json = new core.Map();
3499 if (description != null) {
3500 _json["description"] = description;
3501 }
3502 if (displayName != null) {
3503 _json["displayName"] = displayName;
3504 }
3505 if (labels != null) {
3506 _json["labels"] = labels.map((value) => (value).toJson()).toList();
3507 }
3508 if (name != null) {
3509 _json["name"] = name;
3510 }
3511 return _json;
3512 }
3513 }
3514
3515 /**
3516 * Logging configuration of the service.
3517 *
3518 * The following example shows how to configure logs to be sent to the
3519 * producer and consumer projects. In the example,
3520 * the `library.googleapis.com/activity_history` log is
3521 * sent to both the producer and consumer projects, whereas
3522 * the `library.googleapis.com/purchase_history` log is only sent to the
3523 * producer project:
3524 *
3525 * monitored_resources:
3526 * - type: library.googleapis.com/branch
3527 * labels:
3528 * - key: /city
3529 * description: The city where the library branch is located in.
3530 * - key: /name
3531 * description: The name of the branch.
3532 * logs:
3533 * - name: library.googleapis.com/activity_history
3534 * labels:
3535 * - key: /customer_id
3536 * - name: library.googleapis.com/purchase_history
3537 * logging:
3538 * producer_destinations:
3539 * - monitored_resource: library.googleapis.com/branch
3540 * logs:
3541 * - library.googleapis.com/activity_history
3542 * - library.googleapis.com/purchase_history
3543 * consumer_destinations:
3544 * - monitored_resource: library.googleapis.com/branch
3545 * logs:
3546 * - library.googleapis.com/activity_history
3547 */
3548 class Logging {
3549 /**
3550 * Logging configurations for sending logs to the consumer project.
3551 * There can be multiple consumer destinations, each one must have a
3552 * different monitored resource type. A log can be used in at most
3553 * one consumer destination.
3554 */
3555 core.List<LoggingDestination> consumerDestinations;
3556 /**
3557 * Logging configurations for sending logs to the producer project.
3558 * There can be multiple producer destinations, each one must have a
3559 * different monitored resource type. A log can be used in at most
3560 * one producer destination.
3561 */
3562 core.List<LoggingDestination> producerDestinations;
3563
3564 Logging();
3565
3566 Logging.fromJson(core.Map _json) {
3567 if (_json.containsKey("consumerDestinations")) {
3568 consumerDestinations = _json["consumerDestinations"].map((value) => new Lo ggingDestination.fromJson(value)).toList();
3569 }
3570 if (_json.containsKey("producerDestinations")) {
3571 producerDestinations = _json["producerDestinations"].map((value) => new Lo ggingDestination.fromJson(value)).toList();
3572 }
3573 }
3574
3575 core.Map toJson() {
3576 var _json = new core.Map();
3577 if (consumerDestinations != null) {
3578 _json["consumerDestinations"] = consumerDestinations.map((value) => (value ).toJson()).toList();
3579 }
3580 if (producerDestinations != null) {
3581 _json["producerDestinations"] = producerDestinations.map((value) => (value ).toJson()).toList();
3582 }
3583 return _json;
3584 }
3585 }
3586
3587 /**
3588 * Configuration of a specific logging destination (the producer project
3589 * or the consumer project).
3590 */
3591 class LoggingDestination {
3592 /**
3593 * Names of the logs to be sent to this destination. Each name must
3594 * be defined in the Service.logs section.
3595 */
3596 core.List<core.String> logs;
3597 /**
3598 * The monitored resource type. The type must be defined in
3599 * Service.monitored_resources section.
3600 */
3601 core.String monitoredResource;
3602
3603 LoggingDestination();
3604
3605 LoggingDestination.fromJson(core.Map _json) {
3606 if (_json.containsKey("logs")) {
3607 logs = _json["logs"];
3608 }
3609 if (_json.containsKey("monitoredResource")) {
3610 monitoredResource = _json["monitoredResource"];
3611 }
3612 }
3613
3614 core.Map toJson() {
3615 var _json = new core.Map();
3616 if (logs != null) {
3617 _json["logs"] = logs;
3618 }
3619 if (monitoredResource != null) {
3620 _json["monitoredResource"] = monitoredResource;
3621 }
3622 return _json;
3623 }
3624 }
3625
3626 /**
3627 * The full representation of a Service that is managed by
3628 * Google Service Management.
3629 */
3630 class ManagedService {
3631 /** ID of the project that produces and owns this service. */
3632 core.String producerProjectId;
3633 /**
3634 * The name of the service. See the [overview](/service-management/overview)
3635 * for naming requirements.
3636 * This name must match `google.api.Service.name` in the
3637 * `service_config` field.
3638 */
3639 core.String serviceName;
3640
3641 ManagedService();
3642
3643 ManagedService.fromJson(core.Map _json) {
3644 if (_json.containsKey("producerProjectId")) {
3645 producerProjectId = _json["producerProjectId"];
3646 }
3647 if (_json.containsKey("serviceName")) {
3648 serviceName = _json["serviceName"];
3649 }
3650 }
3651
3652 core.Map toJson() {
3653 var _json = new core.Map();
3654 if (producerProjectId != null) {
3655 _json["producerProjectId"] = producerProjectId;
3656 }
3657 if (serviceName != null) {
3658 _json["serviceName"] = serviceName;
3659 }
3660 return _json;
3661 }
3662 }
3663
3664 /**
3665 * Do not use this. For media support, add instead
3666 * [][google.bytestream.RestByteStream] as an API to your
3667 * configuration.
3668 */
3669 class MediaDownload {
3670 /** Whether download is enabled. */
3671 core.bool enabled;
3672
3673 MediaDownload();
3674
3675 MediaDownload.fromJson(core.Map _json) {
3676 if (_json.containsKey("enabled")) {
3677 enabled = _json["enabled"];
3678 }
3679 }
3680
3681 core.Map toJson() {
3682 var _json = new core.Map();
3683 if (enabled != null) {
3684 _json["enabled"] = enabled;
3685 }
3686 return _json;
3687 }
3688 }
3689
3690 /**
3691 * Do not use this. For media support, add instead
3692 * [][google.bytestream.RestByteStream] as an API to your
3693 * configuration.
3694 */
3695 class MediaUpload {
3696 /** Whether upload is enabled. */
3697 core.bool enabled;
3698
3699 MediaUpload();
3700
3701 MediaUpload.fromJson(core.Map _json) {
3702 if (_json.containsKey("enabled")) {
3703 enabled = _json["enabled"];
3704 }
3705 }
3706
3707 core.Map toJson() {
3708 var _json = new core.Map();
3709 if (enabled != null) {
3710 _json["enabled"] = enabled;
3711 }
3712 return _json;
3713 }
3714 }
3715
3716 /** Method represents a method of an api. */
3717 class Method {
3718 /** The simple name of this method. */
3719 core.String name;
3720 /** Any metadata attached to the method. */
3721 core.List<Option> options;
3722 /** If true, the request is streamed. */
3723 core.bool requestStreaming;
3724 /** A URL of the input message type. */
3725 core.String requestTypeUrl;
3726 /** If true, the response is streamed. */
3727 core.bool responseStreaming;
3728 /** The URL of the output message type. */
3729 core.String responseTypeUrl;
3730 /**
3731 * The source syntax of this method.
3732 * Possible string values are:
3733 * - "SYNTAX_PROTO2" : Syntax `proto2`.
3734 * - "SYNTAX_PROTO3" : Syntax `proto3`.
3735 */
3736 core.String syntax;
3737
3738 Method();
3739
3740 Method.fromJson(core.Map _json) {
3741 if (_json.containsKey("name")) {
3742 name = _json["name"];
3743 }
3744 if (_json.containsKey("options")) {
3745 options = _json["options"].map((value) => new Option.fromJson(value)).toLi st();
3746 }
3747 if (_json.containsKey("requestStreaming")) {
3748 requestStreaming = _json["requestStreaming"];
3749 }
3750 if (_json.containsKey("requestTypeUrl")) {
3751 requestTypeUrl = _json["requestTypeUrl"];
3752 }
3753 if (_json.containsKey("responseStreaming")) {
3754 responseStreaming = _json["responseStreaming"];
3755 }
3756 if (_json.containsKey("responseTypeUrl")) {
3757 responseTypeUrl = _json["responseTypeUrl"];
3758 }
3759 if (_json.containsKey("syntax")) {
3760 syntax = _json["syntax"];
3761 }
3762 }
3763
3764 core.Map toJson() {
3765 var _json = new core.Map();
3766 if (name != null) {
3767 _json["name"] = name;
3768 }
3769 if (options != null) {
3770 _json["options"] = options.map((value) => (value).toJson()).toList();
3771 }
3772 if (requestStreaming != null) {
3773 _json["requestStreaming"] = requestStreaming;
3774 }
3775 if (requestTypeUrl != null) {
3776 _json["requestTypeUrl"] = requestTypeUrl;
3777 }
3778 if (responseStreaming != null) {
3779 _json["responseStreaming"] = responseStreaming;
3780 }
3781 if (responseTypeUrl != null) {
3782 _json["responseTypeUrl"] = responseTypeUrl;
3783 }
3784 if (syntax != null) {
3785 _json["syntax"] = syntax;
3786 }
3787 return _json;
3788 }
3789 }
3790
3791 /** Defines a metric type and its schema. */
3792 class MetricDescriptor {
3793 /**
3794 * A detailed description of the metric, which can be used in documentation.
3795 */
3796 core.String description;
3797 /**
3798 * A concise name for the metric, which can be displayed in user interfaces.
3799 * Use sentence case without an ending period, for example "Request count".
3800 */
3801 core.String displayName;
3802 /**
3803 * The set of labels that can be used to describe a specific instance of this
3804 * metric type. For example, the
3805 * `compute.googleapis.com/instance/network/received_bytes_count` metric type
3806 * has a label, `loadbalanced`, that specifies whether the traffic was
3807 * received through a load balanced IP address.
3808 */
3809 core.List<LabelDescriptor> labels;
3810 /**
3811 * Whether the metric records instantaneous values, changes to a value, etc.
3812 * Possible string values are:
3813 * - "METRIC_KIND_UNSPECIFIED" : Do not use this default value.
3814 * - "GAUGE" : An instantaneous measurement of a value.
3815 * - "DELTA" : The change in a value during a time interval.
3816 * - "CUMULATIVE" : A value accumulated over a time interval. Cumulative
3817 * measurements in a time series should have the same start time
3818 * and increasing end times, until an event resets the cumulative
3819 * value to zero and sets a new start time for the following
3820 * points.
3821 */
3822 core.String metricKind;
3823 /**
3824 * Resource name. The format of the name may vary between different
3825 * implementations. For examples:
3826 *
3827 * projects/{project_id}/metricDescriptors/{type=**}
3828 * metricDescriptors/{type=**}
3829 */
3830 core.String name;
3831 /**
3832 * The metric type including a DNS name prefix, for example
3833 * `"compute.googleapis.com/instance/cpu/utilization"`. Metric types
3834 * should use a natural hierarchical grouping such as the following:
3835 *
3836 * compute.googleapis.com/instance/cpu/utilization
3837 * compute.googleapis.com/instance/disk/read_ops_count
3838 * compute.googleapis.com/instance/network/received_bytes_count
3839 *
3840 * Note that if the metric type changes, the monitoring data will be
3841 * discontinued, and anything depends on it will break, such as monitoring
3842 * dashboards, alerting rules and quota limits. Therefore, once a metric has
3843 * been published, its type should be immutable.
3844 */
3845 core.String type;
3846 /**
3847 * The unit in which the metric value is reported. It is only applicable
3848 * if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The
3849 * supported units are a subset of [The Unified Code for Units of
3850 * Measure](http://unitsofmeasure.org/ucum.html) standard:
3851 *
3852 * **Basic units (UNIT)**
3853 *
3854 * * `bit` bit
3855 * * `By` byte
3856 * * `s` second
3857 * * `min` minute
3858 * * `h` hour
3859 * * `d` day
3860 *
3861 * **Prefixes (PREFIX)**
3862 *
3863 * * `k` kilo (10**3)
3864 * * `M` mega (10**6)
3865 * * `G` giga (10**9)
3866 * * `T` tera (10**12)
3867 * * `P` peta (10**15)
3868 * * `E` exa (10**18)
3869 * * `Z` zetta (10**21)
3870 * * `Y` yotta (10**24)
3871 * * `m` milli (10**-3)
3872 * * `u` micro (10**-6)
3873 * * `n` nano (10**-9)
3874 * * `p` pico (10**-12)
3875 * * `f` femto (10**-15)
3876 * * `a` atto (10**-18)
3877 * * `z` zepto (10**-21)
3878 * * `y` yocto (10**-24)
3879 * * `Ki` kibi (2**10)
3880 * * `Mi` mebi (2**20)
3881 * * `Gi` gibi (2**30)
3882 * * `Ti` tebi (2**40)
3883 *
3884 * **Grammar**
3885 *
3886 * The grammar includes the dimensionless unit `1`, such as `1/s`.
3887 *
3888 * The grammar also includes these connectors:
3889 *
3890 * * `/` division (as an infix operator, e.g. `1/s`).
3891 * * `.` multiplication (as an infix operator, e.g. `GBy.d`)
3892 *
3893 * The grammar for a unit is as follows:
3894 *
3895 * Expression = Component { "." Component } { "/" Component } ;
3896 *
3897 * Component = [ PREFIX ] UNIT [ Annotation ]
3898 * | Annotation
3899 * | "1"
3900 * ;
3901 *
3902 * Annotation = "{" NAME "}" ;
3903 *
3904 * Notes:
3905 *
3906 * * `Annotation` is just a comment if it follows a `UNIT` and is
3907 * equivalent to `1` if it is used alone. For examples,
3908 * `{requests}/s == 1/s`, `By{transmitted}/s == By/s`.
3909 * * `NAME` is a sequence of non-blank printable ASCII characters not
3910 * containing '{' or '}'.
3911 */
3912 core.String unit;
3913 /**
3914 * Whether the measurement is an integer, a floating-point number, etc.
3915 * Possible string values are:
3916 * - "VALUE_TYPE_UNSPECIFIED" : Do not use this default value.
3917 * - "BOOL" : The value is a boolean.
3918 * This value type can be used only if the metric kind is `GAUGE`.
3919 * - "INT64" : The value is a signed 64-bit integer.
3920 * - "DOUBLE" : The value is a double precision floating point number.
3921 * - "STRING" : The value is a text string.
3922 * This value type can be used only if the metric kind is `GAUGE`.
3923 * - "DISTRIBUTION" : The value is a `Distribution`.
3924 * - "MONEY" : The value is money.
3925 */
3926 core.String valueType;
3927
3928 MetricDescriptor();
3929
3930 MetricDescriptor.fromJson(core.Map _json) {
3931 if (_json.containsKey("description")) {
3932 description = _json["description"];
3933 }
3934 if (_json.containsKey("displayName")) {
3935 displayName = _json["displayName"];
3936 }
3937 if (_json.containsKey("labels")) {
3938 labels = _json["labels"].map((value) => new LabelDescriptor.fromJson(value )).toList();
3939 }
3940 if (_json.containsKey("metricKind")) {
3941 metricKind = _json["metricKind"];
3942 }
3943 if (_json.containsKey("name")) {
3944 name = _json["name"];
3945 }
3946 if (_json.containsKey("type")) {
3947 type = _json["type"];
3948 }
3949 if (_json.containsKey("unit")) {
3950 unit = _json["unit"];
3951 }
3952 if (_json.containsKey("valueType")) {
3953 valueType = _json["valueType"];
3954 }
3955 }
3956
3957 core.Map toJson() {
3958 var _json = new core.Map();
3959 if (description != null) {
3960 _json["description"] = description;
3961 }
3962 if (displayName != null) {
3963 _json["displayName"] = displayName;
3964 }
3965 if (labels != null) {
3966 _json["labels"] = labels.map((value) => (value).toJson()).toList();
3967 }
3968 if (metricKind != null) {
3969 _json["metricKind"] = metricKind;
3970 }
3971 if (name != null) {
3972 _json["name"] = name;
3973 }
3974 if (type != null) {
3975 _json["type"] = type;
3976 }
3977 if (unit != null) {
3978 _json["unit"] = unit;
3979 }
3980 if (valueType != null) {
3981 _json["valueType"] = valueType;
3982 }
3983 return _json;
3984 }
3985 }
3986
3987 /**
3988 * Declares an API to be included in this API. The including API must
3989 * redeclare all the methods from the included API, but documentation
3990 * and options are inherited as follows:
3991 *
3992 * - If after comment and whitespace stripping, the documentation
3993 * string of the redeclared method is empty, it will be inherited
3994 * from the original method.
3995 *
3996 * - Each annotation belonging to the service config (http,
3997 * visibility) which is not set in the redeclared method will be
3998 * inherited.
3999 *
4000 * - If an http annotation is inherited, the path pattern will be
4001 * modified as follows. Any version prefix will be replaced by the
4002 * version of the including API plus the root path if specified.
4003 *
4004 * Example of a simple mixin:
4005 *
4006 * package google.acl.v1;
4007 * service AccessControl {
4008 * // Get the underlying ACL object.
4009 * rpc GetAcl(GetAclRequest) returns (Acl) {
4010 * option (google.api.http).get = "/v1/{resource=**}:getAcl";
4011 * }
4012 * }
4013 *
4014 * package google.storage.v2;
4015 * service Storage {
4016 * // rpc GetAcl(GetAclRequest) returns (Acl);
4017 *
4018 * // Get a data record.
4019 * rpc GetData(GetDataRequest) returns (Data) {
4020 * option (google.api.http).get = "/v2/{resource=**}";
4021 * }
4022 * }
4023 *
4024 * Example of a mixin configuration:
4025 *
4026 * apis:
4027 * - name: google.storage.v2.Storage
4028 * mixins:
4029 * - name: google.acl.v1.AccessControl
4030 *
4031 * The mixin construct implies that all methods in `AccessControl` are
4032 * also declared with same name and request/response types in
4033 * `Storage`. A documentation generator or annotation processor will
4034 * see the effective `Storage.GetAcl` method after inherting
4035 * documentation and annotations as follows:
4036 *
4037 * service Storage {
4038 * // Get the underlying ACL object.
4039 * rpc GetAcl(GetAclRequest) returns (Acl) {
4040 * option (google.api.http).get = "/v2/{resource=**}:getAcl";
4041 * }
4042 * ...
4043 * }
4044 *
4045 * Note how the version in the path pattern changed from `v1` to `v2`.
4046 *
4047 * If the `root` field in the mixin is specified, it should be a
4048 * relative path under which inherited HTTP paths are placed. Example:
4049 *
4050 * apis:
4051 * - name: google.storage.v2.Storage
4052 * mixins:
4053 * - name: google.acl.v1.AccessControl
4054 * root: acls
4055 *
4056 * This implies the following inherited HTTP annotation:
4057 *
4058 * service Storage {
4059 * // Get the underlying ACL object.
4060 * rpc GetAcl(GetAclRequest) returns (Acl) {
4061 * option (google.api.http).get = "/v2/acls/{resource=**}:getAcl";
4062 * }
4063 * ...
4064 * }
4065 */
4066 class Mixin {
4067 /** The fully qualified name of the API which is included. */
4068 core.String name;
4069 /**
4070 * If non-empty specifies a path under which inherited HTTP paths
4071 * are rooted.
4072 */
4073 core.String root;
4074
4075 Mixin();
4076
4077 Mixin.fromJson(core.Map _json) {
4078 if (_json.containsKey("name")) {
4079 name = _json["name"];
4080 }
4081 if (_json.containsKey("root")) {
4082 root = _json["root"];
4083 }
4084 }
4085
4086 core.Map toJson() {
4087 var _json = new core.Map();
4088 if (name != null) {
4089 _json["name"] = name;
4090 }
4091 if (root != null) {
4092 _json["root"] = root;
4093 }
4094 return _json;
4095 }
4096 }
4097
4098 /**
4099 * An object that describes the schema of a MonitoredResource object using a
4100 * type name and a set of labels. For example, the monitored resource
4101 * descriptor for Google Compute Engine VM instances has a type of
4102 * `"gce_instance"` and specifies the use of the labels `"instance_id"` and
4103 * `"zone"` to identify particular VM instances.
4104 *
4105 * Different APIs can support different monitored resource types. APIs generally
4106 * provide a `list` method that returns the monitored resource descriptors used
4107 * by the API.
4108 */
4109 class MonitoredResourceDescriptor {
4110 /**
4111 * Optional. A detailed description of the monitored resource type that might
4112 * be used in documentation.
4113 */
4114 core.String description;
4115 /**
4116 * Optional. A concise name for the monitored resource type that might be
4117 * displayed in user interfaces. For example, `"Google Cloud SQL Database"`.
4118 */
4119 core.String displayName;
4120 /**
4121 * Required. A set of labels used to describe instances of this monitored
4122 * resource type. For example, an individual Google Cloud SQL database is
4123 * identified by values for the labels `"database_id"` and `"zone"`.
4124 */
4125 core.List<LabelDescriptor> labels;
4126 /**
4127 * Optional. The resource name of the monitored resource descriptor:
4128 * `"projects/{project_id}/monitoredResourceDescriptors/{type}"` where
4129 * {type} is the value of the `type` field in this object and
4130 * {project_id} is a project ID that provides API-specific context for
4131 * accessing the type. APIs that do not use project information can use the
4132 * resource name format `"monitoredResourceDescriptors/{type}"`.
4133 */
4134 core.String name;
4135 /**
4136 * Required. The monitored resource type. For example, the type
4137 * `"cloudsql_database"` represents databases in Google Cloud SQL.
4138 * The maximum length of this value is 256 characters.
4139 */
4140 core.String type;
4141
4142 MonitoredResourceDescriptor();
4143
4144 MonitoredResourceDescriptor.fromJson(core.Map _json) {
4145 if (_json.containsKey("description")) {
4146 description = _json["description"];
4147 }
4148 if (_json.containsKey("displayName")) {
4149 displayName = _json["displayName"];
4150 }
4151 if (_json.containsKey("labels")) {
4152 labels = _json["labels"].map((value) => new LabelDescriptor.fromJson(value )).toList();
4153 }
4154 if (_json.containsKey("name")) {
4155 name = _json["name"];
4156 }
4157 if (_json.containsKey("type")) {
4158 type = _json["type"];
4159 }
4160 }
4161
4162 core.Map toJson() {
4163 var _json = new core.Map();
4164 if (description != null) {
4165 _json["description"] = description;
4166 }
4167 if (displayName != null) {
4168 _json["displayName"] = displayName;
4169 }
4170 if (labels != null) {
4171 _json["labels"] = labels.map((value) => (value).toJson()).toList();
4172 }
4173 if (name != null) {
4174 _json["name"] = name;
4175 }
4176 if (type != null) {
4177 _json["type"] = type;
4178 }
4179 return _json;
4180 }
4181 }
4182
4183 /**
4184 * Monitoring configuration of the service.
4185 *
4186 * The example below shows how to configure monitored resources and metrics
4187 * for monitoring. In the example, a monitored resource and two metrics are
4188 * defined. The `library.googleapis.com/book/returned_count` metric is sent
4189 * to both producer and consumer projects, whereas the
4190 * `library.googleapis.com/book/overdue_count` metric is only sent to the
4191 * consumer project.
4192 *
4193 * monitored_resources:
4194 * - type: library.googleapis.com/branch
4195 * labels:
4196 * - key: /city
4197 * description: The city where the library branch is located in.
4198 * - key: /name
4199 * description: The name of the branch.
4200 * metrics:
4201 * - name: library.googleapis.com/book/returned_count
4202 * metric_kind: DELTA
4203 * value_type: INT64
4204 * labels:
4205 * - key: /customer_id
4206 * - name: library.googleapis.com/book/overdue_count
4207 * metric_kind: GAUGE
4208 * value_type: INT64
4209 * labels:
4210 * - key: /customer_id
4211 * monitoring:
4212 * producer_destinations:
4213 * - monitored_resource: library.googleapis.com/branch
4214 * metrics:
4215 * - library.googleapis.com/book/returned_count
4216 * consumer_destinations:
4217 * - monitored_resource: library.googleapis.com/branch
4218 * metrics:
4219 * - library.googleapis.com/book/returned_count
4220 * - library.googleapis.com/book/overdue_count
4221 */
4222 class Monitoring {
4223 /**
4224 * Monitoring configurations for sending metrics to the consumer project.
4225 * There can be multiple consumer destinations, each one must have a
4226 * different monitored resource type. A metric can be used in at most
4227 * one consumer destination.
4228 */
4229 core.List<MonitoringDestination> consumerDestinations;
4230 /**
4231 * Monitoring configurations for sending metrics to the producer project.
4232 * There can be multiple producer destinations, each one must have a
4233 * different monitored resource type. A metric can be used in at most
4234 * one producer destination.
4235 */
4236 core.List<MonitoringDestination> producerDestinations;
4237
4238 Monitoring();
4239
4240 Monitoring.fromJson(core.Map _json) {
4241 if (_json.containsKey("consumerDestinations")) {
4242 consumerDestinations = _json["consumerDestinations"].map((value) => new Mo nitoringDestination.fromJson(value)).toList();
4243 }
4244 if (_json.containsKey("producerDestinations")) {
4245 producerDestinations = _json["producerDestinations"].map((value) => new Mo nitoringDestination.fromJson(value)).toList();
4246 }
4247 }
4248
4249 core.Map toJson() {
4250 var _json = new core.Map();
4251 if (consumerDestinations != null) {
4252 _json["consumerDestinations"] = consumerDestinations.map((value) => (value ).toJson()).toList();
4253 }
4254 if (producerDestinations != null) {
4255 _json["producerDestinations"] = producerDestinations.map((value) => (value ).toJson()).toList();
4256 }
4257 return _json;
4258 }
4259 }
4260
4261 /**
4262 * Configuration of a specific monitoring destination (the producer project
4263 * or the consumer project).
4264 */
4265 class MonitoringDestination {
4266 /**
4267 * Names of the metrics to report to this monitoring destination.
4268 * Each name must be defined in Service.metrics section.
4269 */
4270 core.List<core.String> metrics;
4271 /**
4272 * The monitored resource type. The type must be defined in
4273 * Service.monitored_resources section.
4274 */
4275 core.String monitoredResource;
4276
4277 MonitoringDestination();
4278
4279 MonitoringDestination.fromJson(core.Map _json) {
4280 if (_json.containsKey("metrics")) {
4281 metrics = _json["metrics"];
4282 }
4283 if (_json.containsKey("monitoredResource")) {
4284 monitoredResource = _json["monitoredResource"];
4285 }
4286 }
4287
4288 core.Map toJson() {
4289 var _json = new core.Map();
4290 if (metrics != null) {
4291 _json["metrics"] = metrics;
4292 }
4293 if (monitoredResource != null) {
4294 _json["monitoredResource"] = monitoredResource;
4295 }
4296 return _json;
4297 }
4298 }
4299
4300 /**
4301 * OAuth scopes are a way to define data and permissions on data. For example,
4302 * there are scopes defined for "Read-only access to Google Calendar" and
4303 * "Access to Cloud Platform". Users can consent to a scope for an application,
4304 * giving it permission to access that data on their behalf.
4305 *
4306 * OAuth scope specifications should be fairly coarse grained; a user will need
4307 * to see and understand the text description of what your scope means.
4308 *
4309 * In most cases: use one or at most two OAuth scopes for an entire family of
4310 * products. If your product has multiple APIs, you should probably be sharing
4311 * the OAuth scope across all of those APIs.
4312 *
4313 * When you need finer grained OAuth consent screens: talk with your product
4314 * management about how developers will use them in practice.
4315 *
4316 * Please note that even though each of the canonical scopes is enough for a
4317 * request to be accepted and passed to the backend, a request can still fail
4318 * due to the backend requiring additional scopes or permissions.
4319 */
4320 class OAuthRequirements {
4321 /**
4322 * The list of publicly documented OAuth scopes that are allowed access. An
4323 * OAuth token containing any of these scopes will be accepted.
4324 *
4325 * Example:
4326 *
4327 * canonical_scopes: https://www.googleapis.com/auth/calendar,
4328 * https://www.googleapis.com/auth/calendar.read
4329 */
4330 core.String canonicalScopes;
4331
4332 OAuthRequirements();
4333
4334 OAuthRequirements.fromJson(core.Map _json) {
4335 if (_json.containsKey("canonicalScopes")) {
4336 canonicalScopes = _json["canonicalScopes"];
4337 }
4338 }
4339
4340 core.Map toJson() {
4341 var _json = new core.Map();
4342 if (canonicalScopes != null) {
4343 _json["canonicalScopes"] = canonicalScopes;
4344 }
4345 return _json;
4346 }
4347 }
4348
4349 /**
4350 * This resource represents a long-running operation that is the result of a
4351 * network API call.
4352 */
4353 class Operation {
4354 /**
4355 * If the value is `false`, it means the operation is still in progress.
4356 * If true, the operation is completed, and either `error` or `response` is
4357 * available.
4358 */
4359 core.bool done;
4360 /** The error result of the operation in case of failure. */
4361 Status error;
4362 /**
4363 * Service-specific metadata associated with the operation. It typically
4364 * contains progress information and common metadata such as create time.
4365 * Some services might not provide such metadata. Any method that returns a
4366 * long-running operation should document the metadata type, if any.
4367 *
4368 * The values for Object must be JSON objects. It can consist of `num`,
4369 * `String`, `bool` and `null` as well as `Map` and `List` values.
4370 */
4371 core.Map<core.String, core.Object> metadata;
4372 /**
4373 * The server-assigned name, which is only unique within the same service that
4374 * originally returns it. If you use the default HTTP mapping, the
4375 * `name` should have the format of `operations/some/unique/name`.
4376 */
4377 core.String name;
4378 /**
4379 * The normal response of the operation in case of success. If the original
4380 * method returns no data on success, such as `Delete`, the response is
4381 * `google.protobuf.Empty`. If the original method is standard
4382 * `Get`/`Create`/`Update`, the response should be the resource. For other
4383 * methods, the response should have the type `XxxResponse`, where `Xxx`
4384 * is the original method name. For example, if the original method name
4385 * is `TakeSnapshot()`, the inferred response type is
4386 * `TakeSnapshotResponse`.
4387 *
4388 * The values for Object must be JSON objects. It can consist of `num`,
4389 * `String`, `bool` and `null` as well as `Map` and `List` values.
4390 */
4391 core.Map<core.String, core.Object> response;
4392
4393 Operation();
4394
4395 Operation.fromJson(core.Map _json) {
4396 if (_json.containsKey("done")) {
4397 done = _json["done"];
4398 }
4399 if (_json.containsKey("error")) {
4400 error = new Status.fromJson(_json["error"]);
4401 }
4402 if (_json.containsKey("metadata")) {
4403 metadata = _json["metadata"];
4404 }
4405 if (_json.containsKey("name")) {
4406 name = _json["name"];
4407 }
4408 if (_json.containsKey("response")) {
4409 response = _json["response"];
4410 }
4411 }
4412
4413 core.Map toJson() {
4414 var _json = new core.Map();
4415 if (done != null) {
4416 _json["done"] = done;
4417 }
4418 if (error != null) {
4419 _json["error"] = (error).toJson();
4420 }
4421 if (metadata != null) {
4422 _json["metadata"] = metadata;
4423 }
4424 if (name != null) {
4425 _json["name"] = name;
4426 }
4427 if (response != null) {
4428 _json["response"] = response;
4429 }
4430 return _json;
4431 }
4432 }
4433
4434 /** The metadata associated with a long running operation resource. */
4435 class OperationMetadata {
4436 /** Percentage of completion of this operation, ranging from 0 to 100. */
4437 core.int progressPercentage;
4438 /**
4439 * The full name of the resources that this operation is directly
4440 * associated with.
4441 */
4442 core.List<core.String> resourceNames;
4443 /** The start time of the operation. */
4444 core.String startTime;
4445 /** Detailed status information for each step. The order is undetermined. */
4446 core.List<Step> steps;
4447
4448 OperationMetadata();
4449
4450 OperationMetadata.fromJson(core.Map _json) {
4451 if (_json.containsKey("progressPercentage")) {
4452 progressPercentage = _json["progressPercentage"];
4453 }
4454 if (_json.containsKey("resourceNames")) {
4455 resourceNames = _json["resourceNames"];
4456 }
4457 if (_json.containsKey("startTime")) {
4458 startTime = _json["startTime"];
4459 }
4460 if (_json.containsKey("steps")) {
4461 steps = _json["steps"].map((value) => new Step.fromJson(value)).toList();
4462 }
4463 }
4464
4465 core.Map toJson() {
4466 var _json = new core.Map();
4467 if (progressPercentage != null) {
4468 _json["progressPercentage"] = progressPercentage;
4469 }
4470 if (resourceNames != null) {
4471 _json["resourceNames"] = resourceNames;
4472 }
4473 if (startTime != null) {
4474 _json["startTime"] = startTime;
4475 }
4476 if (steps != null) {
4477 _json["steps"] = steps.map((value) => (value).toJson()).toList();
4478 }
4479 return _json;
4480 }
4481 }
4482
4483 /**
4484 * A protocol buffer option, which can be attached to a message, field,
4485 * enumeration, etc.
4486 */
4487 class Option {
4488 /** The option's name. For example, `"java_package"`. */
4489 core.String name;
4490 /**
4491 * The option's value. For example, `"com.google.protobuf"`.
4492 *
4493 * The values for Object must be JSON objects. It can consist of `num`,
4494 * `String`, `bool` and `null` as well as `Map` and `List` values.
4495 */
4496 core.Map<core.String, core.Object> value;
4497
4498 Option();
4499
4500 Option.fromJson(core.Map _json) {
4501 if (_json.containsKey("name")) {
4502 name = _json["name"];
4503 }
4504 if (_json.containsKey("value")) {
4505 value = _json["value"];
4506 }
4507 }
4508
4509 core.Map toJson() {
4510 var _json = new core.Map();
4511 if (name != null) {
4512 _json["name"] = name;
4513 }
4514 if (value != null) {
4515 _json["value"] = value;
4516 }
4517 return _json;
4518 }
4519 }
4520
4521 /**
4522 * Represents a documentation page. A page can contain subpages to represent
4523 * nested documentation set structure.
4524 */
4525 class Page {
4526 /**
4527 * The Markdown content of the page. You can use <code>&#40;== include {path}
4528 * ==&#41;</code>
4529 * to include content from a Markdown file.
4530 */
4531 core.String content;
4532 /**
4533 * The name of the page. It will be used as an identity of the page to
4534 * generate URI of the page, text of the link to this page in navigation,
4535 * etc. The full page name (start from the root page name to this page
4536 * concatenated with `.`) can be used as reference to the page in your
4537 * documentation. For example:
4538 * <pre><code>pages:
4539 * - name: Tutorial
4540 * content: &#40;== include tutorial.md ==&#41;
4541 * subpages:
4542 * - name: Java
4543 * content: &#40;== include tutorial_java.md ==&#41;
4544 * </code></pre>
4545 * You can reference `Java` page using Markdown reference link syntax:
4546 * `Java`.
4547 */
4548 core.String name;
4549 /**
4550 * Subpages of this page. The order of subpages specified here will be
4551 * honored in the generated docset.
4552 */
4553 core.List<Page> subpages;
4554
4555 Page();
4556
4557 Page.fromJson(core.Map _json) {
4558 if (_json.containsKey("content")) {
4559 content = _json["content"];
4560 }
4561 if (_json.containsKey("name")) {
4562 name = _json["name"];
4563 }
4564 if (_json.containsKey("subpages")) {
4565 subpages = _json["subpages"].map((value) => new Page.fromJson(value)).toLi st();
4566 }
4567 }
4568
4569 core.Map toJson() {
4570 var _json = new core.Map();
4571 if (content != null) {
4572 _json["content"] = content;
4573 }
4574 if (name != null) {
4575 _json["name"] = name;
4576 }
4577 if (subpages != null) {
4578 _json["subpages"] = subpages.map((value) => (value).toJson()).toList();
4579 }
4580 return _json;
4581 }
4582 }
4583
4584 /**
4585 * Defines an Identity and Access Management (IAM) policy. It is used to
4586 * specify access control policies for Cloud Platform resources.
4587 *
4588 *
4589 * A `Policy` consists of a list of `bindings`. A `Binding` binds a list of
4590 * `members` to a `role`, where the members can be user accounts, Google groups,
4591 * Google domains, and service accounts. A `role` is a named list of permissions
4592 * defined by IAM.
4593 *
4594 * **Example**
4595 *
4596 * {
4597 * "bindings": [
4598 * {
4599 * "role": "roles/owner",
4600 * "members": [
4601 * "user:mike@example.com",
4602 * "group:admins@example.com",
4603 * "domain:google.com",
4604 * "serviceAccount:my-other-app@appspot.gserviceaccount.com",
4605 * ]
4606 * },
4607 * {
4608 * "role": "roles/viewer",
4609 * "members": ["user:sean@example.com"]
4610 * }
4611 * ]
4612 * }
4613 *
4614 * For a description of IAM and its features, see the
4615 * [IAM developer's guide](https://cloud.google.com/iam).
4616 */
4617 class Policy {
4618 /**
4619 * Specifies audit logging configs for "data access".
4620 * "data access": generally refers to data reads/writes and admin reads.
4621 * "admin activity": generally refers to admin writes.
4622 *
4623 * Note: `AuditConfig` doesn't apply to "admin activity", which always
4624 * enables audit logging.
4625 */
4626 core.List<AuditConfig> auditConfigs;
4627 /**
4628 * Associates a list of `members` to a `role`.
4629 * Multiple `bindings` must not be specified for the same `role`.
4630 * `bindings` with no members will result in an error.
4631 */
4632 core.List<Binding> bindings;
4633 /**
4634 * `etag` is used for optimistic concurrency control as a way to help
4635 * prevent simultaneous updates of a policy from overwriting each other.
4636 * It is strongly suggested that systems make use of the `etag` in the
4637 * read-modify-write cycle to perform policy updates in order to avoid race
4638 * conditions: An `etag` is returned in the response to `getIamPolicy`, and
4639 * systems are expected to put that etag in the request to `setIamPolicy` to
4640 * ensure that their change will be applied to the same version of the policy.
4641 *
4642 * If no `etag` is provided in the call to `setIamPolicy`, then the existing
4643 * policy is overwritten blindly.
4644 */
4645 core.String etag;
4646 core.List<core.int> get etagAsBytes {
4647 return convert.BASE64.decode(etag);
4648 }
4649
4650 void set etagAsBytes(core.List<core.int> _bytes) {
4651 etag = convert.BASE64.encode(_bytes).replaceAll("/", "_").replaceAll("+", "- ");
4652 }
4653 core.bool iamOwned;
4654 /**
4655 * If more than one rule is specified, the rules are applied in the following
4656 * manner:
4657 * - All matching LOG rules are always applied.
4658 * - If any DENY/DENY_WITH_LOG rule matches, permission is denied.
4659 * Logging will be applied if one or more matching rule requires logging.
4660 * - Otherwise, if any ALLOW/ALLOW_WITH_LOG rule matches, permission is
4661 * granted.
4662 * Logging will be applied if one or more matching rule requires logging.
4663 * - Otherwise, if no rule applies, permission is denied.
4664 */
4665 core.List<Rule> rules;
4666 /** Version of the `Policy`. The default version is 0. */
4667 core.int version;
4668
4669 Policy();
4670
4671 Policy.fromJson(core.Map _json) {
4672 if (_json.containsKey("auditConfigs")) {
4673 auditConfigs = _json["auditConfigs"].map((value) => new AuditConfig.fromJs on(value)).toList();
4674 }
4675 if (_json.containsKey("bindings")) {
4676 bindings = _json["bindings"].map((value) => new Binding.fromJson(value)).t oList();
4677 }
4678 if (_json.containsKey("etag")) {
4679 etag = _json["etag"];
4680 }
4681 if (_json.containsKey("iamOwned")) {
4682 iamOwned = _json["iamOwned"];
4683 }
4684 if (_json.containsKey("rules")) {
4685 rules = _json["rules"].map((value) => new Rule.fromJson(value)).toList();
4686 }
4687 if (_json.containsKey("version")) {
4688 version = _json["version"];
4689 }
4690 }
4691
4692 core.Map toJson() {
4693 var _json = new core.Map();
4694 if (auditConfigs != null) {
4695 _json["auditConfigs"] = auditConfigs.map((value) => (value).toJson()).toLi st();
4696 }
4697 if (bindings != null) {
4698 _json["bindings"] = bindings.map((value) => (value).toJson()).toList();
4699 }
4700 if (etag != null) {
4701 _json["etag"] = etag;
4702 }
4703 if (iamOwned != null) {
4704 _json["iamOwned"] = iamOwned;
4705 }
4706 if (rules != null) {
4707 _json["rules"] = rules.map((value) => (value).toJson()).toList();
4708 }
4709 if (version != null) {
4710 _json["version"] = version;
4711 }
4712 return _json;
4713 }
4714 }
4715
4716 /**
4717 * A rollout resource that defines how service configuration versions are pushed
4718 * to control plane systems. Typically, you create a new version of the
4719 * service config, and then create a Rollout to push the service config.
4720 */
4721 class Rollout {
4722 /** Creation time of the rollout. Readonly. */
4723 core.String createTime;
4724 /** The user who created the Rollout. Readonly. */
4725 core.String createdBy;
4726 /**
4727 * The strategy associated with a rollout to delete a `ManagedService`.
4728 * Readonly.
4729 */
4730 DeleteServiceStrategy deleteServiceStrategy;
4731 /**
4732 * Optional unique identifier of this Rollout. Only lower case letters, digits
4733 * and '-' are allowed.
4734 *
4735 * If not specified by client, the server will generate one. The generated id
4736 * will have the form of <date><revision number>, where "date" is the create
4737 * date in ISO 8601 format. "revision number" is a monotonically increasing
4738 * positive number that is reset every day for each service.
4739 * An example of the generated rollout_id is '2016-02-16r1'
4740 */
4741 core.String rolloutId;
4742 /** The name of the service associated with this Rollout. */
4743 core.String serviceName;
4744 /**
4745 * The status of this rollout. Readonly. In case of a failed rollout,
4746 * the system will automatically rollback to the current Rollout
4747 * version. Readonly.
4748 * Possible string values are:
4749 * - "ROLLOUT_STATUS_UNSPECIFIED" : No status specified.
4750 * - "IN_PROGRESS" : The Rollout is in progress.
4751 * - "SUCCESS" : The Rollout has completed successfully.
4752 * - "CANCELLED" : The Rollout has been cancelled. This can happen if you have
4753 * overlapping
4754 * Rollout pushes, and the previous ones will be cancelled.
4755 * - "FAILED" : The Rollout has failed. It is typically caused by
4756 * configuration errors.
4757 * - "PENDING" : The Rollout has started yet and is pending for execution.
4758 */
4759 core.String status;
4760 /**
4761 * Google Service Control selects service configurations based on
4762 * traffic percentage.
4763 */
4764 TrafficPercentStrategy trafficPercentStrategy;
4765
4766 Rollout();
4767
4768 Rollout.fromJson(core.Map _json) {
4769 if (_json.containsKey("createTime")) {
4770 createTime = _json["createTime"];
4771 }
4772 if (_json.containsKey("createdBy")) {
4773 createdBy = _json["createdBy"];
4774 }
4775 if (_json.containsKey("deleteServiceStrategy")) {
4776 deleteServiceStrategy = new DeleteServiceStrategy.fromJson(_json["deleteSe rviceStrategy"]);
4777 }
4778 if (_json.containsKey("rolloutId")) {
4779 rolloutId = _json["rolloutId"];
4780 }
4781 if (_json.containsKey("serviceName")) {
4782 serviceName = _json["serviceName"];
4783 }
4784 if (_json.containsKey("status")) {
4785 status = _json["status"];
4786 }
4787 if (_json.containsKey("trafficPercentStrategy")) {
4788 trafficPercentStrategy = new TrafficPercentStrategy.fromJson(_json["traffi cPercentStrategy"]);
4789 }
4790 }
4791
4792 core.Map toJson() {
4793 var _json = new core.Map();
4794 if (createTime != null) {
4795 _json["createTime"] = createTime;
4796 }
4797 if (createdBy != null) {
4798 _json["createdBy"] = createdBy;
4799 }
4800 if (deleteServiceStrategy != null) {
4801 _json["deleteServiceStrategy"] = (deleteServiceStrategy).toJson();
4802 }
4803 if (rolloutId != null) {
4804 _json["rolloutId"] = rolloutId;
4805 }
4806 if (serviceName != null) {
4807 _json["serviceName"] = serviceName;
4808 }
4809 if (status != null) {
4810 _json["status"] = status;
4811 }
4812 if (trafficPercentStrategy != null) {
4813 _json["trafficPercentStrategy"] = (trafficPercentStrategy).toJson();
4814 }
4815 return _json;
4816 }
4817 }
4818
4819 /** A rule to be applied in a Policy. */
4820 class Rule {
4821 /**
4822 * Required
4823 * Possible string values are:
4824 * - "NO_ACTION" : Default no action.
4825 * - "ALLOW" : Matching 'Entries' grant access.
4826 * - "ALLOW_WITH_LOG" : Matching 'Entries' grant access and the caller
4827 * promises to log
4828 * the request per the returned log_configs.
4829 * - "DENY" : Matching 'Entries' deny access.
4830 * - "DENY_WITH_LOG" : Matching 'Entries' deny access and the caller promises
4831 * to log
4832 * the request per the returned log_configs.
4833 * - "LOG" : Matching 'Entries' tell IAM.Check callers to generate logs.
4834 */
4835 core.String action;
4836 /** Additional restrictions that must be met */
4837 core.List<Condition> conditions;
4838 /** Human-readable description of the rule. */
4839 core.String description;
4840 /**
4841 * If one or more 'in' clauses are specified, the rule matches if
4842 * the PRINCIPAL/AUTHORITY_SELECTOR is in at least one of these entries.
4843 */
4844 core.List<core.String> in_;
4845 /**
4846 * The config returned to callers of tech.iam.IAM.CheckPolicy for any entries
4847 * that match the LOG action.
4848 */
4849 core.List<LogConfig> logConfig;
4850 /**
4851 * If one or more 'not_in' clauses are specified, the rule matches
4852 * if the PRINCIPAL/AUTHORITY_SELECTOR is in none of the entries.
4853 * The format for in and not_in entries is the same as for members in a
4854 * Binding (see google/iam/v1/policy.proto).
4855 */
4856 core.List<core.String> notIn;
4857 /**
4858 * A permission is a string of form '<service>.<resource type>.<verb>'
4859 * (e.g., 'storage.buckets.list'). A value of '*' matches all permissions,
4860 * and a verb part of '*' (e.g., 'storage.buckets.*') matches all verbs.
4861 */
4862 core.List<core.String> permissions;
4863
4864 Rule();
4865
4866 Rule.fromJson(core.Map _json) {
4867 if (_json.containsKey("action")) {
4868 action = _json["action"];
4869 }
4870 if (_json.containsKey("conditions")) {
4871 conditions = _json["conditions"].map((value) => new Condition.fromJson(val ue)).toList();
4872 }
4873 if (_json.containsKey("description")) {
4874 description = _json["description"];
4875 }
4876 if (_json.containsKey("in")) {
4877 in_ = _json["in"];
4878 }
4879 if (_json.containsKey("logConfig")) {
4880 logConfig = _json["logConfig"].map((value) => new LogConfig.fromJson(value )).toList();
4881 }
4882 if (_json.containsKey("notIn")) {
4883 notIn = _json["notIn"];
4884 }
4885 if (_json.containsKey("permissions")) {
4886 permissions = _json["permissions"];
4887 }
4888 }
4889
4890 core.Map toJson() {
4891 var _json = new core.Map();
4892 if (action != null) {
4893 _json["action"] = action;
4894 }
4895 if (conditions != null) {
4896 _json["conditions"] = conditions.map((value) => (value).toJson()).toList() ;
4897 }
4898 if (description != null) {
4899 _json["description"] = description;
4900 }
4901 if (in_ != null) {
4902 _json["in"] = in_;
4903 }
4904 if (logConfig != null) {
4905 _json["logConfig"] = logConfig.map((value) => (value).toJson()).toList();
4906 }
4907 if (notIn != null) {
4908 _json["notIn"] = notIn;
4909 }
4910 if (permissions != null) {
4911 _json["permissions"] = permissions;
4912 }
4913 return _json;
4914 }
4915 }
4916
4917 /**
4918 * `Service` is the root object of the configuration schema. It
4919 * describes basic information like the name of the service and the
4920 * exposed API interfaces, and delegates other aspects to configuration
4921 * sub-sections.
4922 *
4923 * Example:
4924 *
4925 * type: google.api.Service
4926 * config_version: 1
4927 * name: calendar.googleapis.com
4928 * title: Google Calendar API
4929 * apis:
4930 * - name: google.calendar.Calendar
4931 * backend:
4932 * rules:
4933 * - selector: "*"
4934 * address: calendar.example.com
4935 */
4936 class Service {
4937 /**
4938 * A list of API interfaces exported by this service. Only the `name` field
4939 * of the google.protobuf.Api needs to be provided by the configuration
4940 * author, as the remaining fields will be derived from the IDL during the
4941 * normalization process. It is an error to specify an API interface here
4942 * which cannot be resolved against the associated IDL files.
4943 */
4944 core.List<Api> apis;
4945 /** Auth configuration. */
4946 Authentication authentication;
4947 /** API backend configuration. */
4948 Backend backend;
4949 /**
4950 * The version of the service configuration. The config version may
4951 * influence interpretation of the configuration, for example, to
4952 * determine defaults. This is documented together with applicable
4953 * options. The current default for the config version itself is `3`.
4954 */
4955 core.int configVersion;
4956 /** Context configuration. */
4957 Context context;
4958 /** Configuration for the service control plane. */
4959 Control control;
4960 /** Custom error configuration. */
4961 CustomError customError;
4962 /** Additional API documentation. */
4963 Documentation documentation;
4964 /**
4965 * A list of all enum types included in this API service. Enums
4966 * referenced directly or indirectly by the `apis` are automatically
4967 * included. Enums which are not referenced but shall be included
4968 * should be listed here by name. Example:
4969 *
4970 * enums:
4971 * - name: google.someapi.v1.SomeEnum
4972 */
4973 core.List<Enum> enums;
4974 /** HTTP configuration. */
4975 Http http;
4976 /**
4977 * A unique ID for a specific instance of this message, typically assigned
4978 * by the client for tracking purpose. If empty, the server may choose to
4979 * generate one instead.
4980 */
4981 core.String id;
4982 /** Logging configuration of the service. */
4983 Logging logging;
4984 /** Defines the logs used by this service. */
4985 core.List<LogDescriptor> logs;
4986 /** Defines the metrics used by this service. */
4987 core.List<MetricDescriptor> metrics;
4988 /**
4989 * Defines the monitored resources used by this service. This is required
4990 * by the Service.monitoring and Service.logging configurations.
4991 */
4992 core.List<MonitoredResourceDescriptor> monitoredResources;
4993 /** Monitoring configuration of the service. */
4994 Monitoring monitoring;
4995 /**
4996 * The DNS address at which this service is available,
4997 * e.g. `calendar.googleapis.com`.
4998 */
4999 core.String name;
5000 /**
5001 * The id of the Google developer project that owns the service.
5002 * Members of this project can manage the service configuration,
5003 * manage consumption of the service, etc.
5004 */
5005 core.String producerProjectId;
5006 /** Configuration for system parameters. */
5007 SystemParameters systemParameters;
5008 /**
5009 * A list of all proto message types included in this API service.
5010 * It serves similar purpose as [google.api.Service.types], except that
5011 * these types are not needed by user-defined APIs. Therefore, they will not
5012 * show up in the generated discovery doc. This field should only be used
5013 * to define system APIs in ESF.
5014 */
5015 core.List<Type> systemTypes;
5016 /** The product title associated with this service. */
5017 core.String title;
5018 /**
5019 * A list of all proto message types included in this API service.
5020 * Types referenced directly or indirectly by the `apis` are
5021 * automatically included. Messages which are not referenced but
5022 * shall be included, such as types used by the `google.protobuf.Any` type,
5023 * should be listed here by name. Example:
5024 *
5025 * types:
5026 * - name: google.protobuf.Int32
5027 */
5028 core.List<Type> types;
5029 /** Configuration controlling usage of this service. */
5030 Usage usage;
5031 /** API visibility configuration. */
5032 Visibility visibility;
5033
5034 Service();
5035
5036 Service.fromJson(core.Map _json) {
5037 if (_json.containsKey("apis")) {
5038 apis = _json["apis"].map((value) => new Api.fromJson(value)).toList();
5039 }
5040 if (_json.containsKey("authentication")) {
5041 authentication = new Authentication.fromJson(_json["authentication"]);
5042 }
5043 if (_json.containsKey("backend")) {
5044 backend = new Backend.fromJson(_json["backend"]);
5045 }
5046 if (_json.containsKey("configVersion")) {
5047 configVersion = _json["configVersion"];
5048 }
5049 if (_json.containsKey("context")) {
5050 context = new Context.fromJson(_json["context"]);
5051 }
5052 if (_json.containsKey("control")) {
5053 control = new Control.fromJson(_json["control"]);
5054 }
5055 if (_json.containsKey("customError")) {
5056 customError = new CustomError.fromJson(_json["customError"]);
5057 }
5058 if (_json.containsKey("documentation")) {
5059 documentation = new Documentation.fromJson(_json["documentation"]);
5060 }
5061 if (_json.containsKey("enums")) {
5062 enums = _json["enums"].map((value) => new Enum.fromJson(value)).toList();
5063 }
5064 if (_json.containsKey("http")) {
5065 http = new Http.fromJson(_json["http"]);
5066 }
5067 if (_json.containsKey("id")) {
5068 id = _json["id"];
5069 }
5070 if (_json.containsKey("logging")) {
5071 logging = new Logging.fromJson(_json["logging"]);
5072 }
5073 if (_json.containsKey("logs")) {
5074 logs = _json["logs"].map((value) => new LogDescriptor.fromJson(value)).toL ist();
5075 }
5076 if (_json.containsKey("metrics")) {
5077 metrics = _json["metrics"].map((value) => new MetricDescriptor.fromJson(va lue)).toList();
5078 }
5079 if (_json.containsKey("monitoredResources")) {
5080 monitoredResources = _json["monitoredResources"].map((value) => new Monito redResourceDescriptor.fromJson(value)).toList();
5081 }
5082 if (_json.containsKey("monitoring")) {
5083 monitoring = new Monitoring.fromJson(_json["monitoring"]);
5084 }
5085 if (_json.containsKey("name")) {
5086 name = _json["name"];
5087 }
5088 if (_json.containsKey("producerProjectId")) {
5089 producerProjectId = _json["producerProjectId"];
5090 }
5091 if (_json.containsKey("systemParameters")) {
5092 systemParameters = new SystemParameters.fromJson(_json["systemParameters"] );
5093 }
5094 if (_json.containsKey("systemTypes")) {
5095 systemTypes = _json["systemTypes"].map((value) => new Type.fromJson(value) ).toList();
5096 }
5097 if (_json.containsKey("title")) {
5098 title = _json["title"];
5099 }
5100 if (_json.containsKey("types")) {
5101 types = _json["types"].map((value) => new Type.fromJson(value)).toList();
5102 }
5103 if (_json.containsKey("usage")) {
5104 usage = new Usage.fromJson(_json["usage"]);
5105 }
5106 if (_json.containsKey("visibility")) {
5107 visibility = new Visibility.fromJson(_json["visibility"]);
5108 }
5109 }
5110
5111 core.Map toJson() {
5112 var _json = new core.Map();
5113 if (apis != null) {
5114 _json["apis"] = apis.map((value) => (value).toJson()).toList();
5115 }
5116 if (authentication != null) {
5117 _json["authentication"] = (authentication).toJson();
5118 }
5119 if (backend != null) {
5120 _json["backend"] = (backend).toJson();
5121 }
5122 if (configVersion != null) {
5123 _json["configVersion"] = configVersion;
5124 }
5125 if (context != null) {
5126 _json["context"] = (context).toJson();
5127 }
5128 if (control != null) {
5129 _json["control"] = (control).toJson();
5130 }
5131 if (customError != null) {
5132 _json["customError"] = (customError).toJson();
5133 }
5134 if (documentation != null) {
5135 _json["documentation"] = (documentation).toJson();
5136 }
5137 if (enums != null) {
5138 _json["enums"] = enums.map((value) => (value).toJson()).toList();
5139 }
5140 if (http != null) {
5141 _json["http"] = (http).toJson();
5142 }
5143 if (id != null) {
5144 _json["id"] = id;
5145 }
5146 if (logging != null) {
5147 _json["logging"] = (logging).toJson();
5148 }
5149 if (logs != null) {
5150 _json["logs"] = logs.map((value) => (value).toJson()).toList();
5151 }
5152 if (metrics != null) {
5153 _json["metrics"] = metrics.map((value) => (value).toJson()).toList();
5154 }
5155 if (monitoredResources != null) {
5156 _json["monitoredResources"] = monitoredResources.map((value) => (value).to Json()).toList();
5157 }
5158 if (monitoring != null) {
5159 _json["monitoring"] = (monitoring).toJson();
5160 }
5161 if (name != null) {
5162 _json["name"] = name;
5163 }
5164 if (producerProjectId != null) {
5165 _json["producerProjectId"] = producerProjectId;
5166 }
5167 if (systemParameters != null) {
5168 _json["systemParameters"] = (systemParameters).toJson();
5169 }
5170 if (systemTypes != null) {
5171 _json["systemTypes"] = systemTypes.map((value) => (value).toJson()).toList ();
5172 }
5173 if (title != null) {
5174 _json["title"] = title;
5175 }
5176 if (types != null) {
5177 _json["types"] = types.map((value) => (value).toJson()).toList();
5178 }
5179 if (usage != null) {
5180 _json["usage"] = (usage).toJson();
5181 }
5182 if (visibility != null) {
5183 _json["visibility"] = (visibility).toJson();
5184 }
5185 return _json;
5186 }
5187 }
5188
5189 /** Request message for `SetIamPolicy` method. */
5190 class SetIamPolicyRequest {
5191 /**
5192 * REQUIRED: The complete policy to be applied to the `resource`. The size of
5193 * the policy is limited to a few 10s of KB. An empty policy is a
5194 * valid policy but certain Cloud Platform services (such as Projects)
5195 * might reject them.
5196 */
5197 Policy policy;
5198
5199 SetIamPolicyRequest();
5200
5201 SetIamPolicyRequest.fromJson(core.Map _json) {
5202 if (_json.containsKey("policy")) {
5203 policy = new Policy.fromJson(_json["policy"]);
5204 }
5205 }
5206
5207 core.Map toJson() {
5208 var _json = new core.Map();
5209 if (policy != null) {
5210 _json["policy"] = (policy).toJson();
5211 }
5212 return _json;
5213 }
5214 }
5215
5216 /**
5217 * `SourceContext` represents information about the source of a
5218 * protobuf element, like the file in which it is defined.
5219 */
5220 class SourceContext {
5221 /**
5222 * The path-qualified name of the .proto file that contained the associated
5223 * protobuf element. For example: `"google/protobuf/source_context.proto"`.
5224 */
5225 core.String fileName;
5226
5227 SourceContext();
5228
5229 SourceContext.fromJson(core.Map _json) {
5230 if (_json.containsKey("fileName")) {
5231 fileName = _json["fileName"];
5232 }
5233 }
5234
5235 core.Map toJson() {
5236 var _json = new core.Map();
5237 if (fileName != null) {
5238 _json["fileName"] = fileName;
5239 }
5240 return _json;
5241 }
5242 }
5243
5244 /**
5245 * The `Status` type defines a logical error model that is suitable for
5246 * different
5247 * programming environments, including REST APIs and RPC APIs. It is used by
5248 * [gRPC](https://github.com/grpc). The error model is designed to be:
5249 *
5250 * - Simple to use and understand for most users
5251 * - Flexible enough to meet unexpected needs
5252 *
5253 * # Overview
5254 *
5255 * The `Status` message contains three pieces of data: error code, error
5256 * message,
5257 * and error details. The error code should be an enum value of
5258 * google.rpc.Code, but it may accept additional error codes if needed. The
5259 * error message should be a developer-facing English message that helps
5260 * developers *understand* and *resolve* the error. If a localized user-facing
5261 * error message is needed, put the localized message in the error details or
5262 * localize it in the client. The optional error details may contain arbitrary
5263 * information about the error. There is a predefined set of error detail types
5264 * in the package `google.rpc` which can be used for common error conditions.
5265 *
5266 * # Language mapping
5267 *
5268 * The `Status` message is the logical representation of the error model, but it
5269 * is not necessarily the actual wire format. When the `Status` message is
5270 * exposed in different client libraries and different wire protocols, it can be
5271 * mapped differently. For example, it will likely be mapped to some exceptions
5272 * in Java, but more likely mapped to some error codes in C.
5273 *
5274 * # Other uses
5275 *
5276 * The error model and the `Status` message can be used in a variety of
5277 * environments, either with or without APIs, to provide a
5278 * consistent developer experience across different environments.
5279 *
5280 * Example uses of this error model include:
5281 *
5282 * - Partial errors. If a service needs to return partial errors to the client,
5283 * it may embed the `Status` in the normal response to indicate the partial
5284 * errors.
5285 *
5286 * - Workflow errors. A typical workflow has multiple steps. Each step may
5287 * have a `Status` message for error reporting purpose.
5288 *
5289 * - Batch operations. If a client uses batch request and batch response, the
5290 * `Status` message should be used directly inside batch response, one for
5291 * each error sub-response.
5292 *
5293 * - Asynchronous operations. If an API call embeds asynchronous operation
5294 * results in its response, the status of those operations should be
5295 * represented directly using the `Status` message.
5296 *
5297 * - Logging. If some API errors are stored in logs, the message `Status` could
5298 * be used directly after any stripping needed for security/privacy reasons.
5299 */
5300 class Status {
5301 /** The status code, which should be an enum value of google.rpc.Code. */
5302 core.int code;
5303 /**
5304 * A list of messages that carry the error details. There will be a
5305 * common set of message types for APIs to use.
5306 *
5307 * The values for Object must be JSON objects. It can consist of `num`,
5308 * `String`, `bool` and `null` as well as `Map` and `List` values.
5309 */
5310 core.List<core.Map<core.String, core.Object>> details;
5311 /**
5312 * A developer-facing error message, which should be in English. Any
5313 * user-facing error message should be localized and sent in the
5314 * google.rpc.Status.details field, or localized by the client.
5315 */
5316 core.String message;
5317
5318 Status();
5319
5320 Status.fromJson(core.Map _json) {
5321 if (_json.containsKey("code")) {
5322 code = _json["code"];
5323 }
5324 if (_json.containsKey("details")) {
5325 details = _json["details"];
5326 }
5327 if (_json.containsKey("message")) {
5328 message = _json["message"];
5329 }
5330 }
5331
5332 core.Map toJson() {
5333 var _json = new core.Map();
5334 if (code != null) {
5335 _json["code"] = code;
5336 }
5337 if (details != null) {
5338 _json["details"] = details;
5339 }
5340 if (message != null) {
5341 _json["message"] = message;
5342 }
5343 return _json;
5344 }
5345 }
5346
5347 /** Represents the status of one operation step. */
5348 class Step {
5349 /** The short description of the step. */
5350 core.String description;
5351 /**
5352 * The status code.
5353 * Possible string values are:
5354 * - "STATUS_UNSPECIFIED" : Unspecifed code.
5355 * - "DONE" : The step has completed without errors.
5356 * - "NOT_STARTED" : The step has not started yet.
5357 * - "IN_PROGRESS" : The step is in progress.
5358 * - "FAILED" : The step has completed with errors.
5359 * - "CANCELLED" : The step has completed with cancellation.
5360 */
5361 core.String status;
5362
5363 Step();
5364
5365 Step.fromJson(core.Map _json) {
5366 if (_json.containsKey("description")) {
5367 description = _json["description"];
5368 }
5369 if (_json.containsKey("status")) {
5370 status = _json["status"];
5371 }
5372 }
5373
5374 core.Map toJson() {
5375 var _json = new core.Map();
5376 if (description != null) {
5377 _json["description"] = description;
5378 }
5379 if (status != null) {
5380 _json["status"] = status;
5381 }
5382 return _json;
5383 }
5384 }
5385
5386 /** Request message for SubmitConfigSource method. */
5387 class SubmitConfigSourceRequest {
5388 /** The source configuration for the service. */
5389 ConfigSource configSource;
5390 /**
5391 * Optional. If set, this will result in the generation of a
5392 * `google.api.Service` configuration based on the `ConfigSource` provided,
5393 * but the generated config and the sources will NOT be persisted.
5394 */
5395 core.bool validateOnly;
5396
5397 SubmitConfigSourceRequest();
5398
5399 SubmitConfigSourceRequest.fromJson(core.Map _json) {
5400 if (_json.containsKey("configSource")) {
5401 configSource = new ConfigSource.fromJson(_json["configSource"]);
5402 }
5403 if (_json.containsKey("validateOnly")) {
5404 validateOnly = _json["validateOnly"];
5405 }
5406 }
5407
5408 core.Map toJson() {
5409 var _json = new core.Map();
5410 if (configSource != null) {
5411 _json["configSource"] = (configSource).toJson();
5412 }
5413 if (validateOnly != null) {
5414 _json["validateOnly"] = validateOnly;
5415 }
5416 return _json;
5417 }
5418 }
5419
5420 /** Response message for SubmitConfigSource method. */
5421 class SubmitConfigSourceResponse {
5422 /** The generated service configuration. */
5423 Service serviceConfig;
5424
5425 SubmitConfigSourceResponse();
5426
5427 SubmitConfigSourceResponse.fromJson(core.Map _json) {
5428 if (_json.containsKey("serviceConfig")) {
5429 serviceConfig = new Service.fromJson(_json["serviceConfig"]);
5430 }
5431 }
5432
5433 core.Map toJson() {
5434 var _json = new core.Map();
5435 if (serviceConfig != null) {
5436 _json["serviceConfig"] = (serviceConfig).toJson();
5437 }
5438 return _json;
5439 }
5440 }
5441
5442 /**
5443 * Define a parameter's name and location. The parameter may be passed as either
5444 * an HTTP header or a URL query parameter, and if both are passed the behavior
5445 * is implementation-dependent.
5446 */
5447 class SystemParameter {
5448 /**
5449 * Define the HTTP header name to use for the parameter. It is case
5450 * insensitive.
5451 */
5452 core.String httpHeader;
5453 /**
5454 * Define the name of the parameter, such as "api_key", "alt", "callback",
5455 * and etc. It is case sensitive.
5456 */
5457 core.String name;
5458 /**
5459 * Define the URL query parameter name to use for the parameter. It is case
5460 * sensitive.
5461 */
5462 core.String urlQueryParameter;
5463
5464 SystemParameter();
5465
5466 SystemParameter.fromJson(core.Map _json) {
5467 if (_json.containsKey("httpHeader")) {
5468 httpHeader = _json["httpHeader"];
5469 }
5470 if (_json.containsKey("name")) {
5471 name = _json["name"];
5472 }
5473 if (_json.containsKey("urlQueryParameter")) {
5474 urlQueryParameter = _json["urlQueryParameter"];
5475 }
5476 }
5477
5478 core.Map toJson() {
5479 var _json = new core.Map();
5480 if (httpHeader != null) {
5481 _json["httpHeader"] = httpHeader;
5482 }
5483 if (name != null) {
5484 _json["name"] = name;
5485 }
5486 if (urlQueryParameter != null) {
5487 _json["urlQueryParameter"] = urlQueryParameter;
5488 }
5489 return _json;
5490 }
5491 }
5492
5493 /**
5494 * Define a system parameter rule mapping system parameter definitions to
5495 * methods.
5496 */
5497 class SystemParameterRule {
5498 /**
5499 * Define parameters. Multiple names may be defined for a parameter.
5500 * For a given method call, only one of them should be used. If multiple
5501 * names are used the behavior is implementation-dependent.
5502 * If none of the specified names are present the behavior is
5503 * parameter-dependent.
5504 */
5505 core.List<SystemParameter> parameters;
5506 /**
5507 * Selects the methods to which this rule applies. Use '*' to indicate all
5508 * methods in all APIs.
5509 *
5510 * Refer to selector for syntax details.
5511 */
5512 core.String selector;
5513
5514 SystemParameterRule();
5515
5516 SystemParameterRule.fromJson(core.Map _json) {
5517 if (_json.containsKey("parameters")) {
5518 parameters = _json["parameters"].map((value) => new SystemParameter.fromJs on(value)).toList();
5519 }
5520 if (_json.containsKey("selector")) {
5521 selector = _json["selector"];
5522 }
5523 }
5524
5525 core.Map toJson() {
5526 var _json = new core.Map();
5527 if (parameters != null) {
5528 _json["parameters"] = parameters.map((value) => (value).toJson()).toList() ;
5529 }
5530 if (selector != null) {
5531 _json["selector"] = selector;
5532 }
5533 return _json;
5534 }
5535 }
5536
5537 /**
5538 * ### System parameter configuration
5539 *
5540 * A system parameter is a special kind of parameter defined by the API
5541 * system, not by an individual API. It is typically mapped to an HTTP header
5542 * and/or a URL query parameter. This configuration specifies which methods
5543 * change the names of the system parameters.
5544 */
5545 class SystemParameters {
5546 /**
5547 * Define system parameters.
5548 *
5549 * The parameters defined here will override the default parameters
5550 * implemented by the system. If this field is missing from the service
5551 * config, default system parameters will be used. Default system parameters
5552 * and names is implementation-dependent.
5553 *
5554 * Example: define api key and alt name for all methods
5555 *
5556 * system_parameters
5557 * rules:
5558 * - selector: "*"
5559 * parameters:
5560 * - name: api_key
5561 * url_query_parameter: api_key
5562 * - name: alt
5563 * http_header: Response-Content-Type
5564 *
5565 * Example: define 2 api key names for a specific method.
5566 *
5567 * system_parameters
5568 * rules:
5569 * - selector: "/ListShelves"
5570 * parameters:
5571 * - name: api_key
5572 * http_header: Api-Key1
5573 * - name: api_key
5574 * http_header: Api-Key2
5575 *
5576 * **NOTE:** All service configuration rules follow "last one wins" order.
5577 */
5578 core.List<SystemParameterRule> rules;
5579
5580 SystemParameters();
5581
5582 SystemParameters.fromJson(core.Map _json) {
5583 if (_json.containsKey("rules")) {
5584 rules = _json["rules"].map((value) => new SystemParameterRule.fromJson(val ue)).toList();
5585 }
5586 }
5587
5588 core.Map toJson() {
5589 var _json = new core.Map();
5590 if (rules != null) {
5591 _json["rules"] = rules.map((value) => (value).toJson()).toList();
5592 }
5593 return _json;
5594 }
5595 }
5596
5597 /** Request message for `TestIamPermissions` method. */
5598 class TestIamPermissionsRequest {
5599 /**
5600 * The set of permissions to check for the `resource`. Permissions with
5601 * wildcards (such as '*' or 'storage.*') are not allowed. For more
5602 * information see
5603 * [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).
5604 */
5605 core.List<core.String> permissions;
5606
5607 TestIamPermissionsRequest();
5608
5609 TestIamPermissionsRequest.fromJson(core.Map _json) {
5610 if (_json.containsKey("permissions")) {
5611 permissions = _json["permissions"];
5612 }
5613 }
5614
5615 core.Map toJson() {
5616 var _json = new core.Map();
5617 if (permissions != null) {
5618 _json["permissions"] = permissions;
5619 }
5620 return _json;
5621 }
5622 }
5623
5624 /** Response message for `TestIamPermissions` method. */
5625 class TestIamPermissionsResponse {
5626 /**
5627 * A subset of `TestPermissionsRequest.permissions` that the caller is
5628 * allowed.
5629 */
5630 core.List<core.String> permissions;
5631
5632 TestIamPermissionsResponse();
5633
5634 TestIamPermissionsResponse.fromJson(core.Map _json) {
5635 if (_json.containsKey("permissions")) {
5636 permissions = _json["permissions"];
5637 }
5638 }
5639
5640 core.Map toJson() {
5641 var _json = new core.Map();
5642 if (permissions != null) {
5643 _json["permissions"] = permissions;
5644 }
5645 return _json;
5646 }
5647 }
5648
5649 /**
5650 * Strategy that specifies how Google Service Control should select
5651 * different
5652 * versions of service configurations based on traffic percentage.
5653 *
5654 * One example of how to gradually rollout a new service configuration using
5655 * this
5656 * strategy:
5657 * Day 1
5658 *
5659 * Rollout {
5660 * id: "example.googleapis.com/rollout_20160206"
5661 * traffic_percent_strategy {
5662 * percentages: {
5663 * "example.googleapis.com/20160201": 70.00
5664 * "example.googleapis.com/20160206": 30.00
5665 * }
5666 * }
5667 * }
5668 *
5669 * Day 2
5670 *
5671 * Rollout {
5672 * id: "example.googleapis.com/rollout_20160207"
5673 * traffic_percent_strategy: {
5674 * percentages: {
5675 * "example.googleapis.com/20160206": 100.00
5676 * }
5677 * }
5678 * }
5679 */
5680 class TrafficPercentStrategy {
5681 /**
5682 * Maps service configuration IDs to their corresponding traffic percentage.
5683 * Key is the service configuration ID, Value is the traffic percentage
5684 * which must be greater than 0.0 and the sum must equal to 100.0.
5685 */
5686 core.Map<core.String, core.double> percentages;
5687
5688 TrafficPercentStrategy();
5689
5690 TrafficPercentStrategy.fromJson(core.Map _json) {
5691 if (_json.containsKey("percentages")) {
5692 percentages = _json["percentages"];
5693 }
5694 }
5695
5696 core.Map toJson() {
5697 var _json = new core.Map();
5698 if (percentages != null) {
5699 _json["percentages"] = percentages;
5700 }
5701 return _json;
5702 }
5703 }
5704
5705 /** A protocol buffer message type. */
5706 class Type {
5707 /** The list of fields. */
5708 core.List<Field> fields;
5709 /** The fully qualified message name. */
5710 core.String name;
5711 /** The list of types appearing in `oneof` definitions in this type. */
5712 core.List<core.String> oneofs;
5713 /** The protocol buffer options. */
5714 core.List<Option> options;
5715 /** The source context. */
5716 SourceContext sourceContext;
5717 /**
5718 * The source syntax.
5719 * Possible string values are:
5720 * - "SYNTAX_PROTO2" : Syntax `proto2`.
5721 * - "SYNTAX_PROTO3" : Syntax `proto3`.
5722 */
5723 core.String syntax;
5724
5725 Type();
5726
5727 Type.fromJson(core.Map _json) {
5728 if (_json.containsKey("fields")) {
5729 fields = _json["fields"].map((value) => new Field.fromJson(value)).toList( );
5730 }
5731 if (_json.containsKey("name")) {
5732 name = _json["name"];
5733 }
5734 if (_json.containsKey("oneofs")) {
5735 oneofs = _json["oneofs"];
5736 }
5737 if (_json.containsKey("options")) {
5738 options = _json["options"].map((value) => new Option.fromJson(value)).toLi st();
5739 }
5740 if (_json.containsKey("sourceContext")) {
5741 sourceContext = new SourceContext.fromJson(_json["sourceContext"]);
5742 }
5743 if (_json.containsKey("syntax")) {
5744 syntax = _json["syntax"];
5745 }
5746 }
5747
5748 core.Map toJson() {
5749 var _json = new core.Map();
5750 if (fields != null) {
5751 _json["fields"] = fields.map((value) => (value).toJson()).toList();
5752 }
5753 if (name != null) {
5754 _json["name"] = name;
5755 }
5756 if (oneofs != null) {
5757 _json["oneofs"] = oneofs;
5758 }
5759 if (options != null) {
5760 _json["options"] = options.map((value) => (value).toJson()).toList();
5761 }
5762 if (sourceContext != null) {
5763 _json["sourceContext"] = (sourceContext).toJson();
5764 }
5765 if (syntax != null) {
5766 _json["syntax"] = syntax;
5767 }
5768 return _json;
5769 }
5770 }
5771
5772 /** Response message for UndeleteService method. */
5773 class UndeleteServiceResponse {
5774 /** Revived service resource. */
5775 ManagedService service;
5776
5777 UndeleteServiceResponse();
5778
5779 UndeleteServiceResponse.fromJson(core.Map _json) {
5780 if (_json.containsKey("service")) {
5781 service = new ManagedService.fromJson(_json["service"]);
5782 }
5783 }
5784
5785 core.Map toJson() {
5786 var _json = new core.Map();
5787 if (service != null) {
5788 _json["service"] = (service).toJson();
5789 }
5790 return _json;
5791 }
5792 }
5793
5794 /** Configuration controlling usage of a service. */
5795 class Usage {
5796 /**
5797 * Requirements that must be satisfied before a consumer project can use the
5798 * service. Each requirement is of the form <service.name>/<requirement-id>;
5799 * for example 'serviceusage.googleapis.com/billing-enabled'.
5800 */
5801 core.List<core.String> requirements;
5802 /**
5803 * A list of usage rules that apply to individual API methods.
5804 *
5805 * **NOTE:** All service configuration rules follow "last one wins" order.
5806 */
5807 core.List<UsageRule> rules;
5808
5809 Usage();
5810
5811 Usage.fromJson(core.Map _json) {
5812 if (_json.containsKey("requirements")) {
5813 requirements = _json["requirements"];
5814 }
5815 if (_json.containsKey("rules")) {
5816 rules = _json["rules"].map((value) => new UsageRule.fromJson(value)).toLis t();
5817 }
5818 }
5819
5820 core.Map toJson() {
5821 var _json = new core.Map();
5822 if (requirements != null) {
5823 _json["requirements"] = requirements;
5824 }
5825 if (rules != null) {
5826 _json["rules"] = rules.map((value) => (value).toJson()).toList();
5827 }
5828 return _json;
5829 }
5830 }
5831
5832 /**
5833 * Usage configuration rules for the service.
5834 *
5835 * NOTE: Under development.
5836 *
5837 *
5838 * Use this rule to configure unregistered calls for the service. Unregistered
5839 * calls are calls that do not contain consumer project identity.
5840 * (Example: calls that do not contain an API key).
5841 * By default, API methods do not allow unregistered calls, and each method call
5842 * must be identified by a consumer project identity. Use this rule to
5843 * allow/disallow unregistered calls.
5844 *
5845 * Example of an API that wants to allow unregistered calls for entire service.
5846 *
5847 * usage:
5848 * rules:
5849 * - selector: "*"
5850 * allow_unregistered_calls: true
5851 *
5852 * Example of a method that wants to allow unregistered calls.
5853 *
5854 * usage:
5855 * rules:
5856 * - selector: "google.example.library.v1.LibraryService.CreateBook"
5857 * allow_unregistered_calls: true
5858 */
5859 class UsageRule {
5860 /** True, if the method allows unregistered calls; false otherwise. */
5861 core.bool allowUnregisteredCalls;
5862 /**
5863 * Selects the methods to which this rule applies. Use '*' to indicate all
5864 * methods in all APIs.
5865 *
5866 * Refer to selector for syntax details.
5867 */
5868 core.String selector;
5869
5870 UsageRule();
5871
5872 UsageRule.fromJson(core.Map _json) {
5873 if (_json.containsKey("allowUnregisteredCalls")) {
5874 allowUnregisteredCalls = _json["allowUnregisteredCalls"];
5875 }
5876 if (_json.containsKey("selector")) {
5877 selector = _json["selector"];
5878 }
5879 }
5880
5881 core.Map toJson() {
5882 var _json = new core.Map();
5883 if (allowUnregisteredCalls != null) {
5884 _json["allowUnregisteredCalls"] = allowUnregisteredCalls;
5885 }
5886 if (selector != null) {
5887 _json["selector"] = selector;
5888 }
5889 return _json;
5890 }
5891 }
5892
5893 /**
5894 * `Visibility` defines restrictions for the visibility of service
5895 * elements. Restrictions are specified using visibility labels
5896 * (e.g., TRUSTED_TESTER) that are elsewhere linked to users and projects.
5897 *
5898 * Users and projects can have access to more than one visibility label. The
5899 * effective visibility for multiple labels is the union of each label's
5900 * elements, plus any unrestricted elements.
5901 *
5902 * If an element and its parents have no restrictions, visibility is
5903 * unconditionally granted.
5904 *
5905 * Example:
5906 *
5907 * visibility:
5908 * rules:
5909 * - selector: google.calendar.Calendar.EnhancedSearch
5910 * restriction: TRUSTED_TESTER
5911 * - selector: google.calendar.Calendar.Delegate
5912 * restriction: GOOGLE_INTERNAL
5913 *
5914 * Here, all methods are publicly visible except for the restricted methods
5915 * EnhancedSearch and Delegate.
5916 */
5917 class Visibility {
5918 /**
5919 * A list of visibility rules that apply to individual API elements.
5920 *
5921 * **NOTE:** All service configuration rules follow "last one wins" order.
5922 */
5923 core.List<VisibilityRule> rules;
5924
5925 Visibility();
5926
5927 Visibility.fromJson(core.Map _json) {
5928 if (_json.containsKey("rules")) {
5929 rules = _json["rules"].map((value) => new VisibilityRule.fromJson(value)). toList();
5930 }
5931 }
5932
5933 core.Map toJson() {
5934 var _json = new core.Map();
5935 if (rules != null) {
5936 _json["rules"] = rules.map((value) => (value).toJson()).toList();
5937 }
5938 return _json;
5939 }
5940 }
5941
5942 /**
5943 * A visibility rule provides visibility configuration for an individual API
5944 * element.
5945 */
5946 class VisibilityRule {
5947 /**
5948 * Lists the visibility labels for this rule. Any of the listed labels grants
5949 * visibility to the element.
5950 *
5951 * If a rule has multiple labels, removing one of the labels but not all of
5952 * them can break clients.
5953 *
5954 * Example:
5955 *
5956 * visibility:
5957 * rules:
5958 * - selector: google.calendar.Calendar.EnhancedSearch
5959 * restriction: GOOGLE_INTERNAL, TRUSTED_TESTER
5960 *
5961 * Removing GOOGLE_INTERNAL from this restriction will break clients that
5962 * rely on this method and only had access to it through GOOGLE_INTERNAL.
5963 */
5964 core.String restriction;
5965 /**
5966 * Selects methods, messages, fields, enums, etc. to which this rule applies.
5967 *
5968 * Refer to selector for syntax details.
5969 */
5970 core.String selector;
5971
5972 VisibilityRule();
5973
5974 VisibilityRule.fromJson(core.Map _json) {
5975 if (_json.containsKey("restriction")) {
5976 restriction = _json["restriction"];
5977 }
5978 if (_json.containsKey("selector")) {
5979 selector = _json["selector"];
5980 }
5981 }
5982
5983 core.Map toJson() {
5984 var _json = new core.Map();
5985 if (restriction != null) {
5986 _json["restriction"] = restriction;
5987 }
5988 if (selector != null) {
5989 _json["selector"] = selector;
5990 }
5991 return _json;
5992 }
5993 }
OLDNEW
« no previous file with comments | « generated/googleapis/lib/servicecontrol/v1.dart ('k') | generated/googleapis/lib/sheets/v4.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698