| // This is a generated file (see the discoveryapis_generator project). | 
 |  | 
 | library googleapis.servicecontrol.v1; | 
 |  | 
 | import 'dart:core' as core; | 
 | import 'dart:async' as async; | 
 | import 'dart:convert' as convert; | 
 |  | 
 | import 'package:_discoveryapis_commons/_discoveryapis_commons.dart' as commons; | 
 | import 'package:http/http.dart' as http; | 
 |  | 
 | export 'package:_discoveryapis_commons/_discoveryapis_commons.dart' | 
 |     show ApiRequestError, DetailedApiRequestError; | 
 |  | 
 | const core.String USER_AGENT = 'dart-api-client servicecontrol/v1'; | 
 |  | 
 | /// Google Service Control provides control plane functionality to managed | 
 | /// services, such as logging, monitoring, and status checks. | 
 | class ServicecontrolApi { | 
 |   /// View and manage your data across Google Cloud Platform services | 
 |   static const CloudPlatformScope = | 
 |       "https://www.googleapis.com/auth/cloud-platform"; | 
 |  | 
 |   /// Manage your Google Service Control data | 
 |   static const ServicecontrolScope = | 
 |       "https://www.googleapis.com/auth/servicecontrol"; | 
 |  | 
 |   final commons.ApiRequester _requester; | 
 |  | 
 |   ServicesResourceApi get services => new ServicesResourceApi(_requester); | 
 |  | 
 |   ServicecontrolApi(http.Client client, | 
 |       {core.String rootUrl: "https://servicecontrol.googleapis.com/", | 
 |       core.String servicePath: ""}) | 
 |       : _requester = | 
 |             new commons.ApiRequester(client, rootUrl, servicePath, USER_AGENT); | 
 | } | 
 |  | 
 | class ServicesResourceApi { | 
 |   final commons.ApiRequester _requester; | 
 |  | 
 |   ServicesResourceApi(commons.ApiRequester client) : _requester = client; | 
 |  | 
 |   /// Attempts to allocate quota for the specified consumer. It should be called | 
 |   /// before the operation is executed. | 
 |   /// | 
 |   /// This method requires the `servicemanagement.services.quota` | 
 |   /// permission on the specified service. For more information, see | 
 |   /// [Cloud IAM](https://cloud.google.com/iam). | 
 |   /// | 
 |   /// **NOTE:** The client **must** fail-open on server errors `INTERNAL`, | 
 |   /// `UNKNOWN`, `DEADLINE_EXCEEDED`, and `UNAVAILABLE`. To ensure system | 
 |   /// reliability, the server may inject these errors to prohibit any hard | 
 |   /// dependency on the quota functionality. | 
 |   /// | 
 |   /// [request] - The metadata request object. | 
 |   /// | 
 |   /// Request parameters: | 
 |   /// | 
 |   /// [serviceName] - Name of the service as specified in the service | 
 |   /// configuration. For example, | 
 |   /// `"pubsub.googleapis.com"`. | 
 |   /// | 
 |   /// See google.api.Service for the definition of a service name. | 
 |   /// | 
 |   /// [$fields] - Selector specifying which fields to include in a partial | 
 |   /// response. | 
 |   /// | 
 |   /// Completes with a [AllocateQuotaResponse]. | 
 |   /// | 
 |   /// Completes with a [commons.ApiRequestError] if the API endpoint returned an | 
 |   /// error. | 
 |   /// | 
 |   /// If the used [http.Client] completes with an error when making a REST call, | 
 |   /// this method will complete with the same error. | 
 |   async.Future<AllocateQuotaResponse> allocateQuota( | 
 |       AllocateQuotaRequest request, core.String serviceName, | 
 |       {core.String $fields}) { | 
 |     var _url = null; | 
 |     var _queryParams = new core.Map<core.String, core.List<core.String>>(); | 
 |     var _uploadMedia = null; | 
 |     var _uploadOptions = null; | 
 |     var _downloadOptions = commons.DownloadOptions.Metadata; | 
 |     var _body = null; | 
 |  | 
 |     if (request != null) { | 
 |       _body = convert.JSON.encode((request).toJson()); | 
 |     } | 
 |     if (serviceName == null) { | 
 |       throw new core.ArgumentError("Parameter serviceName is required."); | 
 |     } | 
 |     if ($fields != null) { | 
 |       _queryParams["fields"] = [$fields]; | 
 |     } | 
 |  | 
 |     _url = 'v1/services/' + | 
 |         commons.Escaper.ecapeVariable('$serviceName') + | 
 |         ':allocateQuota'; | 
 |  | 
 |     var _response = _requester.request(_url, "POST", | 
 |         body: _body, | 
 |         queryParams: _queryParams, | 
 |         uploadOptions: _uploadOptions, | 
 |         uploadMedia: _uploadMedia, | 
 |         downloadOptions: _downloadOptions); | 
 |     return _response.then((data) => new AllocateQuotaResponse.fromJson(data)); | 
 |   } | 
 |  | 
 |   /// Checks an operation with Google Service Control to decide whether | 
 |   /// the given operation should proceed. It should be called before the | 
 |   /// operation is executed. | 
 |   /// | 
 |   /// If feasible, the client should cache the check results and reuse them for | 
 |   /// 60 seconds. In case of server errors, the client can rely on the cached | 
 |   /// results for longer time. | 
 |   /// | 
 |   /// NOTE: the CheckRequest has the size limit of 64KB. | 
 |   /// | 
 |   /// This method requires the `servicemanagement.services.check` permission | 
 |   /// on the specified service. For more information, see | 
 |   /// [Google Cloud IAM](https://cloud.google.com/iam). | 
 |   /// | 
 |   /// [request] - The metadata request object. | 
 |   /// | 
 |   /// Request parameters: | 
 |   /// | 
 |   /// [serviceName] - The service name as specified in its service | 
 |   /// configuration. For example, | 
 |   /// `"pubsub.googleapis.com"`. | 
 |   /// | 
 |   /// See | 
 |   /// [google.api.Service](https://cloud.google.com/service-management/reference/rpc/google.api#google.api.Service) | 
 |   /// for the definition of a service name. | 
 |   /// | 
 |   /// [$fields] - Selector specifying which fields to include in a partial | 
 |   /// response. | 
 |   /// | 
 |   /// Completes with a [CheckResponse]. | 
 |   /// | 
 |   /// Completes with a [commons.ApiRequestError] if the API endpoint returned an | 
 |   /// error. | 
 |   /// | 
 |   /// If the used [http.Client] completes with an error when making a REST call, | 
 |   /// this method will complete with the same error. | 
 |   async.Future<CheckResponse> check( | 
 |       CheckRequest request, core.String serviceName, | 
 |       {core.String $fields}) { | 
 |     var _url = null; | 
 |     var _queryParams = new core.Map<core.String, core.List<core.String>>(); | 
 |     var _uploadMedia = null; | 
 |     var _uploadOptions = null; | 
 |     var _downloadOptions = commons.DownloadOptions.Metadata; | 
 |     var _body = null; | 
 |  | 
 |     if (request != null) { | 
 |       _body = convert.JSON.encode((request).toJson()); | 
 |     } | 
 |     if (serviceName == null) { | 
 |       throw new core.ArgumentError("Parameter serviceName is required."); | 
 |     } | 
 |     if ($fields != null) { | 
 |       _queryParams["fields"] = [$fields]; | 
 |     } | 
 |  | 
 |     _url = 'v1/services/' + | 
 |         commons.Escaper.ecapeVariable('$serviceName') + | 
 |         ':check'; | 
 |  | 
 |     var _response = _requester.request(_url, "POST", | 
 |         body: _body, | 
 |         queryParams: _queryParams, | 
 |         uploadOptions: _uploadOptions, | 
 |         uploadMedia: _uploadMedia, | 
 |         downloadOptions: _downloadOptions); | 
 |     return _response.then((data) => new CheckResponse.fromJson(data)); | 
 |   } | 
 |  | 
 |   /// Signals the quota controller that service ends the ongoing usage | 
 |   /// reconciliation. | 
 |   /// | 
 |   /// This method requires the `servicemanagement.services.quota` | 
 |   /// permission on the specified service. For more information, see | 
 |   /// [Google Cloud IAM](https://cloud.google.com/iam). | 
 |   /// | 
 |   /// [request] - The metadata request object. | 
 |   /// | 
 |   /// Request parameters: | 
 |   /// | 
 |   /// [serviceName] - Name of the service as specified in the service | 
 |   /// configuration. For example, | 
 |   /// `"pubsub.googleapis.com"`. | 
 |   /// | 
 |   /// See google.api.Service for the definition of a service name. | 
 |   /// | 
 |   /// [$fields] - Selector specifying which fields to include in a partial | 
 |   /// response. | 
 |   /// | 
 |   /// Completes with a [EndReconciliationResponse]. | 
 |   /// | 
 |   /// Completes with a [commons.ApiRequestError] if the API endpoint returned an | 
 |   /// error. | 
 |   /// | 
 |   /// If the used [http.Client] completes with an error when making a REST call, | 
 |   /// this method will complete with the same error. | 
 |   async.Future<EndReconciliationResponse> endReconciliation( | 
 |       EndReconciliationRequest request, core.String serviceName, | 
 |       {core.String $fields}) { | 
 |     var _url = null; | 
 |     var _queryParams = new core.Map<core.String, core.List<core.String>>(); | 
 |     var _uploadMedia = null; | 
 |     var _uploadOptions = null; | 
 |     var _downloadOptions = commons.DownloadOptions.Metadata; | 
 |     var _body = null; | 
 |  | 
 |     if (request != null) { | 
 |       _body = convert.JSON.encode((request).toJson()); | 
 |     } | 
 |     if (serviceName == null) { | 
 |       throw new core.ArgumentError("Parameter serviceName is required."); | 
 |     } | 
 |     if ($fields != null) { | 
 |       _queryParams["fields"] = [$fields]; | 
 |     } | 
 |  | 
 |     _url = 'v1/services/' + | 
 |         commons.Escaper.ecapeVariable('$serviceName') + | 
 |         ':endReconciliation'; | 
 |  | 
 |     var _response = _requester.request(_url, "POST", | 
 |         body: _body, | 
 |         queryParams: _queryParams, | 
 |         uploadOptions: _uploadOptions, | 
 |         uploadMedia: _uploadMedia, | 
 |         downloadOptions: _downloadOptions); | 
 |     return _response | 
 |         .then((data) => new EndReconciliationResponse.fromJson(data)); | 
 |   } | 
 |  | 
 |   /// Releases previously allocated quota done through AllocateQuota method. | 
 |   /// | 
 |   /// This method requires the `servicemanagement.services.quota` | 
 |   /// permission on the specified service. For more information, see | 
 |   /// [Cloud IAM](https://cloud.google.com/iam). | 
 |   /// | 
 |   /// | 
 |   /// **NOTE:** The client **must** fail-open on server errors `INTERNAL`, | 
 |   /// `UNKNOWN`, `DEADLINE_EXCEEDED`, and `UNAVAILABLE`. To ensure system | 
 |   /// reliability, the server may inject these errors to prohibit any hard | 
 |   /// dependency on the quota functionality. | 
 |   /// | 
 |   /// [request] - The metadata request object. | 
 |   /// | 
 |   /// Request parameters: | 
 |   /// | 
 |   /// [serviceName] - Name of the service as specified in the service | 
 |   /// configuration. For example, | 
 |   /// `"pubsub.googleapis.com"`. | 
 |   /// | 
 |   /// See google.api.Service for the definition of a service name. | 
 |   /// | 
 |   /// [$fields] - Selector specifying which fields to include in a partial | 
 |   /// response. | 
 |   /// | 
 |   /// Completes with a [ReleaseQuotaResponse]. | 
 |   /// | 
 |   /// Completes with a [commons.ApiRequestError] if the API endpoint returned an | 
 |   /// error. | 
 |   /// | 
 |   /// If the used [http.Client] completes with an error when making a REST call, | 
 |   /// this method will complete with the same error. | 
 |   async.Future<ReleaseQuotaResponse> releaseQuota( | 
 |       ReleaseQuotaRequest request, core.String serviceName, | 
 |       {core.String $fields}) { | 
 |     var _url = null; | 
 |     var _queryParams = new core.Map<core.String, core.List<core.String>>(); | 
 |     var _uploadMedia = null; | 
 |     var _uploadOptions = null; | 
 |     var _downloadOptions = commons.DownloadOptions.Metadata; | 
 |     var _body = null; | 
 |  | 
 |     if (request != null) { | 
 |       _body = convert.JSON.encode((request).toJson()); | 
 |     } | 
 |     if (serviceName == null) { | 
 |       throw new core.ArgumentError("Parameter serviceName is required."); | 
 |     } | 
 |     if ($fields != null) { | 
 |       _queryParams["fields"] = [$fields]; | 
 |     } | 
 |  | 
 |     _url = 'v1/services/' + | 
 |         commons.Escaper.ecapeVariable('$serviceName') + | 
 |         ':releaseQuota'; | 
 |  | 
 |     var _response = _requester.request(_url, "POST", | 
 |         body: _body, | 
 |         queryParams: _queryParams, | 
 |         uploadOptions: _uploadOptions, | 
 |         uploadMedia: _uploadMedia, | 
 |         downloadOptions: _downloadOptions); | 
 |     return _response.then((data) => new ReleaseQuotaResponse.fromJson(data)); | 
 |   } | 
 |  | 
 |   /// Reports operation results to Google Service Control, such as logs and | 
 |   /// metrics. It should be called after an operation is completed. | 
 |   /// | 
 |   /// If feasible, the client should aggregate reporting data for up to 5 | 
 |   /// seconds to reduce API traffic. Limiting aggregation to 5 seconds is to | 
 |   /// reduce data loss during client crashes. Clients should carefully choose | 
 |   /// the aggregation time window to avoid data loss risk more than 0.01% | 
 |   /// for business and compliance reasons. | 
 |   /// | 
 |   /// NOTE: the ReportRequest has the size limit of 1MB. | 
 |   /// | 
 |   /// This method requires the `servicemanagement.services.report` permission | 
 |   /// on the specified service. For more information, see | 
 |   /// [Google Cloud IAM](https://cloud.google.com/iam). | 
 |   /// | 
 |   /// [request] - The metadata request object. | 
 |   /// | 
 |   /// Request parameters: | 
 |   /// | 
 |   /// [serviceName] - The service name as specified in its service | 
 |   /// configuration. For example, | 
 |   /// `"pubsub.googleapis.com"`. | 
 |   /// | 
 |   /// See | 
 |   /// [google.api.Service](https://cloud.google.com/service-management/reference/rpc/google.api#google.api.Service) | 
 |   /// for the definition of a service name. | 
 |   /// | 
 |   /// [$fields] - Selector specifying which fields to include in a partial | 
 |   /// response. | 
 |   /// | 
 |   /// Completes with a [ReportResponse]. | 
 |   /// | 
 |   /// Completes with a [commons.ApiRequestError] if the API endpoint returned an | 
 |   /// error. | 
 |   /// | 
 |   /// If the used [http.Client] completes with an error when making a REST call, | 
 |   /// this method will complete with the same error. | 
 |   async.Future<ReportResponse> report( | 
 |       ReportRequest request, core.String serviceName, | 
 |       {core.String $fields}) { | 
 |     var _url = null; | 
 |     var _queryParams = new core.Map<core.String, core.List<core.String>>(); | 
 |     var _uploadMedia = null; | 
 |     var _uploadOptions = null; | 
 |     var _downloadOptions = commons.DownloadOptions.Metadata; | 
 |     var _body = null; | 
 |  | 
 |     if (request != null) { | 
 |       _body = convert.JSON.encode((request).toJson()); | 
 |     } | 
 |     if (serviceName == null) { | 
 |       throw new core.ArgumentError("Parameter serviceName is required."); | 
 |     } | 
 |     if ($fields != null) { | 
 |       _queryParams["fields"] = [$fields]; | 
 |     } | 
 |  | 
 |     _url = 'v1/services/' + | 
 |         commons.Escaper.ecapeVariable('$serviceName') + | 
 |         ':report'; | 
 |  | 
 |     var _response = _requester.request(_url, "POST", | 
 |         body: _body, | 
 |         queryParams: _queryParams, | 
 |         uploadOptions: _uploadOptions, | 
 |         uploadMedia: _uploadMedia, | 
 |         downloadOptions: _downloadOptions); | 
 |     return _response.then((data) => new ReportResponse.fromJson(data)); | 
 |   } | 
 |  | 
 |   /// Unlike rate quota, allocation quota does not get refilled periodically. | 
 |   /// So, it is possible that the quota usage as seen by the service differs | 
 |   /// from | 
 |   /// what the One Platform considers the usage is. This is expected to happen | 
 |   /// only rarely, but over time this can accumulate. Services can invoke | 
 |   /// StartReconciliation and EndReconciliation to correct this usage drift, as | 
 |   /// described below: | 
 |   /// 1. Service sends StartReconciliation with a timestamp in future for each | 
 |   /// metric that needs to be reconciled. The timestamp being in future allows | 
 |   /// to account for in-flight AllocateQuota and ReleaseQuota requests for the | 
 |   ///    same metric. | 
 |   /// 2. One Platform records this timestamp and starts tracking subsequent | 
 |   ///    AllocateQuota and ReleaseQuota requests until EndReconciliation is | 
 |   ///    called. | 
 |   /// 3. At or after the time specified in the StartReconciliation, service | 
 |   ///    sends EndReconciliation with the usage that needs to be reconciled to. | 
 |   /// 4. One Platform adjusts its own record of usage for that metric to the | 
 |   ///    value specified in EndReconciliation by taking in to account any | 
 |   /// allocation or release between StartReconciliation and EndReconciliation. | 
 |   /// | 
 |   /// Signals the quota controller that the service wants to perform a usage | 
 |   /// reconciliation as specified in the request. | 
 |   /// | 
 |   /// This method requires the `servicemanagement.services.quota` | 
 |   /// permission on the specified service. For more information, see | 
 |   /// [Google Cloud IAM](https://cloud.google.com/iam). | 
 |   /// | 
 |   /// [request] - The metadata request object. | 
 |   /// | 
 |   /// Request parameters: | 
 |   /// | 
 |   /// [serviceName] - Name of the service as specified in the service | 
 |   /// configuration. For example, | 
 |   /// `"pubsub.googleapis.com"`. | 
 |   /// | 
 |   /// See google.api.Service for the definition of a service name. | 
 |   /// | 
 |   /// [$fields] - Selector specifying which fields to include in a partial | 
 |   /// response. | 
 |   /// | 
 |   /// Completes with a [StartReconciliationResponse]. | 
 |   /// | 
 |   /// Completes with a [commons.ApiRequestError] if the API endpoint returned an | 
 |   /// error. | 
 |   /// | 
 |   /// If the used [http.Client] completes with an error when making a REST call, | 
 |   /// this method will complete with the same error. | 
 |   async.Future<StartReconciliationResponse> startReconciliation( | 
 |       StartReconciliationRequest request, core.String serviceName, | 
 |       {core.String $fields}) { | 
 |     var _url = null; | 
 |     var _queryParams = new core.Map<core.String, core.List<core.String>>(); | 
 |     var _uploadMedia = null; | 
 |     var _uploadOptions = null; | 
 |     var _downloadOptions = commons.DownloadOptions.Metadata; | 
 |     var _body = null; | 
 |  | 
 |     if (request != null) { | 
 |       _body = convert.JSON.encode((request).toJson()); | 
 |     } | 
 |     if (serviceName == null) { | 
 |       throw new core.ArgumentError("Parameter serviceName is required."); | 
 |     } | 
 |     if ($fields != null) { | 
 |       _queryParams["fields"] = [$fields]; | 
 |     } | 
 |  | 
 |     _url = 'v1/services/' + | 
 |         commons.Escaper.ecapeVariable('$serviceName') + | 
 |         ':startReconciliation'; | 
 |  | 
 |     var _response = _requester.request(_url, "POST", | 
 |         body: _body, | 
 |         queryParams: _queryParams, | 
 |         uploadOptions: _uploadOptions, | 
 |         uploadMedia: _uploadMedia, | 
 |         downloadOptions: _downloadOptions); | 
 |     return _response | 
 |         .then((data) => new StartReconciliationResponse.fromJson(data)); | 
 |   } | 
 | } | 
 |  | 
 | class AllocateInfo { | 
 |   /// A list of label keys that were unused by the server in processing the | 
 |   /// request. Thus, for similar requests repeated in a certain future time | 
 |   /// window, the caller can choose to ignore these labels in the requests | 
 |   /// to achieve better client-side cache hits and quota aggregation. | 
 |   core.List<core.String> unusedArguments; | 
 |  | 
 |   AllocateInfo(); | 
 |  | 
 |   AllocateInfo.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("unusedArguments")) { | 
 |       unusedArguments = _json["unusedArguments"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (unusedArguments != null) { | 
 |       _json["unusedArguments"] = unusedArguments; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Request message for the AllocateQuota method. | 
 | class AllocateQuotaRequest { | 
 |   /// Operation that describes the quota allocation. | 
 |   QuotaOperation allocateOperation; | 
 |  | 
 |   /// Specifies which version of service configuration should be used to process | 
 |   /// the request. If unspecified or no matching version can be found, the | 
 |   /// latest | 
 |   /// one will be used. | 
 |   core.String serviceConfigId; | 
 |  | 
 |   AllocateQuotaRequest(); | 
 |  | 
 |   AllocateQuotaRequest.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("allocateOperation")) { | 
 |       allocateOperation = | 
 |           new QuotaOperation.fromJson(_json["allocateOperation"]); | 
 |     } | 
 |     if (_json.containsKey("serviceConfigId")) { | 
 |       serviceConfigId = _json["serviceConfigId"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (allocateOperation != null) { | 
 |       _json["allocateOperation"] = (allocateOperation).toJson(); | 
 |     } | 
 |     if (serviceConfigId != null) { | 
 |       _json["serviceConfigId"] = serviceConfigId; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Response message for the AllocateQuota method. | 
 | class AllocateQuotaResponse { | 
 |   /// Indicates the decision of the allocate. | 
 |   core.List<QuotaError> allocateErrors; | 
 |  | 
 |   /// WARNING: DO NOT use this field until this warning message is removed. | 
 |   AllocateInfo allocateInfo; | 
 |  | 
 |   /// The same operation_id value used in the AllocateQuotaRequest. Used for | 
 |   /// logging and diagnostics purposes. | 
 |   core.String operationId; | 
 |  | 
 |   /// Quota metrics to indicate the result of allocation. Depending on the | 
 |   /// request, one or more of the following metrics will be included: | 
 |   /// | 
 |   /// 1. Per quota group or per quota metric incremental usage will be specified | 
 |   /// using the following delta metric : | 
 |   ///   "serviceruntime.googleapis.com/api/consumer/quota_used_count" | 
 |   /// | 
 |   /// 2. The quota limit reached condition will be specified using the following | 
 |   /// boolean metric : | 
 |   ///   "serviceruntime.googleapis.com/quota/exceeded" | 
 |   core.List<MetricValueSet> quotaMetrics; | 
 |  | 
 |   /// ID of the actual config used to process the request. | 
 |   core.String serviceConfigId; | 
 |  | 
 |   AllocateQuotaResponse(); | 
 |  | 
 |   AllocateQuotaResponse.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("allocateErrors")) { | 
 |       allocateErrors = _json["allocateErrors"] | 
 |           .map<QuotaError>((value) => new QuotaError.fromJson(value)) | 
 |           .toList(); | 
 |     } | 
 |     if (_json.containsKey("allocateInfo")) { | 
 |       allocateInfo = new AllocateInfo.fromJson(_json["allocateInfo"]); | 
 |     } | 
 |     if (_json.containsKey("operationId")) { | 
 |       operationId = _json["operationId"]; | 
 |     } | 
 |     if (_json.containsKey("quotaMetrics")) { | 
 |       quotaMetrics = _json["quotaMetrics"] | 
 |           .map<MetricValueSet>((value) => new MetricValueSet.fromJson(value)) | 
 |           .toList(); | 
 |     } | 
 |     if (_json.containsKey("serviceConfigId")) { | 
 |       serviceConfigId = _json["serviceConfigId"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (allocateErrors != null) { | 
 |       _json["allocateErrors"] = | 
 |           allocateErrors.map((value) => (value).toJson()).toList(); | 
 |     } | 
 |     if (allocateInfo != null) { | 
 |       _json["allocateInfo"] = (allocateInfo).toJson(); | 
 |     } | 
 |     if (operationId != null) { | 
 |       _json["operationId"] = operationId; | 
 |     } | 
 |     if (quotaMetrics != null) { | 
 |       _json["quotaMetrics"] = | 
 |           quotaMetrics.map((value) => (value).toJson()).toList(); | 
 |     } | 
 |     if (serviceConfigId != null) { | 
 |       _json["serviceConfigId"] = serviceConfigId; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Common audit log format for Google Cloud Platform API operations. | 
 | class AuditLog { | 
 |   /// Authentication information. | 
 |   AuthenticationInfo authenticationInfo; | 
 |  | 
 |   /// Authorization information. If there are multiple | 
 |   /// resources or permissions involved, then there is | 
 |   /// one AuthorizationInfo element for each {resource, permission} tuple. | 
 |   core.List<AuthorizationInfo> authorizationInfo; | 
 |  | 
 |   /// Other service-specific data about the request, response, and other | 
 |   /// information associated with the current audited event. | 
 |   /// | 
 |   /// The values for Object must be JSON objects. It can consist of `num`, | 
 |   /// `String`, `bool` and `null` as well as `Map` and `List` values. | 
 |   core.Map<core.String, core.Object> metadata; | 
 |  | 
 |   /// The name of the service method or operation. | 
 |   /// For API calls, this should be the name of the API method. | 
 |   /// For example, | 
 |   /// | 
 |   ///     "google.datastore.v1.Datastore.RunQuery" | 
 |   ///     "google.logging.v1.LoggingService.DeleteLog" | 
 |   core.String methodName; | 
 |  | 
 |   /// The number of items returned from a List or Query API method, | 
 |   /// if applicable. | 
 |   core.String numResponseItems; | 
 |  | 
 |   /// The operation request. This may not include all request parameters, | 
 |   /// such as those that are too large, privacy-sensitive, or duplicated | 
 |   /// elsewhere in the log record. | 
 |   /// It should never include user-generated data, such as file contents. | 
 |   /// When the JSON object represented here has a proto equivalent, the proto | 
 |   /// name will be indicated in the `@type` property. | 
 |   /// | 
 |   /// The values for Object must be JSON objects. It can consist of `num`, | 
 |   /// `String`, `bool` and `null` as well as `Map` and `List` values. | 
 |   core.Map<core.String, core.Object> request; | 
 |  | 
 |   /// Metadata about the operation. | 
 |   RequestMetadata requestMetadata; | 
 |  | 
 |   /// The resource or collection that is the target of the operation. | 
 |   /// The name is a scheme-less URI, not including the API service name. | 
 |   /// For example: | 
 |   /// | 
 |   ///     "shelves/SHELF_ID/books" | 
 |   ///     "shelves/SHELF_ID/books/BOOK_ID" | 
 |   core.String resourceName; | 
 |  | 
 |   /// The operation response. This may not include all response elements, | 
 |   /// such as those that are too large, privacy-sensitive, or duplicated | 
 |   /// elsewhere in the log record. | 
 |   /// It should never include user-generated data, such as file contents. | 
 |   /// When the JSON object represented here has a proto equivalent, the proto | 
 |   /// name will be indicated in the `@type` property. | 
 |   /// | 
 |   /// The values for Object must be JSON objects. It can consist of `num`, | 
 |   /// `String`, `bool` and `null` as well as `Map` and `List` values. | 
 |   core.Map<core.String, core.Object> response; | 
 |  | 
 |   /// Deprecated, use `metadata` field instead. | 
 |   /// Other service-specific data about the request, response, and other | 
 |   /// activities. | 
 |   /// | 
 |   /// The values for Object must be JSON objects. It can consist of `num`, | 
 |   /// `String`, `bool` and `null` as well as `Map` and `List` values. | 
 |   core.Map<core.String, core.Object> serviceData; | 
 |  | 
 |   /// The name of the API service performing the operation. For example, | 
 |   /// `"datastore.googleapis.com"`. | 
 |   core.String serviceName; | 
 |  | 
 |   /// The status of the overall operation. | 
 |   Status status; | 
 |  | 
 |   AuditLog(); | 
 |  | 
 |   AuditLog.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("authenticationInfo")) { | 
 |       authenticationInfo = | 
 |           new AuthenticationInfo.fromJson(_json["authenticationInfo"]); | 
 |     } | 
 |     if (_json.containsKey("authorizationInfo")) { | 
 |       authorizationInfo = _json["authorizationInfo"] | 
 |           .map<AuthorizationInfo>( | 
 |               (value) => new AuthorizationInfo.fromJson(value)) | 
 |           .toList(); | 
 |     } | 
 |     if (_json.containsKey("metadata")) { | 
 |       metadata = _json["metadata"]; | 
 |     } | 
 |     if (_json.containsKey("methodName")) { | 
 |       methodName = _json["methodName"]; | 
 |     } | 
 |     if (_json.containsKey("numResponseItems")) { | 
 |       numResponseItems = _json["numResponseItems"]; | 
 |     } | 
 |     if (_json.containsKey("request")) { | 
 |       request = _json["request"]; | 
 |     } | 
 |     if (_json.containsKey("requestMetadata")) { | 
 |       requestMetadata = new RequestMetadata.fromJson(_json["requestMetadata"]); | 
 |     } | 
 |     if (_json.containsKey("resourceName")) { | 
 |       resourceName = _json["resourceName"]; | 
 |     } | 
 |     if (_json.containsKey("response")) { | 
 |       response = _json["response"]; | 
 |     } | 
 |     if (_json.containsKey("serviceData")) { | 
 |       serviceData = _json["serviceData"]; | 
 |     } | 
 |     if (_json.containsKey("serviceName")) { | 
 |       serviceName = _json["serviceName"]; | 
 |     } | 
 |     if (_json.containsKey("status")) { | 
 |       status = new Status.fromJson(_json["status"]); | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (authenticationInfo != null) { | 
 |       _json["authenticationInfo"] = (authenticationInfo).toJson(); | 
 |     } | 
 |     if (authorizationInfo != null) { | 
 |       _json["authorizationInfo"] = | 
 |           authorizationInfo.map((value) => (value).toJson()).toList(); | 
 |     } | 
 |     if (metadata != null) { | 
 |       _json["metadata"] = metadata; | 
 |     } | 
 |     if (methodName != null) { | 
 |       _json["methodName"] = methodName; | 
 |     } | 
 |     if (numResponseItems != null) { | 
 |       _json["numResponseItems"] = numResponseItems; | 
 |     } | 
 |     if (request != null) { | 
 |       _json["request"] = request; | 
 |     } | 
 |     if (requestMetadata != null) { | 
 |       _json["requestMetadata"] = (requestMetadata).toJson(); | 
 |     } | 
 |     if (resourceName != null) { | 
 |       _json["resourceName"] = resourceName; | 
 |     } | 
 |     if (response != null) { | 
 |       _json["response"] = response; | 
 |     } | 
 |     if (serviceData != null) { | 
 |       _json["serviceData"] = serviceData; | 
 |     } | 
 |     if (serviceName != null) { | 
 |       _json["serviceName"] = serviceName; | 
 |     } | 
 |     if (status != null) { | 
 |       _json["status"] = (status).toJson(); | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Authentication information for the operation. | 
 | class AuthenticationInfo { | 
 |   /// The authority selector specified by the requestor, if any. | 
 |   /// It is not guaranteed that the principal was allowed to use this authority. | 
 |   core.String authoritySelector; | 
 |  | 
 |   /// The email address of the authenticated user (or service account on behalf | 
 |   /// of third party principal) making the request. For privacy reasons, the | 
 |   /// principal email address is redacted for all read-only operations that fail | 
 |   /// with a "permission denied" error. | 
 |   core.String principalEmail; | 
 |  | 
 |   /// The third party identification (if any) of the authenticated user making | 
 |   /// the request. | 
 |   /// When the JSON object represented here has a proto equivalent, the proto | 
 |   /// name will be indicated in the `@type` property. | 
 |   /// | 
 |   /// The values for Object must be JSON objects. It can consist of `num`, | 
 |   /// `String`, `bool` and `null` as well as `Map` and `List` values. | 
 |   core.Map<core.String, core.Object> thirdPartyPrincipal; | 
 |  | 
 |   AuthenticationInfo(); | 
 |  | 
 |   AuthenticationInfo.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("authoritySelector")) { | 
 |       authoritySelector = _json["authoritySelector"]; | 
 |     } | 
 |     if (_json.containsKey("principalEmail")) { | 
 |       principalEmail = _json["principalEmail"]; | 
 |     } | 
 |     if (_json.containsKey("thirdPartyPrincipal")) { | 
 |       thirdPartyPrincipal = _json["thirdPartyPrincipal"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (authoritySelector != null) { | 
 |       _json["authoritySelector"] = authoritySelector; | 
 |     } | 
 |     if (principalEmail != null) { | 
 |       _json["principalEmail"] = principalEmail; | 
 |     } | 
 |     if (thirdPartyPrincipal != null) { | 
 |       _json["thirdPartyPrincipal"] = thirdPartyPrincipal; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Authorization information for the operation. | 
 | class AuthorizationInfo { | 
 |   /// Whether or not authorization for `resource` and `permission` | 
 |   /// was granted. | 
 |   core.bool granted; | 
 |  | 
 |   /// The required IAM permission. | 
 |   core.String permission; | 
 |  | 
 |   /// The resource being accessed, as a REST-style string. For example: | 
 |   /// | 
 |   ///     bigquery.googleapis.com/projects/PROJECTID/datasets/DATASETID | 
 |   core.String resource; | 
 |  | 
 |   AuthorizationInfo(); | 
 |  | 
 |   AuthorizationInfo.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("granted")) { | 
 |       granted = _json["granted"]; | 
 |     } | 
 |     if (_json.containsKey("permission")) { | 
 |       permission = _json["permission"]; | 
 |     } | 
 |     if (_json.containsKey("resource")) { | 
 |       resource = _json["resource"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (granted != null) { | 
 |       _json["granted"] = granted; | 
 |     } | 
 |     if (permission != null) { | 
 |       _json["permission"] = permission; | 
 |     } | 
 |     if (resource != null) { | 
 |       _json["resource"] = resource; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Defines the errors to be returned in | 
 | /// google.api.servicecontrol.v1.CheckResponse.check_errors. | 
 | class CheckError { | 
 |   /// The error code. | 
 |   /// Possible string values are: | 
 |   /// - "ERROR_CODE_UNSPECIFIED" : This is never used in `CheckResponse`. | 
 |   /// - "NOT_FOUND" : The consumer's project id, network container, or resource | 
 |   /// container was | 
 |   /// not found. Same as google.rpc.Code.NOT_FOUND. | 
 |   /// - "PERMISSION_DENIED" : The consumer doesn't have access to the specified | 
 |   /// resource. | 
 |   /// Same as google.rpc.Code.PERMISSION_DENIED. | 
 |   /// - "RESOURCE_EXHAUSTED" : Quota check failed. Same as | 
 |   /// google.rpc.Code.RESOURCE_EXHAUSTED. | 
 |   /// - "BUDGET_EXCEEDED" : Budget check failed. | 
 |   /// - "DENIAL_OF_SERVICE_DETECTED" : The consumer's request has been flagged | 
 |   /// as a DoS attack. | 
 |   /// - "LOAD_SHEDDING" : The consumer's request should be rejected in order to | 
 |   /// protect the service | 
 |   /// from being overloaded. | 
 |   /// - "ABUSER_DETECTED" : The consumer has been flagged as an abuser. | 
 |   /// - "SERVICE_NOT_ACTIVATED" : The consumer hasn't activated the service. | 
 |   /// - "VISIBILITY_DENIED" : The consumer cannot access the service due to | 
 |   /// visibility configuration. | 
 |   /// - "BILLING_DISABLED" : The consumer cannot access the service because | 
 |   /// billing is disabled. | 
 |   /// - "PROJECT_DELETED" : The consumer's project has been marked as deleted | 
 |   /// (soft deletion). | 
 |   /// - "PROJECT_INVALID" : The consumer's project number or id does not | 
 |   /// represent a valid project. | 
 |   /// - "IP_ADDRESS_BLOCKED" : The IP address of the consumer is invalid for the | 
 |   /// specific consumer | 
 |   /// project. | 
 |   /// - "REFERER_BLOCKED" : The referer address of the consumer request is | 
 |   /// invalid for the specific | 
 |   /// consumer project. | 
 |   /// - "CLIENT_APP_BLOCKED" : The client application of the consumer request is | 
 |   /// invalid for the | 
 |   /// specific consumer project. | 
 |   /// - "API_TARGET_BLOCKED" : The API targeted by this request is invalid for | 
 |   /// the specified consumer | 
 |   /// project. | 
 |   /// - "API_KEY_INVALID" : The consumer's API key is invalid. | 
 |   /// - "API_KEY_EXPIRED" : The consumer's API Key has expired. | 
 |   /// - "API_KEY_NOT_FOUND" : The consumer's API Key was not found in config | 
 |   /// record. | 
 |   /// - "SPATULA_HEADER_INVALID" : The consumer's spatula header is invalid. | 
 |   /// - "LOAS_ROLE_INVALID" : The consumer's LOAS role is invalid. | 
 |   /// - "NO_LOAS_PROJECT" : The consumer's LOAS role has no associated project. | 
 |   /// - "LOAS_PROJECT_DISABLED" : The consumer's LOAS project is not `ACTIVE` in | 
 |   /// LoquatV2. | 
 |   /// - "SECURITY_POLICY_VIOLATED" : Request is not allowed as per security | 
 |   /// policies defined in Org Policy. | 
 |   /// - "NAMESPACE_LOOKUP_UNAVAILABLE" : The backend server for looking up | 
 |   /// project id/number is unavailable. | 
 |   /// - "SERVICE_STATUS_UNAVAILABLE" : The backend server for checking service | 
 |   /// status is unavailable. | 
 |   /// - "BILLING_STATUS_UNAVAILABLE" : The backend server for checking billing | 
 |   /// status is unavailable. | 
 |   /// - "QUOTA_CHECK_UNAVAILABLE" : The backend server for checking quota limits | 
 |   /// is unavailable. | 
 |   /// - "LOAS_PROJECT_LOOKUP_UNAVAILABLE" : The Spanner for looking up LOAS | 
 |   /// project is unavailable. | 
 |   /// - "CLOUD_RESOURCE_MANAGER_BACKEND_UNAVAILABLE" : Cloud Resource Manager | 
 |   /// backend server is unavailable. | 
 |   /// - "SECURITY_POLICY_BACKEND_UNAVAILABLE" : Backend server for evaluating | 
 |   /// security policy is unavailable. | 
 |   core.String code; | 
 |  | 
 |   /// Free-form text providing details on the error cause of the error. | 
 |   core.String detail; | 
 |  | 
 |   /// Subject to whom this error applies. See the specific code enum for more | 
 |   /// details on this field. For example: | 
 |   ///     - “project:<project-id or project-number>” | 
 |   ///     - “folder:<folder-id>” | 
 |   ///     - “organization:<organization-id>” | 
 |   core.String subject; | 
 |  | 
 |   CheckError(); | 
 |  | 
 |   CheckError.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("code")) { | 
 |       code = _json["code"]; | 
 |     } | 
 |     if (_json.containsKey("detail")) { | 
 |       detail = _json["detail"]; | 
 |     } | 
 |     if (_json.containsKey("subject")) { | 
 |       subject = _json["subject"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (code != null) { | 
 |       _json["code"] = code; | 
 |     } | 
 |     if (detail != null) { | 
 |       _json["detail"] = detail; | 
 |     } | 
 |     if (subject != null) { | 
 |       _json["subject"] = subject; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Contains additional information about the check operation. | 
 | class CheckInfo { | 
 |   /// Consumer info of this check. | 
 |   ConsumerInfo consumerInfo; | 
 |  | 
 |   /// A list of fields and label keys that are ignored by the server. | 
 |   /// The client doesn't need to send them for following requests to improve | 
 |   /// performance and allow better aggregation. | 
 |   core.List<core.String> unusedArguments; | 
 |  | 
 |   CheckInfo(); | 
 |  | 
 |   CheckInfo.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("consumerInfo")) { | 
 |       consumerInfo = new ConsumerInfo.fromJson(_json["consumerInfo"]); | 
 |     } | 
 |     if (_json.containsKey("unusedArguments")) { | 
 |       unusedArguments = _json["unusedArguments"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (consumerInfo != null) { | 
 |       _json["consumerInfo"] = (consumerInfo).toJson(); | 
 |     } | 
 |     if (unusedArguments != null) { | 
 |       _json["unusedArguments"] = unusedArguments; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Request message for the Check method. | 
 | class CheckRequest { | 
 |   /// The operation to be checked. | 
 |   Operation operation; | 
 |  | 
 |   /// Requests the project settings to be returned as part of the check | 
 |   /// response. | 
 |   core.bool requestProjectSettings; | 
 |  | 
 |   /// Specifies which version of service configuration should be used to process | 
 |   /// the request. | 
 |   /// | 
 |   /// If unspecified or no matching version can be found, the | 
 |   /// latest one will be used. | 
 |   core.String serviceConfigId; | 
 |  | 
 |   /// Indicates if service activation check should be skipped for this request. | 
 |   /// Default behavior is to perform the check and apply relevant quota. | 
 |   core.bool skipActivationCheck; | 
 |  | 
 |   CheckRequest(); | 
 |  | 
 |   CheckRequest.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("operation")) { | 
 |       operation = new Operation.fromJson(_json["operation"]); | 
 |     } | 
 |     if (_json.containsKey("requestProjectSettings")) { | 
 |       requestProjectSettings = _json["requestProjectSettings"]; | 
 |     } | 
 |     if (_json.containsKey("serviceConfigId")) { | 
 |       serviceConfigId = _json["serviceConfigId"]; | 
 |     } | 
 |     if (_json.containsKey("skipActivationCheck")) { | 
 |       skipActivationCheck = _json["skipActivationCheck"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (operation != null) { | 
 |       _json["operation"] = (operation).toJson(); | 
 |     } | 
 |     if (requestProjectSettings != null) { | 
 |       _json["requestProjectSettings"] = requestProjectSettings; | 
 |     } | 
 |     if (serviceConfigId != null) { | 
 |       _json["serviceConfigId"] = serviceConfigId; | 
 |     } | 
 |     if (skipActivationCheck != null) { | 
 |       _json["skipActivationCheck"] = skipActivationCheck; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Response message for the Check method. | 
 | class CheckResponse { | 
 |   /// Indicate the decision of the check. | 
 |   /// | 
 |   /// If no check errors are present, the service should process the operation. | 
 |   /// Otherwise the service should use the list of errors to determine the | 
 |   /// appropriate action. | 
 |   core.List<CheckError> checkErrors; | 
 |  | 
 |   /// Feedback data returned from the server during processing a Check request. | 
 |   CheckInfo checkInfo; | 
 |  | 
 |   /// The same operation_id value used in the CheckRequest. | 
 |   /// Used for logging and diagnostics purposes. | 
 |   core.String operationId; | 
 |  | 
 |   /// Quota information for the check request associated with this response. | 
 |   QuotaInfo quotaInfo; | 
 |  | 
 |   /// The actual config id used to process the request. | 
 |   core.String serviceConfigId; | 
 |  | 
 |   CheckResponse(); | 
 |  | 
 |   CheckResponse.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("checkErrors")) { | 
 |       checkErrors = _json["checkErrors"] | 
 |           .map<CheckError>((value) => new CheckError.fromJson(value)) | 
 |           .toList(); | 
 |     } | 
 |     if (_json.containsKey("checkInfo")) { | 
 |       checkInfo = new CheckInfo.fromJson(_json["checkInfo"]); | 
 |     } | 
 |     if (_json.containsKey("operationId")) { | 
 |       operationId = _json["operationId"]; | 
 |     } | 
 |     if (_json.containsKey("quotaInfo")) { | 
 |       quotaInfo = new QuotaInfo.fromJson(_json["quotaInfo"]); | 
 |     } | 
 |     if (_json.containsKey("serviceConfigId")) { | 
 |       serviceConfigId = _json["serviceConfigId"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (checkErrors != null) { | 
 |       _json["checkErrors"] = | 
 |           checkErrors.map((value) => (value).toJson()).toList(); | 
 |     } | 
 |     if (checkInfo != null) { | 
 |       _json["checkInfo"] = (checkInfo).toJson(); | 
 |     } | 
 |     if (operationId != null) { | 
 |       _json["operationId"] = operationId; | 
 |     } | 
 |     if (quotaInfo != null) { | 
 |       _json["quotaInfo"] = (quotaInfo).toJson(); | 
 |     } | 
 |     if (serviceConfigId != null) { | 
 |       _json["serviceConfigId"] = serviceConfigId; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// `ConsumerInfo` provides information about the consumer project. | 
 | class ConsumerInfo { | 
 |   /// The Google cloud project number, e.g. 1234567890. A value of 0 indicates | 
 |   /// no project number is found. | 
 |   core.String projectNumber; | 
 |  | 
 |   ConsumerInfo(); | 
 |  | 
 |   ConsumerInfo.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("projectNumber")) { | 
 |       projectNumber = _json["projectNumber"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (projectNumber != null) { | 
 |       _json["projectNumber"] = projectNumber; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Distribution represents a frequency distribution of double-valued sample | 
 | /// points. It contains the size of the population of sample points plus | 
 | /// additional optional information: | 
 | /// | 
 | ///   - the arithmetic mean of the samples | 
 | ///   - the minimum and maximum of the samples | 
 | ///   - the sum-squared-deviation of the samples, used to compute variance | 
 | ///   - a histogram of the values of the sample points | 
 | class Distribution { | 
 |   /// The number of samples in each histogram bucket. `bucket_counts` are | 
 |   /// optional. If present, they must sum to the `count` value. | 
 |   /// | 
 |   /// The buckets are defined below in `bucket_option`. There are N buckets. | 
 |   /// `bucket_counts[0]` is the number of samples in the underflow bucket. | 
 |   /// `bucket_counts[1]` to `bucket_counts[N-1]` are the numbers of samples | 
 |   /// in each of the finite buckets. And `bucket_counts[N] is the number | 
 |   /// of samples in the overflow bucket. See the comments of `bucket_option` | 
 |   /// below for more details. | 
 |   /// | 
 |   /// Any suffix of trailing zeros may be omitted. | 
 |   core.List<core.String> bucketCounts; | 
 |  | 
 |   /// The total number of samples in the distribution. Must be >= 0. | 
 |   core.String count; | 
 |  | 
 |   /// Buckets with arbitrary user-provided width. | 
 |   ExplicitBuckets explicitBuckets; | 
 |  | 
 |   /// Buckets with exponentially growing width. | 
 |   ExponentialBuckets exponentialBuckets; | 
 |  | 
 |   /// Buckets with constant width. | 
 |   LinearBuckets linearBuckets; | 
 |  | 
 |   /// The maximum of the population of values. Ignored if `count` is zero. | 
 |   core.double maximum; | 
 |  | 
 |   /// The arithmetic mean of the samples in the distribution. If `count` is | 
 |   /// zero then this field must be zero. | 
 |   core.double mean; | 
 |  | 
 |   /// The minimum of the population of values. Ignored if `count` is zero. | 
 |   core.double minimum; | 
 |  | 
 |   /// The sum of squared deviations from the mean: | 
 |   ///   Sum[i=1..count]((x_i - mean)^2) | 
 |   /// where each x_i is a sample values. If `count` is zero then this field | 
 |   /// must be zero, otherwise validation of the request fails. | 
 |   core.double sumOfSquaredDeviation; | 
 |  | 
 |   Distribution(); | 
 |  | 
 |   Distribution.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("bucketCounts")) { | 
 |       bucketCounts = _json["bucketCounts"]; | 
 |     } | 
 |     if (_json.containsKey("count")) { | 
 |       count = _json["count"]; | 
 |     } | 
 |     if (_json.containsKey("explicitBuckets")) { | 
 |       explicitBuckets = new ExplicitBuckets.fromJson(_json["explicitBuckets"]); | 
 |     } | 
 |     if (_json.containsKey("exponentialBuckets")) { | 
 |       exponentialBuckets = | 
 |           new ExponentialBuckets.fromJson(_json["exponentialBuckets"]); | 
 |     } | 
 |     if (_json.containsKey("linearBuckets")) { | 
 |       linearBuckets = new LinearBuckets.fromJson(_json["linearBuckets"]); | 
 |     } | 
 |     if (_json.containsKey("maximum")) { | 
 |       maximum = _json["maximum"]; | 
 |     } | 
 |     if (_json.containsKey("mean")) { | 
 |       mean = _json["mean"]; | 
 |     } | 
 |     if (_json.containsKey("minimum")) { | 
 |       minimum = _json["minimum"]; | 
 |     } | 
 |     if (_json.containsKey("sumOfSquaredDeviation")) { | 
 |       sumOfSquaredDeviation = _json["sumOfSquaredDeviation"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (bucketCounts != null) { | 
 |       _json["bucketCounts"] = bucketCounts; | 
 |     } | 
 |     if (count != null) { | 
 |       _json["count"] = count; | 
 |     } | 
 |     if (explicitBuckets != null) { | 
 |       _json["explicitBuckets"] = (explicitBuckets).toJson(); | 
 |     } | 
 |     if (exponentialBuckets != null) { | 
 |       _json["exponentialBuckets"] = (exponentialBuckets).toJson(); | 
 |     } | 
 |     if (linearBuckets != null) { | 
 |       _json["linearBuckets"] = (linearBuckets).toJson(); | 
 |     } | 
 |     if (maximum != null) { | 
 |       _json["maximum"] = maximum; | 
 |     } | 
 |     if (mean != null) { | 
 |       _json["mean"] = mean; | 
 |     } | 
 |     if (minimum != null) { | 
 |       _json["minimum"] = minimum; | 
 |     } | 
 |     if (sumOfSquaredDeviation != null) { | 
 |       _json["sumOfSquaredDeviation"] = sumOfSquaredDeviation; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Request message for QuotaController.EndReconciliation. | 
 | class EndReconciliationRequest { | 
 |   /// Operation that describes the quota reconciliation. | 
 |   QuotaOperation reconciliationOperation; | 
 |  | 
 |   /// Specifies which version of service configuration should be used to process | 
 |   /// the request. If unspecified or no matching version can be found, the | 
 |   /// latest | 
 |   /// one will be used. | 
 |   core.String serviceConfigId; | 
 |  | 
 |   EndReconciliationRequest(); | 
 |  | 
 |   EndReconciliationRequest.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("reconciliationOperation")) { | 
 |       reconciliationOperation = | 
 |           new QuotaOperation.fromJson(_json["reconciliationOperation"]); | 
 |     } | 
 |     if (_json.containsKey("serviceConfigId")) { | 
 |       serviceConfigId = _json["serviceConfigId"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (reconciliationOperation != null) { | 
 |       _json["reconciliationOperation"] = (reconciliationOperation).toJson(); | 
 |     } | 
 |     if (serviceConfigId != null) { | 
 |       _json["serviceConfigId"] = serviceConfigId; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Response message for QuotaController.EndReconciliation. | 
 | class EndReconciliationResponse { | 
 |   /// The same operation_id value used in the EndReconciliationRequest. Used for | 
 |   /// logging and diagnostics purposes. | 
 |   core.String operationId; | 
 |  | 
 |   /// Metric values as tracked by One Platform before the adjustment was made. | 
 |   /// The following metrics will be included: | 
 |   /// | 
 |   /// 1. Per quota metric total usage will be specified using the following | 
 |   /// gauge | 
 |   /// metric: | 
 |   ///   "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" | 
 |   /// | 
 |   /// 2. Value for each quota limit associated with the metrics will be | 
 |   /// specified | 
 |   /// using the following gauge metric: | 
 |   ///   "serviceruntime.googleapis.com/quota/limit" | 
 |   /// | 
 |   /// 3. Delta value of the usage after the reconciliation for limits associated | 
 |   /// with the metrics will be specified using the following metric: | 
 |   ///   "serviceruntime.googleapis.com/allocation/reconciliation_delta" | 
 |   /// The delta value is defined as: | 
 |   ///   new_usage_from_client - existing_value_in_spanner. | 
 |   /// This metric is not defined in serviceruntime.yaml or in Cloud Monarch. | 
 |   /// This metric is meant for callers' use only. Since this metric is not | 
 |   /// defined in the monitoring backend, reporting on this metric will result in | 
 |   /// an error. | 
 |   core.List<MetricValueSet> quotaMetrics; | 
 |  | 
 |   /// Indicates the decision of the reconciliation end. | 
 |   core.List<QuotaError> reconciliationErrors; | 
 |  | 
 |   /// ID of the actual config used to process the request. | 
 |   core.String serviceConfigId; | 
 |  | 
 |   EndReconciliationResponse(); | 
 |  | 
 |   EndReconciliationResponse.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("operationId")) { | 
 |       operationId = _json["operationId"]; | 
 |     } | 
 |     if (_json.containsKey("quotaMetrics")) { | 
 |       quotaMetrics = _json["quotaMetrics"] | 
 |           .map<MetricValueSet>((value) => new MetricValueSet.fromJson(value)) | 
 |           .toList(); | 
 |     } | 
 |     if (_json.containsKey("reconciliationErrors")) { | 
 |       reconciliationErrors = _json["reconciliationErrors"] | 
 |           .map<QuotaError>((value) => new QuotaError.fromJson(value)) | 
 |           .toList(); | 
 |     } | 
 |     if (_json.containsKey("serviceConfigId")) { | 
 |       serviceConfigId = _json["serviceConfigId"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (operationId != null) { | 
 |       _json["operationId"] = operationId; | 
 |     } | 
 |     if (quotaMetrics != null) { | 
 |       _json["quotaMetrics"] = | 
 |           quotaMetrics.map((value) => (value).toJson()).toList(); | 
 |     } | 
 |     if (reconciliationErrors != null) { | 
 |       _json["reconciliationErrors"] = | 
 |           reconciliationErrors.map((value) => (value).toJson()).toList(); | 
 |     } | 
 |     if (serviceConfigId != null) { | 
 |       _json["serviceConfigId"] = serviceConfigId; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Describing buckets with arbitrary user-provided width. | 
 | class ExplicitBuckets { | 
 |   /// 'bound' is a list of strictly increasing boundaries between | 
 |   /// buckets. Note that a list of length N-1 defines N buckets because | 
 |   /// of fenceposting. See comments on `bucket_options` for details. | 
 |   /// | 
 |   /// The i'th finite bucket covers the interval | 
 |   ///   [bound[i-1], bound[i]) | 
 |   /// where i ranges from 1 to bound_size() - 1. Note that there are no | 
 |   /// finite buckets at all if 'bound' only contains a single element; in | 
 |   /// that special case the single bound defines the boundary between the | 
 |   /// underflow and overflow buckets. | 
 |   /// | 
 |   /// bucket number                   lower bound    upper bound | 
 |   ///  i == 0 (underflow)              -inf           bound[i] | 
 |   ///  0 < i < bound_size()            bound[i-1]     bound[i] | 
 |   ///  i == bound_size() (overflow)    bound[i-1]     +inf | 
 |   core.List<core.double> bounds; | 
 |  | 
 |   ExplicitBuckets(); | 
 |  | 
 |   ExplicitBuckets.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("bounds")) { | 
 |       bounds = _json["bounds"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (bounds != null) { | 
 |       _json["bounds"] = bounds; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Describing buckets with exponentially growing width. | 
 | class ExponentialBuckets { | 
 |   /// The i'th exponential bucket covers the interval | 
 |   ///   [scale * growth_factor^(i-1), scale * growth_factor^i) | 
 |   /// where i ranges from 1 to num_finite_buckets inclusive. | 
 |   /// Must be larger than 1.0. | 
 |   core.double growthFactor; | 
 |  | 
 |   /// The number of finite buckets. With the underflow and overflow buckets, | 
 |   /// the total number of buckets is `num_finite_buckets` + 2. | 
 |   /// See comments on `bucket_options` for details. | 
 |   core.int numFiniteBuckets; | 
 |  | 
 |   /// The i'th exponential bucket covers the interval | 
 |   ///   [scale * growth_factor^(i-1), scale * growth_factor^i) | 
 |   /// where i ranges from 1 to num_finite_buckets inclusive. | 
 |   /// Must be > 0. | 
 |   core.double scale; | 
 |  | 
 |   ExponentialBuckets(); | 
 |  | 
 |   ExponentialBuckets.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("growthFactor")) { | 
 |       growthFactor = _json["growthFactor"]; | 
 |     } | 
 |     if (_json.containsKey("numFiniteBuckets")) { | 
 |       numFiniteBuckets = _json["numFiniteBuckets"]; | 
 |     } | 
 |     if (_json.containsKey("scale")) { | 
 |       scale = _json["scale"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (growthFactor != null) { | 
 |       _json["growthFactor"] = growthFactor; | 
 |     } | 
 |     if (numFiniteBuckets != null) { | 
 |       _json["numFiniteBuckets"] = numFiniteBuckets; | 
 |     } | 
 |     if (scale != null) { | 
 |       _json["scale"] = scale; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Describing buckets with constant width. | 
 | class LinearBuckets { | 
 |   /// The number of finite buckets. With the underflow and overflow buckets, | 
 |   /// the total number of buckets is `num_finite_buckets` + 2. | 
 |   /// See comments on `bucket_options` for details. | 
 |   core.int numFiniteBuckets; | 
 |  | 
 |   /// The i'th linear bucket covers the interval | 
 |   ///   [offset + (i-1) * width, offset + i * width) | 
 |   /// where i ranges from 1 to num_finite_buckets, inclusive. | 
 |   core.double offset; | 
 |  | 
 |   /// The i'th linear bucket covers the interval | 
 |   ///   [offset + (i-1) * width, offset + i * width) | 
 |   /// where i ranges from 1 to num_finite_buckets, inclusive. | 
 |   /// Must be strictly positive. | 
 |   core.double width; | 
 |  | 
 |   LinearBuckets(); | 
 |  | 
 |   LinearBuckets.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("numFiniteBuckets")) { | 
 |       numFiniteBuckets = _json["numFiniteBuckets"]; | 
 |     } | 
 |     if (_json.containsKey("offset")) { | 
 |       offset = _json["offset"]; | 
 |     } | 
 |     if (_json.containsKey("width")) { | 
 |       width = _json["width"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (numFiniteBuckets != null) { | 
 |       _json["numFiniteBuckets"] = numFiniteBuckets; | 
 |     } | 
 |     if (offset != null) { | 
 |       _json["offset"] = offset; | 
 |     } | 
 |     if (width != null) { | 
 |       _json["width"] = width; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// An individual log entry. | 
 | class LogEntry { | 
 |   /// A unique ID for the log entry used for deduplication. If omitted, | 
 |   /// the implementation will generate one based on operation_id. | 
 |   core.String insertId; | 
 |  | 
 |   /// A set of user-defined (key, value) data that provides additional | 
 |   /// information about the log entry. | 
 |   core.Map<core.String, core.String> labels; | 
 |  | 
 |   /// Required. The log to which this log entry belongs. Examples: `"syslog"`, | 
 |   /// `"book_log"`. | 
 |   core.String name; | 
 |  | 
 |   /// The log entry payload, represented as a protocol buffer that is | 
 |   /// expressed as a JSON object. The only accepted type currently is | 
 |   /// AuditLog. | 
 |   /// | 
 |   /// The values for Object must be JSON objects. It can consist of `num`, | 
 |   /// `String`, `bool` and `null` as well as `Map` and `List` values. | 
 |   core.Map<core.String, core.Object> protoPayload; | 
 |  | 
 |   /// The severity of the log entry. The default value is | 
 |   /// `LogSeverity.DEFAULT`. | 
 |   /// Possible string values are: | 
 |   /// - "DEFAULT" : (0) The log entry has no assigned severity level. | 
 |   /// - "DEBUG" : (100) Debug or trace information. | 
 |   /// - "INFO" : (200) Routine information, such as ongoing status or | 
 |   /// performance. | 
 |   /// - "NOTICE" : (300) Normal but significant events, such as start up, shut | 
 |   /// down, or | 
 |   /// a configuration change. | 
 |   /// - "WARNING" : (400) Warning events might cause problems. | 
 |   /// - "ERROR" : (500) Error events are likely to cause problems. | 
 |   /// - "CRITICAL" : (600) Critical events cause more severe problems or | 
 |   /// outages. | 
 |   /// - "ALERT" : (700) A person must take an action immediately. | 
 |   /// - "EMERGENCY" : (800) One or more systems are unusable. | 
 |   core.String severity; | 
 |  | 
 |   /// The log entry payload, represented as a structure that | 
 |   /// is expressed as a JSON object. | 
 |   /// | 
 |   /// The values for Object must be JSON objects. It can consist of `num`, | 
 |   /// `String`, `bool` and `null` as well as `Map` and `List` values. | 
 |   core.Map<core.String, core.Object> structPayload; | 
 |  | 
 |   /// The log entry payload, represented as a Unicode string (UTF-8). | 
 |   core.String textPayload; | 
 |  | 
 |   /// The time the event described by the log entry occurred. If | 
 |   /// omitted, defaults to operation start time. | 
 |   core.String timestamp; | 
 |  | 
 |   LogEntry(); | 
 |  | 
 |   LogEntry.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("insertId")) { | 
 |       insertId = _json["insertId"]; | 
 |     } | 
 |     if (_json.containsKey("labels")) { | 
 |       labels = _json["labels"]; | 
 |     } | 
 |     if (_json.containsKey("name")) { | 
 |       name = _json["name"]; | 
 |     } | 
 |     if (_json.containsKey("protoPayload")) { | 
 |       protoPayload = _json["protoPayload"]; | 
 |     } | 
 |     if (_json.containsKey("severity")) { | 
 |       severity = _json["severity"]; | 
 |     } | 
 |     if (_json.containsKey("structPayload")) { | 
 |       structPayload = _json["structPayload"]; | 
 |     } | 
 |     if (_json.containsKey("textPayload")) { | 
 |       textPayload = _json["textPayload"]; | 
 |     } | 
 |     if (_json.containsKey("timestamp")) { | 
 |       timestamp = _json["timestamp"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (insertId != null) { | 
 |       _json["insertId"] = insertId; | 
 |     } | 
 |     if (labels != null) { | 
 |       _json["labels"] = labels; | 
 |     } | 
 |     if (name != null) { | 
 |       _json["name"] = name; | 
 |     } | 
 |     if (protoPayload != null) { | 
 |       _json["protoPayload"] = protoPayload; | 
 |     } | 
 |     if (severity != null) { | 
 |       _json["severity"] = severity; | 
 |     } | 
 |     if (structPayload != null) { | 
 |       _json["structPayload"] = structPayload; | 
 |     } | 
 |     if (textPayload != null) { | 
 |       _json["textPayload"] = textPayload; | 
 |     } | 
 |     if (timestamp != null) { | 
 |       _json["timestamp"] = timestamp; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Represents a single metric value. | 
 | class MetricValue { | 
 |   /// A boolean value. | 
 |   core.bool boolValue; | 
 |  | 
 |   /// A distribution value. | 
 |   Distribution distributionValue; | 
 |  | 
 |   /// A double precision floating point value. | 
 |   core.double doubleValue; | 
 |  | 
 |   /// The end of the time period over which this metric value's measurement | 
 |   /// applies. | 
 |   core.String endTime; | 
 |  | 
 |   /// A signed 64-bit integer value. | 
 |   core.String int64Value; | 
 |  | 
 |   /// The labels describing the metric value. | 
 |   /// See comments on google.api.servicecontrol.v1.Operation.labels for | 
 |   /// the overriding relationship. | 
 |   core.Map<core.String, core.String> labels; | 
 |  | 
 |   /// A money value. | 
 |   Money moneyValue; | 
 |  | 
 |   /// The start of the time period over which this metric value's measurement | 
 |   /// applies. The time period has different semantics for different metric | 
 |   /// types (cumulative, delta, and gauge). See the metric definition | 
 |   /// documentation in the service configuration for details. | 
 |   core.String startTime; | 
 |  | 
 |   /// A text string value. | 
 |   core.String stringValue; | 
 |  | 
 |   MetricValue(); | 
 |  | 
 |   MetricValue.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("boolValue")) { | 
 |       boolValue = _json["boolValue"]; | 
 |     } | 
 |     if (_json.containsKey("distributionValue")) { | 
 |       distributionValue = new Distribution.fromJson(_json["distributionValue"]); | 
 |     } | 
 |     if (_json.containsKey("doubleValue")) { | 
 |       doubleValue = _json["doubleValue"]; | 
 |     } | 
 |     if (_json.containsKey("endTime")) { | 
 |       endTime = _json["endTime"]; | 
 |     } | 
 |     if (_json.containsKey("int64Value")) { | 
 |       int64Value = _json["int64Value"]; | 
 |     } | 
 |     if (_json.containsKey("labels")) { | 
 |       labels = _json["labels"]; | 
 |     } | 
 |     if (_json.containsKey("moneyValue")) { | 
 |       moneyValue = new Money.fromJson(_json["moneyValue"]); | 
 |     } | 
 |     if (_json.containsKey("startTime")) { | 
 |       startTime = _json["startTime"]; | 
 |     } | 
 |     if (_json.containsKey("stringValue")) { | 
 |       stringValue = _json["stringValue"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (boolValue != null) { | 
 |       _json["boolValue"] = boolValue; | 
 |     } | 
 |     if (distributionValue != null) { | 
 |       _json["distributionValue"] = (distributionValue).toJson(); | 
 |     } | 
 |     if (doubleValue != null) { | 
 |       _json["doubleValue"] = doubleValue; | 
 |     } | 
 |     if (endTime != null) { | 
 |       _json["endTime"] = endTime; | 
 |     } | 
 |     if (int64Value != null) { | 
 |       _json["int64Value"] = int64Value; | 
 |     } | 
 |     if (labels != null) { | 
 |       _json["labels"] = labels; | 
 |     } | 
 |     if (moneyValue != null) { | 
 |       _json["moneyValue"] = (moneyValue).toJson(); | 
 |     } | 
 |     if (startTime != null) { | 
 |       _json["startTime"] = startTime; | 
 |     } | 
 |     if (stringValue != null) { | 
 |       _json["stringValue"] = stringValue; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Represents a set of metric values in the same metric. | 
 | /// Each metric value in the set should have a unique combination of start time, | 
 | /// end time, and label values. | 
 | class MetricValueSet { | 
 |   /// The metric name defined in the service configuration. | 
 |   core.String metricName; | 
 |  | 
 |   /// The values in this metric. | 
 |   core.List<MetricValue> metricValues; | 
 |  | 
 |   MetricValueSet(); | 
 |  | 
 |   MetricValueSet.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("metricName")) { | 
 |       metricName = _json["metricName"]; | 
 |     } | 
 |     if (_json.containsKey("metricValues")) { | 
 |       metricValues = _json["metricValues"] | 
 |           .map<MetricValue>((value) => new MetricValue.fromJson(value)) | 
 |           .toList(); | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (metricName != null) { | 
 |       _json["metricName"] = metricName; | 
 |     } | 
 |     if (metricValues != null) { | 
 |       _json["metricValues"] = | 
 |           metricValues.map((value) => (value).toJson()).toList(); | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Represents an amount of money with its currency type. | 
 | class Money { | 
 |   /// The 3-letter currency code defined in ISO 4217. | 
 |   core.String currencyCode; | 
 |  | 
 |   /// Number of nano (10^-9) units of the amount. | 
 |   /// The value must be between -999,999,999 and +999,999,999 inclusive. | 
 |   /// If `units` is positive, `nanos` must be positive or zero. | 
 |   /// If `units` is zero, `nanos` can be positive, zero, or negative. | 
 |   /// If `units` is negative, `nanos` must be negative or zero. | 
 |   /// For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000. | 
 |   core.int nanos; | 
 |  | 
 |   /// The whole units of the amount. | 
 |   /// For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar. | 
 |   core.String units; | 
 |  | 
 |   Money(); | 
 |  | 
 |   Money.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("currencyCode")) { | 
 |       currencyCode = _json["currencyCode"]; | 
 |     } | 
 |     if (_json.containsKey("nanos")) { | 
 |       nanos = _json["nanos"]; | 
 |     } | 
 |     if (_json.containsKey("units")) { | 
 |       units = _json["units"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (currencyCode != null) { | 
 |       _json["currencyCode"] = currencyCode; | 
 |     } | 
 |     if (nanos != null) { | 
 |       _json["nanos"] = nanos; | 
 |     } | 
 |     if (units != null) { | 
 |       _json["units"] = units; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Represents information regarding an operation. | 
 | class Operation { | 
 |   /// Identity of the consumer who is using the service. | 
 |   /// This field should be filled in for the operations initiated by a | 
 |   /// consumer, but not for service-initiated operations that are | 
 |   /// not related to a specific consumer. | 
 |   /// | 
 |   /// This can be in one of the following formats: | 
 |   ///   project:<project_id>, | 
 |   ///   project_number:<project_number>, | 
 |   ///   api_key:<api_key>. | 
 |   core.String consumerId; | 
 |  | 
 |   /// End time of the operation. | 
 |   /// Required when the operation is used in ServiceController.Report, | 
 |   /// but optional when the operation is used in ServiceController.Check. | 
 |   core.String endTime; | 
 |  | 
 |   /// DO NOT USE. This is an experimental field. | 
 |   /// Possible string values are: | 
 |   /// - "LOW" : The API implementation may cache and aggregate the data. | 
 |   /// The data may be lost when rare and unexpected system failures occur. | 
 |   /// - "HIGH" : The API implementation doesn't cache and aggregate the data. | 
 |   /// If the method returns successfully, it's guaranteed that the data has | 
 |   /// been persisted in durable storage. | 
 |   /// - "DEBUG" : In addition to the behavior described in HIGH, DEBUG enables | 
 |   /// additional validation logic that is only useful during the onboarding | 
 |   /// process. This is only available to Google internal services and | 
 |   /// the service must be whitelisted by chemist-dev@google.com in order | 
 |   /// to use this level. | 
 |   core.String importance; | 
 |  | 
 |   /// Labels describing the operation. Only the following labels are allowed: | 
 |   /// | 
 |   /// - Labels describing monitored resources as defined in | 
 |   ///   the service configuration. | 
 |   /// - Default labels of metric values. When specified, labels defined in the | 
 |   ///   metric value override these default. | 
 |   /// - The following labels defined by Google Cloud Platform: | 
 |   ///     - `cloud.googleapis.com/location` describing the location where the | 
 |   ///        operation happened, | 
 |   /// - `servicecontrol.googleapis.com/user_agent` describing the user agent | 
 |   ///        of the API request, | 
 |   /// - `servicecontrol.googleapis.com/service_agent` describing the service | 
 |   ///        used to handle the API request (e.g. ESP), | 
 |   ///     - `servicecontrol.googleapis.com/platform` describing the platform | 
 |   ///        where the API is served (e.g. GAE, GCE, GKE). | 
 |   core.Map<core.String, core.String> labels; | 
 |  | 
 |   /// Represents information to be logged. | 
 |   core.List<LogEntry> logEntries; | 
 |  | 
 |   /// Represents information about this operation. Each MetricValueSet | 
 |   /// corresponds to a metric defined in the service configuration. | 
 |   /// The data type used in the MetricValueSet must agree with | 
 |   /// the data type specified in the metric definition. | 
 |   /// | 
 |   /// Within a single operation, it is not allowed to have more than one | 
 |   /// MetricValue instances that have the same metric names and identical | 
 |   /// label value combinations. If a request has such duplicated MetricValue | 
 |   /// instances, the entire request is rejected with | 
 |   /// an invalid argument error. | 
 |   core.List<MetricValueSet> metricValueSets; | 
 |  | 
 |   /// Identity of the operation. This must be unique within the scope of the | 
 |   /// service that generated the operation. If the service calls | 
 |   /// Check() and Report() on the same operation, the two calls should carry | 
 |   /// the same id. | 
 |   /// | 
 |   /// UUID version 4 is recommended, though not required. | 
 |   /// In scenarios where an operation is computed from existing information | 
 |   /// and an idempotent id is desirable for deduplication purpose, UUID version | 
 |   /// 5 | 
 |   /// is recommended. See RFC 4122 for details. | 
 |   core.String operationId; | 
 |  | 
 |   /// Fully qualified name of the operation. Reserved for future use. | 
 |   core.String operationName; | 
 |  | 
 |   /// Represents the properties needed for quota check. Applicable only if this | 
 |   /// operation is for a quota check request. If this is not specified, no quota | 
 |   /// check will be performed. | 
 |   QuotaProperties quotaProperties; | 
 |  | 
 |   /// DO NOT USE. This field is deprecated, use "resources" field instead. | 
 |   /// The resource name of the parent of a resource in the resource hierarchy. | 
 |   /// | 
 |   /// This can be in one of the following formats: | 
 |   ///     - “projects/<project-id or project-number>” | 
 |   ///     - “folders/<folder-id>” | 
 |   ///     - “organizations/<organization-id>” | 
 |   core.String resourceContainer; | 
 |  | 
 |   /// The resources that are involved in the operation. | 
 |   core.List<ResourceInfo> resources; | 
 |  | 
 |   /// Required. Start time of the operation. | 
 |   core.String startTime; | 
 |  | 
 |   /// User defined labels for the resource that this operation is associated | 
 |   /// with. Only a combination of 1000 user labels per consumer project are | 
 |   /// allowed. | 
 |   core.Map<core.String, core.String> userLabels; | 
 |  | 
 |   Operation(); | 
 |  | 
 |   Operation.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("consumerId")) { | 
 |       consumerId = _json["consumerId"]; | 
 |     } | 
 |     if (_json.containsKey("endTime")) { | 
 |       endTime = _json["endTime"]; | 
 |     } | 
 |     if (_json.containsKey("importance")) { | 
 |       importance = _json["importance"]; | 
 |     } | 
 |     if (_json.containsKey("labels")) { | 
 |       labels = _json["labels"]; | 
 |     } | 
 |     if (_json.containsKey("logEntries")) { | 
 |       logEntries = _json["logEntries"] | 
 |           .map<LogEntry>((value) => new LogEntry.fromJson(value)) | 
 |           .toList(); | 
 |     } | 
 |     if (_json.containsKey("metricValueSets")) { | 
 |       metricValueSets = _json["metricValueSets"] | 
 |           .map<MetricValueSet>((value) => new MetricValueSet.fromJson(value)) | 
 |           .toList(); | 
 |     } | 
 |     if (_json.containsKey("operationId")) { | 
 |       operationId = _json["operationId"]; | 
 |     } | 
 |     if (_json.containsKey("operationName")) { | 
 |       operationName = _json["operationName"]; | 
 |     } | 
 |     if (_json.containsKey("quotaProperties")) { | 
 |       quotaProperties = new QuotaProperties.fromJson(_json["quotaProperties"]); | 
 |     } | 
 |     if (_json.containsKey("resourceContainer")) { | 
 |       resourceContainer = _json["resourceContainer"]; | 
 |     } | 
 |     if (_json.containsKey("resources")) { | 
 |       resources = _json["resources"] | 
 |           .map<ResourceInfo>((value) => new ResourceInfo.fromJson(value)) | 
 |           .toList(); | 
 |     } | 
 |     if (_json.containsKey("startTime")) { | 
 |       startTime = _json["startTime"]; | 
 |     } | 
 |     if (_json.containsKey("userLabels")) { | 
 |       userLabels = _json["userLabels"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (consumerId != null) { | 
 |       _json["consumerId"] = consumerId; | 
 |     } | 
 |     if (endTime != null) { | 
 |       _json["endTime"] = endTime; | 
 |     } | 
 |     if (importance != null) { | 
 |       _json["importance"] = importance; | 
 |     } | 
 |     if (labels != null) { | 
 |       _json["labels"] = labels; | 
 |     } | 
 |     if (logEntries != null) { | 
 |       _json["logEntries"] = | 
 |           logEntries.map((value) => (value).toJson()).toList(); | 
 |     } | 
 |     if (metricValueSets != null) { | 
 |       _json["metricValueSets"] = | 
 |           metricValueSets.map((value) => (value).toJson()).toList(); | 
 |     } | 
 |     if (operationId != null) { | 
 |       _json["operationId"] = operationId; | 
 |     } | 
 |     if (operationName != null) { | 
 |       _json["operationName"] = operationName; | 
 |     } | 
 |     if (quotaProperties != null) { | 
 |       _json["quotaProperties"] = (quotaProperties).toJson(); | 
 |     } | 
 |     if (resourceContainer != null) { | 
 |       _json["resourceContainer"] = resourceContainer; | 
 |     } | 
 |     if (resources != null) { | 
 |       _json["resources"] = resources.map((value) => (value).toJson()).toList(); | 
 |     } | 
 |     if (startTime != null) { | 
 |       _json["startTime"] = startTime; | 
 |     } | 
 |     if (userLabels != null) { | 
 |       _json["userLabels"] = userLabels; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Represents error information for QuotaOperation. | 
 | class QuotaError { | 
 |   /// Error code. | 
 |   /// Possible string values are: | 
 |   /// - "UNSPECIFIED" : This is never used. | 
 |   /// - "RESOURCE_EXHAUSTED" : Quota allocation failed. | 
 |   /// Same as google.rpc.Code.RESOURCE_EXHAUSTED. | 
 |   /// - "OUT_OF_RANGE" : Quota release failed.  This error is ONLY returned on a | 
 |   /// NORMAL release. | 
 |   /// More formally:  if a user requests a release of 10 tokens, but only | 
 |   /// 5 tokens were previously allocated, in a BEST_EFFORT release, this will | 
 |   /// be considered a success, 5 tokens will be released, and the result will | 
 |   /// be "Ok".  If this is done in NORMAL mode, no tokens will be released, | 
 |   /// and an OUT_OF_RANGE error will be returned. | 
 |   /// Same as google.rpc.Code.OUT_OF_RANGE. | 
 |   /// - "BILLING_NOT_ACTIVE" : Consumer cannot access the service because the | 
 |   /// service requires active | 
 |   /// billing. | 
 |   /// - "PROJECT_DELETED" : Consumer's project has been marked as deleted (soft | 
 |   /// deletion). | 
 |   /// - "API_KEY_INVALID" : Specified API key is invalid. | 
 |   /// - "API_KEY_EXPIRED" : Specified API Key has expired. | 
 |   /// - "SPATULA_HEADER_INVALID" : Consumer's spatula header is invalid. | 
 |   /// - "LOAS_ROLE_INVALID" : The consumer's LOAS role is invalid. | 
 |   /// - "NO_LOAS_PROJECT" : The consumer's LOAS role has no associated project. | 
 |   /// - "PROJECT_STATUS_UNAVAILABLE" : The backend server for looking up project | 
 |   /// id/number is unavailable. | 
 |   /// - "SERVICE_STATUS_UNAVAILABLE" : The backend server for checking service | 
 |   /// status is unavailable. | 
 |   /// - "BILLING_STATUS_UNAVAILABLE" : The backend server for checking billing | 
 |   /// status is unavailable. | 
 |   /// - "QUOTA_SYSTEM_UNAVAILABLE" : The backend server for checking quota | 
 |   /// limits is unavailable. | 
 |   core.String code; | 
 |  | 
 |   /// Free-form text that provides details on the cause of the error. | 
 |   core.String description; | 
 |  | 
 |   /// Subject to whom this error applies. See the specific enum for more details | 
 |   /// on this field. For example, "clientip:<ip address of client>" or | 
 |   /// "project:<Google developer project id>". | 
 |   core.String subject; | 
 |  | 
 |   QuotaError(); | 
 |  | 
 |   QuotaError.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("code")) { | 
 |       code = _json["code"]; | 
 |     } | 
 |     if (_json.containsKey("description")) { | 
 |       description = _json["description"]; | 
 |     } | 
 |     if (_json.containsKey("subject")) { | 
 |       subject = _json["subject"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (code != null) { | 
 |       _json["code"] = code; | 
 |     } | 
 |     if (description != null) { | 
 |       _json["description"] = description; | 
 |     } | 
 |     if (subject != null) { | 
 |       _json["subject"] = subject; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Contains the quota information for a quota check response. | 
 | class QuotaInfo { | 
 |   /// Quota Metrics that have exceeded quota limits. | 
 |   /// For QuotaGroup-based quota, this is QuotaGroup.name | 
 |   /// For QuotaLimit-based quota, this is QuotaLimit.name | 
 |   /// See: google.api.Quota | 
 |   /// Deprecated: Use quota_metrics to get per quota group limit exceeded | 
 |   /// status. | 
 |   core.List<core.String> limitExceeded; | 
 |  | 
 |   /// Map of quota group name to the actual number of tokens consumed. If the | 
 |   /// quota check was not successful, then this will not be populated due to no | 
 |   /// quota consumption. | 
 |   /// | 
 |   /// We are not merging this field with 'quota_metrics' field because of the | 
 |   /// complexity of scaling in Chemist client code base. For simplicity, we will | 
 |   /// keep this field for Castor (that scales quota usage) and 'quota_metrics' | 
 |   /// for SuperQuota (that doesn't scale quota usage). | 
 |   core.Map<core.String, core.int> quotaConsumed; | 
 |  | 
 |   /// Quota metrics to indicate the usage. Depending on the check request, one | 
 |   /// or | 
 |   /// more of the following metrics will be included: | 
 |   /// | 
 |   /// 1. For rate quota, per quota group or per quota metric incremental usage | 
 |   /// will be specified using the following delta metric: | 
 |   ///   "serviceruntime.googleapis.com/api/consumer/quota_used_count" | 
 |   /// | 
 |   /// 2. For allocation quota, per quota metric total usage will be specified | 
 |   /// using the following gauge metric: | 
 |   ///   "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" | 
 |   /// | 
 |   /// 3. For both rate quota and allocation quota, the quota limit reached | 
 |   /// condition will be specified using the following boolean metric: | 
 |   ///   "serviceruntime.googleapis.com/quota/exceeded" | 
 |   core.List<MetricValueSet> quotaMetrics; | 
 |  | 
 |   QuotaInfo(); | 
 |  | 
 |   QuotaInfo.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("limitExceeded")) { | 
 |       limitExceeded = _json["limitExceeded"]; | 
 |     } | 
 |     if (_json.containsKey("quotaConsumed")) { | 
 |       quotaConsumed = _json["quotaConsumed"]; | 
 |     } | 
 |     if (_json.containsKey("quotaMetrics")) { | 
 |       quotaMetrics = _json["quotaMetrics"] | 
 |           .map<MetricValueSet>((value) => new MetricValueSet.fromJson(value)) | 
 |           .toList(); | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (limitExceeded != null) { | 
 |       _json["limitExceeded"] = limitExceeded; | 
 |     } | 
 |     if (quotaConsumed != null) { | 
 |       _json["quotaConsumed"] = quotaConsumed; | 
 |     } | 
 |     if (quotaMetrics != null) { | 
 |       _json["quotaMetrics"] = | 
 |           quotaMetrics.map((value) => (value).toJson()).toList(); | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Represents information regarding a quota operation. | 
 | class QuotaOperation { | 
 |   /// Identity of the consumer for whom this quota operation is being performed. | 
 |   /// | 
 |   /// This can be in one of the following formats: | 
 |   ///   project:<project_id>, | 
 |   ///   project_number:<project_number>, | 
 |   ///   api_key:<api_key>. | 
 |   core.String consumerId; | 
 |  | 
 |   /// Labels describing the operation. | 
 |   core.Map<core.String, core.String> labels; | 
 |  | 
 |   /// Fully qualified name of the API method for which this quota operation is | 
 |   /// requested. This name is used for matching quota rules or metric rules and | 
 |   /// billing status rules defined in service configuration. | 
 |   /// | 
 |   /// This field should not be set if any of the following is true: | 
 |   /// (1) the quota operation is performed on non-API resources. | 
 |   /// (2) quota_metrics is set because the caller is doing quota override. | 
 |   /// | 
 |   /// Example of an RPC method name: | 
 |   ///     google.example.library.v1.LibraryService.CreateShelf | 
 |   core.String methodName; | 
 |  | 
 |   /// Identity of the operation. This is expected to be unique within the scope | 
 |   /// of the service that generated the operation, and guarantees idempotency in | 
 |   /// case of retries. | 
 |   /// | 
 |   /// UUID version 4 is recommended, though not required. In scenarios where an | 
 |   /// operation is computed from existing information and an idempotent id is | 
 |   /// desirable for deduplication purpose, UUID version 5 is recommended. See | 
 |   /// RFC 4122 for details. | 
 |   core.String operationId; | 
 |  | 
 |   /// Represents information about this operation. Each MetricValueSet | 
 |   /// corresponds to a metric defined in the service configuration. | 
 |   /// The data type used in the MetricValueSet must agree with | 
 |   /// the data type specified in the metric definition. | 
 |   /// | 
 |   /// Within a single operation, it is not allowed to have more than one | 
 |   /// MetricValue instances that have the same metric names and identical | 
 |   /// label value combinations. If a request has such duplicated MetricValue | 
 |   /// instances, the entire request is rejected with | 
 |   /// an invalid argument error. | 
 |   /// | 
 |   /// This field is mutually exclusive with method_name. | 
 |   core.List<MetricValueSet> quotaMetrics; | 
 |  | 
 |   /// Quota mode for this operation. | 
 |   /// Possible string values are: | 
 |   /// - "UNSPECIFIED" : Guard against implicit default. Must not be used. | 
 |   /// - "NORMAL" : For AllocateQuota request, allocates quota for the amount | 
 |   /// specified in | 
 |   /// the service configuration or specified using the quota metrics. If the | 
 |   /// amount is higher than the available quota, allocation error will be | 
 |   /// returned and no quota will be allocated. | 
 |   /// - "BEST_EFFORT" : The operation allocates quota for the amount specified | 
 |   /// in the service | 
 |   /// configuration or specified using the quota metrics. If the amount is | 
 |   /// higher than the available quota, request does not fail but all available | 
 |   /// quota will be allocated. | 
 |   /// - "CHECK_ONLY" : For AllocateQuota request, only checks if there is enough | 
 |   /// quota | 
 |   /// available and does not change the available quota. No lock is placed on | 
 |   /// the available quota either. | 
 |   core.String quotaMode; | 
 |  | 
 |   QuotaOperation(); | 
 |  | 
 |   QuotaOperation.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("consumerId")) { | 
 |       consumerId = _json["consumerId"]; | 
 |     } | 
 |     if (_json.containsKey("labels")) { | 
 |       labels = _json["labels"]; | 
 |     } | 
 |     if (_json.containsKey("methodName")) { | 
 |       methodName = _json["methodName"]; | 
 |     } | 
 |     if (_json.containsKey("operationId")) { | 
 |       operationId = _json["operationId"]; | 
 |     } | 
 |     if (_json.containsKey("quotaMetrics")) { | 
 |       quotaMetrics = _json["quotaMetrics"] | 
 |           .map<MetricValueSet>((value) => new MetricValueSet.fromJson(value)) | 
 |           .toList(); | 
 |     } | 
 |     if (_json.containsKey("quotaMode")) { | 
 |       quotaMode = _json["quotaMode"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (consumerId != null) { | 
 |       _json["consumerId"] = consumerId; | 
 |     } | 
 |     if (labels != null) { | 
 |       _json["labels"] = labels; | 
 |     } | 
 |     if (methodName != null) { | 
 |       _json["methodName"] = methodName; | 
 |     } | 
 |     if (operationId != null) { | 
 |       _json["operationId"] = operationId; | 
 |     } | 
 |     if (quotaMetrics != null) { | 
 |       _json["quotaMetrics"] = | 
 |           quotaMetrics.map((value) => (value).toJson()).toList(); | 
 |     } | 
 |     if (quotaMode != null) { | 
 |       _json["quotaMode"] = quotaMode; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Represents the properties needed for quota operations. | 
 | class QuotaProperties { | 
 |   /// Quota mode for this operation. | 
 |   /// Possible string values are: | 
 |   /// - "ACQUIRE" : Decreases available quota by the cost specified for the | 
 |   /// operation. | 
 |   /// If cost is higher than available quota, operation fails and returns | 
 |   /// error. | 
 |   /// - "ACQUIRE_BEST_EFFORT" : Decreases available quota by the cost specified | 
 |   /// for the operation. | 
 |   /// If cost is higher than available quota, operation does not fail and | 
 |   /// available quota goes down to zero but it returns error. | 
 |   /// - "CHECK" : Does not change any available quota. Only checks if there is | 
 |   /// enough | 
 |   /// quota. | 
 |   /// No lock is placed on the checked tokens neither. | 
 |   /// - "RELEASE" : Increases available quota by the operation cost specified | 
 |   /// for the | 
 |   /// operation. | 
 |   core.String quotaMode; | 
 |  | 
 |   QuotaProperties(); | 
 |  | 
 |   QuotaProperties.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("quotaMode")) { | 
 |       quotaMode = _json["quotaMode"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (quotaMode != null) { | 
 |       _json["quotaMode"] = quotaMode; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Request message for the ReleaseQuota method. | 
 | class ReleaseQuotaRequest { | 
 |   /// Operation that describes the quota release. | 
 |   QuotaOperation releaseOperation; | 
 |  | 
 |   /// Specifies which version of service configuration should be used to process | 
 |   /// the request. If unspecified or no matching version can be found, the | 
 |   /// latest | 
 |   /// one will be used. | 
 |   core.String serviceConfigId; | 
 |  | 
 |   ReleaseQuotaRequest(); | 
 |  | 
 |   ReleaseQuotaRequest.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("releaseOperation")) { | 
 |       releaseOperation = new QuotaOperation.fromJson(_json["releaseOperation"]); | 
 |     } | 
 |     if (_json.containsKey("serviceConfigId")) { | 
 |       serviceConfigId = _json["serviceConfigId"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (releaseOperation != null) { | 
 |       _json["releaseOperation"] = (releaseOperation).toJson(); | 
 |     } | 
 |     if (serviceConfigId != null) { | 
 |       _json["serviceConfigId"] = serviceConfigId; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Response message for the ReleaseQuota method. | 
 | class ReleaseQuotaResponse { | 
 |   /// The same operation_id value used in the ReleaseQuotaRequest. Used for | 
 |   /// logging and diagnostics purposes. | 
 |   core.String operationId; | 
 |  | 
 |   /// Quota metrics to indicate the result of release. Depending on the | 
 |   /// request, one or more of the following metrics will be included: | 
 |   /// | 
 |   /// 1. For rate quota, per quota group or per quota metric released amount | 
 |   /// will be specified using the following delta metric: | 
 |   ///   "serviceruntime.googleapis.com/api/consumer/quota_refund_count" | 
 |   /// | 
 |   /// 2. For allocation quota, per quota metric total usage will be specified | 
 |   /// using the following gauge metric: | 
 |   ///   "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" | 
 |   /// | 
 |   /// 3. For allocation quota, value for each quota limit associated with | 
 |   /// the metrics will be specified using the following gauge metric: | 
 |   ///   "serviceruntime.googleapis.com/quota/limit" | 
 |   core.List<MetricValueSet> quotaMetrics; | 
 |  | 
 |   /// Indicates the decision of the release. | 
 |   core.List<QuotaError> releaseErrors; | 
 |  | 
 |   /// ID of the actual config used to process the request. | 
 |   core.String serviceConfigId; | 
 |  | 
 |   ReleaseQuotaResponse(); | 
 |  | 
 |   ReleaseQuotaResponse.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("operationId")) { | 
 |       operationId = _json["operationId"]; | 
 |     } | 
 |     if (_json.containsKey("quotaMetrics")) { | 
 |       quotaMetrics = _json["quotaMetrics"] | 
 |           .map<MetricValueSet>((value) => new MetricValueSet.fromJson(value)) | 
 |           .toList(); | 
 |     } | 
 |     if (_json.containsKey("releaseErrors")) { | 
 |       releaseErrors = _json["releaseErrors"] | 
 |           .map<QuotaError>((value) => new QuotaError.fromJson(value)) | 
 |           .toList(); | 
 |     } | 
 |     if (_json.containsKey("serviceConfigId")) { | 
 |       serviceConfigId = _json["serviceConfigId"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (operationId != null) { | 
 |       _json["operationId"] = operationId; | 
 |     } | 
 |     if (quotaMetrics != null) { | 
 |       _json["quotaMetrics"] = | 
 |           quotaMetrics.map((value) => (value).toJson()).toList(); | 
 |     } | 
 |     if (releaseErrors != null) { | 
 |       _json["releaseErrors"] = | 
 |           releaseErrors.map((value) => (value).toJson()).toList(); | 
 |     } | 
 |     if (serviceConfigId != null) { | 
 |       _json["serviceConfigId"] = serviceConfigId; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Represents the processing error of one Operation in the request. | 
 | class ReportError { | 
 |   /// The Operation.operation_id value from the request. | 
 |   core.String operationId; | 
 |  | 
 |   /// Details of the error when processing the Operation. | 
 |   Status status; | 
 |  | 
 |   ReportError(); | 
 |  | 
 |   ReportError.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("operationId")) { | 
 |       operationId = _json["operationId"]; | 
 |     } | 
 |     if (_json.containsKey("status")) { | 
 |       status = new Status.fromJson(_json["status"]); | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (operationId != null) { | 
 |       _json["operationId"] = operationId; | 
 |     } | 
 |     if (status != null) { | 
 |       _json["status"] = (status).toJson(); | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Contains additional info about the report operation. | 
 | class ReportInfo { | 
 |   /// The Operation.operation_id value from the request. | 
 |   core.String operationId; | 
 |  | 
 |   /// Quota usage info when processing the `Operation`. | 
 |   QuotaInfo quotaInfo; | 
 |  | 
 |   ReportInfo(); | 
 |  | 
 |   ReportInfo.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("operationId")) { | 
 |       operationId = _json["operationId"]; | 
 |     } | 
 |     if (_json.containsKey("quotaInfo")) { | 
 |       quotaInfo = new QuotaInfo.fromJson(_json["quotaInfo"]); | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (operationId != null) { | 
 |       _json["operationId"] = operationId; | 
 |     } | 
 |     if (quotaInfo != null) { | 
 |       _json["quotaInfo"] = (quotaInfo).toJson(); | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Request message for the Report method. | 
 | class ReportRequest { | 
 |   /// Operations to be reported. | 
 |   /// | 
 |   /// Typically the service should report one operation per request. | 
 |   /// Putting multiple operations into a single request is allowed, but should | 
 |   /// be used only when multiple operations are natually available at the time | 
 |   /// of the report. | 
 |   /// | 
 |   /// If multiple operations are in a single request, the total request size | 
 |   /// should be no larger than 1MB. See ReportResponse.report_errors for | 
 |   /// partial failure behavior. | 
 |   core.List<Operation> operations; | 
 |  | 
 |   /// Specifies which version of service config should be used to process the | 
 |   /// request. | 
 |   /// | 
 |   /// If unspecified or no matching version can be found, the | 
 |   /// latest one will be used. | 
 |   core.String serviceConfigId; | 
 |  | 
 |   ReportRequest(); | 
 |  | 
 |   ReportRequest.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("operations")) { | 
 |       operations = _json["operations"] | 
 |           .map<Operation>((value) => new Operation.fromJson(value)) | 
 |           .toList(); | 
 |     } | 
 |     if (_json.containsKey("serviceConfigId")) { | 
 |       serviceConfigId = _json["serviceConfigId"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (operations != null) { | 
 |       _json["operations"] = | 
 |           operations.map((value) => (value).toJson()).toList(); | 
 |     } | 
 |     if (serviceConfigId != null) { | 
 |       _json["serviceConfigId"] = serviceConfigId; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Response message for the Report method. | 
 | class ReportResponse { | 
 |   /// Partial failures, one for each `Operation` in the request that failed | 
 |   /// processing. There are three possible combinations of the RPC status: | 
 |   /// | 
 |   /// 1. The combination of a successful RPC status and an empty `report_errors` | 
 |   ///    list indicates a complete success where all `Operations` in the | 
 |   ///    request are processed successfully. | 
 |   /// 2. The combination of a successful RPC status and a non-empty | 
 |   ///    `report_errors` list indicates a partial success where some | 
 |   ///    `Operations` in the request succeeded. Each | 
 |   ///    `Operation` that failed processing has a corresponding item | 
 |   ///    in this list. | 
 |   /// 3. A failed RPC status indicates a general non-deterministic failure. | 
 |   ///    When this happens, it's impossible to know which of the | 
 |   ///    'Operations' in the request succeeded or failed. | 
 |   core.List<ReportError> reportErrors; | 
 |  | 
 |   /// Quota usage for each quota release `Operation` request. | 
 |   /// | 
 |   /// Fully or partially failed quota release request may or may not be present | 
 |   /// in `report_quota_info`. For example, a failed quota release request will | 
 |   /// have the current quota usage info when precise quota library returns the | 
 |   /// info. A deadline exceeded quota request will not have quota usage info. | 
 |   /// | 
 |   /// If there is no quota release request, report_quota_info will be empty. | 
 |   core.List<ReportInfo> reportInfos; | 
 |  | 
 |   /// The actual config id used to process the request. | 
 |   core.String serviceConfigId; | 
 |  | 
 |   ReportResponse(); | 
 |  | 
 |   ReportResponse.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("reportErrors")) { | 
 |       reportErrors = _json["reportErrors"] | 
 |           .map<ReportError>((value) => new ReportError.fromJson(value)) | 
 |           .toList(); | 
 |     } | 
 |     if (_json.containsKey("reportInfos")) { | 
 |       reportInfos = _json["reportInfos"] | 
 |           .map<ReportInfo>((value) => new ReportInfo.fromJson(value)) | 
 |           .toList(); | 
 |     } | 
 |     if (_json.containsKey("serviceConfigId")) { | 
 |       serviceConfigId = _json["serviceConfigId"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (reportErrors != null) { | 
 |       _json["reportErrors"] = | 
 |           reportErrors.map((value) => (value).toJson()).toList(); | 
 |     } | 
 |     if (reportInfos != null) { | 
 |       _json["reportInfos"] = | 
 |           reportInfos.map((value) => (value).toJson()).toList(); | 
 |     } | 
 |     if (serviceConfigId != null) { | 
 |       _json["serviceConfigId"] = serviceConfigId; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Metadata about the request. | 
 | class RequestMetadata { | 
 |   /// The IP address of the caller. | 
 |   /// For caller from internet, this will be public IPv4 or IPv6 address. | 
 |   /// For caller from a Compute Engine VM with external IP address, this | 
 |   /// will be the VM's external IP address. For caller from a Compute | 
 |   /// Engine VM without external IP address, if the VM is in the same | 
 |   /// organization (or project) as the accessed resource, `caller_ip` will | 
 |   /// be the VM's internal IPv4 address, otherwise the `caller_ip` will be | 
 |   /// redacted to "gce-internal-ip". | 
 |   /// See https://cloud.google.com/compute/docs/vpc/ for more information. | 
 |   core.String callerIp; | 
 |  | 
 |   /// The network of the caller. | 
 |   /// Set only if the network host project is part of the same GCP organization | 
 |   /// (or project) as the accessed resource. | 
 |   /// See https://cloud.google.com/compute/docs/vpc/ for more information. | 
 |   /// This is a scheme-less URI full resource name. For example: | 
 |   /// | 
 |   /// "//compute.googleapis.com/projects/PROJECT_ID/global/networks/NETWORK_ID" | 
 |   core.String callerNetwork; | 
 |  | 
 |   /// The user agent of the caller. | 
 |   /// This information is not authenticated and should be treated accordingly. | 
 |   /// For example: | 
 |   /// | 
 |   /// +   `google-api-python-client/1.4.0`: | 
 |   ///     The request was made by the Google API client for Python. | 
 |   /// +   `Cloud SDK Command Line Tool apitools-client/1.0 gcloud/0.9.62`: | 
 |   ///     The request was made by the Google Cloud SDK CLI (gcloud). | 
 |   /// +   `AppEngine-Google; (+http://code.google.com/appengine; appid: | 
 |   /// s~my-project`: | 
 |   ///     The request was made from the `my-project` App Engine app. | 
 |   /// NOLINT | 
 |   core.String callerSuppliedUserAgent; | 
 |  | 
 |   RequestMetadata(); | 
 |  | 
 |   RequestMetadata.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("callerIp")) { | 
 |       callerIp = _json["callerIp"]; | 
 |     } | 
 |     if (_json.containsKey("callerNetwork")) { | 
 |       callerNetwork = _json["callerNetwork"]; | 
 |     } | 
 |     if (_json.containsKey("callerSuppliedUserAgent")) { | 
 |       callerSuppliedUserAgent = _json["callerSuppliedUserAgent"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (callerIp != null) { | 
 |       _json["callerIp"] = callerIp; | 
 |     } | 
 |     if (callerNetwork != null) { | 
 |       _json["callerNetwork"] = callerNetwork; | 
 |     } | 
 |     if (callerSuppliedUserAgent != null) { | 
 |       _json["callerSuppliedUserAgent"] = callerSuppliedUserAgent; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Describes a resource associated with this operation. | 
 | class ResourceInfo { | 
 |   /// The identifier of the parent of this resource instance. | 
 |   /// Must be in one of the following formats: | 
 |   ///     - “projects/<project-id or project-number>” | 
 |   ///     - “folders/<folder-id>” | 
 |   ///     - “organizations/<organization-id>” | 
 |   core.String resourceContainer; | 
 |  | 
 |   /// Name of the resource. This is used for auditing purposes. | 
 |   core.String resourceName; | 
 |  | 
 |   ResourceInfo(); | 
 |  | 
 |   ResourceInfo.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("resourceContainer")) { | 
 |       resourceContainer = _json["resourceContainer"]; | 
 |     } | 
 |     if (_json.containsKey("resourceName")) { | 
 |       resourceName = _json["resourceName"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (resourceContainer != null) { | 
 |       _json["resourceContainer"] = resourceContainer; | 
 |     } | 
 |     if (resourceName != null) { | 
 |       _json["resourceName"] = resourceName; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Request message for QuotaController.StartReconciliation. | 
 | class StartReconciliationRequest { | 
 |   /// Operation that describes the quota reconciliation. | 
 |   QuotaOperation reconciliationOperation; | 
 |  | 
 |   /// Specifies which version of service configuration should be used to process | 
 |   /// the request. If unspecified or no matching version can be found, the | 
 |   /// latest | 
 |   /// one will be used. | 
 |   core.String serviceConfigId; | 
 |  | 
 |   StartReconciliationRequest(); | 
 |  | 
 |   StartReconciliationRequest.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("reconciliationOperation")) { | 
 |       reconciliationOperation = | 
 |           new QuotaOperation.fromJson(_json["reconciliationOperation"]); | 
 |     } | 
 |     if (_json.containsKey("serviceConfigId")) { | 
 |       serviceConfigId = _json["serviceConfigId"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (reconciliationOperation != null) { | 
 |       _json["reconciliationOperation"] = (reconciliationOperation).toJson(); | 
 |     } | 
 |     if (serviceConfigId != null) { | 
 |       _json["serviceConfigId"] = serviceConfigId; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// Response message for QuotaController.StartReconciliation. | 
 | class StartReconciliationResponse { | 
 |   /// The same operation_id value used in the StartReconciliationRequest. Used | 
 |   /// for logging and diagnostics purposes. | 
 |   core.String operationId; | 
 |  | 
 |   /// Metric values as tracked by One Platform before the start of | 
 |   /// reconciliation. The following metrics will be included: | 
 |   /// | 
 |   /// 1. Per quota metric total usage will be specified using the following | 
 |   /// gauge | 
 |   /// metric: | 
 |   ///   "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" | 
 |   /// | 
 |   /// 2. Value for each quota limit associated with the metrics will be | 
 |   /// specified | 
 |   /// using the following gauge metric: | 
 |   ///   "serviceruntime.googleapis.com/quota/limit" | 
 |   core.List<MetricValueSet> quotaMetrics; | 
 |  | 
 |   /// Indicates the decision of the reconciliation start. | 
 |   core.List<QuotaError> reconciliationErrors; | 
 |  | 
 |   /// ID of the actual config used to process the request. | 
 |   core.String serviceConfigId; | 
 |  | 
 |   StartReconciliationResponse(); | 
 |  | 
 |   StartReconciliationResponse.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("operationId")) { | 
 |       operationId = _json["operationId"]; | 
 |     } | 
 |     if (_json.containsKey("quotaMetrics")) { | 
 |       quotaMetrics = _json["quotaMetrics"] | 
 |           .map<MetricValueSet>((value) => new MetricValueSet.fromJson(value)) | 
 |           .toList(); | 
 |     } | 
 |     if (_json.containsKey("reconciliationErrors")) { | 
 |       reconciliationErrors = _json["reconciliationErrors"] | 
 |           .map<QuotaError>((value) => new QuotaError.fromJson(value)) | 
 |           .toList(); | 
 |     } | 
 |     if (_json.containsKey("serviceConfigId")) { | 
 |       serviceConfigId = _json["serviceConfigId"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (operationId != null) { | 
 |       _json["operationId"] = operationId; | 
 |     } | 
 |     if (quotaMetrics != null) { | 
 |       _json["quotaMetrics"] = | 
 |           quotaMetrics.map((value) => (value).toJson()).toList(); | 
 |     } | 
 |     if (reconciliationErrors != null) { | 
 |       _json["reconciliationErrors"] = | 
 |           reconciliationErrors.map((value) => (value).toJson()).toList(); | 
 |     } | 
 |     if (serviceConfigId != null) { | 
 |       _json["serviceConfigId"] = serviceConfigId; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } | 
 |  | 
 | /// The `Status` type defines a logical error model that is suitable for | 
 | /// different | 
 | /// programming environments, including REST APIs and RPC APIs. It is used by | 
 | /// [gRPC](https://github.com/grpc). The error model is designed to be: | 
 | /// | 
 | /// - Simple to use and understand for most users | 
 | /// - Flexible enough to meet unexpected needs | 
 | /// | 
 | /// # Overview | 
 | /// | 
 | /// The `Status` message contains three pieces of data: error code, error | 
 | /// message, | 
 | /// and error details. The error code should be an enum value of | 
 | /// google.rpc.Code, but it may accept additional error codes if needed.  The | 
 | /// error message should be a developer-facing English message that helps | 
 | /// developers *understand* and *resolve* the error. If a localized user-facing | 
 | /// error message is needed, put the localized message in the error details or | 
 | /// localize it in the client. The optional error details may contain arbitrary | 
 | /// information about the error. There is a predefined set of error detail types | 
 | /// in the package `google.rpc` that can be used for common error conditions. | 
 | /// | 
 | /// # Language mapping | 
 | /// | 
 | /// The `Status` message is the logical representation of the error model, but | 
 | /// it | 
 | /// is not necessarily the actual wire format. When the `Status` message is | 
 | /// exposed in different client libraries and different wire protocols, it can | 
 | /// be | 
 | /// mapped differently. For example, it will likely be mapped to some exceptions | 
 | /// in Java, but more likely mapped to some error codes in C. | 
 | /// | 
 | /// # Other uses | 
 | /// | 
 | /// The error model and the `Status` message can be used in a variety of | 
 | /// environments, either with or without APIs, to provide a | 
 | /// consistent developer experience across different environments. | 
 | /// | 
 | /// Example uses of this error model include: | 
 | /// | 
 | /// - Partial errors. If a service needs to return partial errors to the client, | 
 | /// it may embed the `Status` in the normal response to indicate the partial | 
 | ///     errors. | 
 | /// | 
 | /// - Workflow errors. A typical workflow has multiple steps. Each step may | 
 | ///     have a `Status` message for error reporting. | 
 | /// | 
 | /// - Batch operations. If a client uses batch request and batch response, the | 
 | ///     `Status` message should be used directly inside batch response, one for | 
 | ///     each error sub-response. | 
 | /// | 
 | /// - Asynchronous operations. If an API call embeds asynchronous operation | 
 | ///     results in its response, the status of those operations should be | 
 | ///     represented directly using the `Status` message. | 
 | /// | 
 | /// - Logging. If some API errors are stored in logs, the message `Status` could | 
 | /// be used directly after any stripping needed for security/privacy reasons. | 
 | class Status { | 
 |   /// The status code, which should be an enum value of google.rpc.Code. | 
 |   core.int code; | 
 |  | 
 |   /// A list of messages that carry the error details.  There is a common set of | 
 |   /// message types for APIs to use. | 
 |   /// | 
 |   /// The values for Object must be JSON objects. It can consist of `num`, | 
 |   /// `String`, `bool` and `null` as well as `Map` and `List` values. | 
 |   core.List<core.Map<core.String, core.Object>> details; | 
 |  | 
 |   /// A developer-facing error message, which should be in English. Any | 
 |   /// user-facing error message should be localized and sent in the | 
 |   /// google.rpc.Status.details field, or localized by the client. | 
 |   core.String message; | 
 |  | 
 |   Status(); | 
 |  | 
 |   Status.fromJson(core.Map _json) { | 
 |     if (_json.containsKey("code")) { | 
 |       code = _json["code"]; | 
 |     } | 
 |     if (_json.containsKey("details")) { | 
 |       details = _json["details"]; | 
 |     } | 
 |     if (_json.containsKey("message")) { | 
 |       message = _json["message"]; | 
 |     } | 
 |   } | 
 |  | 
 |   core.Map<core.String, core.Object> toJson() { | 
 |     final core.Map<core.String, core.Object> _json = | 
 |         new core.Map<core.String, core.Object>(); | 
 |     if (code != null) { | 
 |       _json["code"] = code; | 
 |     } | 
 |     if (details != null) { | 
 |       _json["details"] = details; | 
 |     } | 
 |     if (message != null) { | 
 |       _json["message"] = message; | 
 |     } | 
 |     return _json; | 
 |   } | 
 | } |