blob: bbffe225ecb6d4ae950f1d66844edc16f7f6d508 [file] [log] [blame]
// This is a generated file (see the discoveryapis_generator project).
// ignore_for_file: camel_case_types
// ignore_for_file: comment_references
// ignore_for_file: directives_ordering
// ignore_for_file: file_names
// ignore_for_file: library_names
// ignore_for_file: lines_longer_than_80_chars
// ignore_for_file: non_constant_identifier_names
// ignore_for_file: prefer_expression_function_bodies
// ignore_for_file: prefer_final_locals
// ignore_for_file: prefer_interpolation_to_compose_strings
// ignore_for_file: unnecessary_brace_in_string_interps
// ignore_for_file: unnecessary_cast
// ignore_for_file: unnecessary_lambdas
// ignore_for_file: unnecessary_parenthesis
// ignore_for_file: unnecessary_string_interpolations
library googleapis.firebaserules.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 userAgent = 'dart-api-client firebaserules/v1';
/// Creates and manages rules that determine when a Firebase Rules-enabled
/// service should permit a request.
class FirebaserulesApi {
/// View and manage your data across Google Cloud Platform services
static const cloudPlatformScope =
'https://www.googleapis.com/auth/cloud-platform';
/// View and administer all your Firebase data and settings
static const firebaseScope = 'https://www.googleapis.com/auth/firebase';
/// View all your Firebase data and settings
static const firebaseReadonlyScope =
'https://www.googleapis.com/auth/firebase.readonly';
final commons.ApiRequester _requester;
ProjectsResourceApi get projects => ProjectsResourceApi(_requester);
FirebaserulesApi(http.Client client,
{core.String rootUrl = 'https://firebaserules.googleapis.com/',
core.String servicePath = ''})
: _requester =
commons.ApiRequester(client, rootUrl, servicePath, userAgent);
}
class ProjectsResourceApi {
final commons.ApiRequester _requester;
ProjectsReleasesResourceApi get releases =>
ProjectsReleasesResourceApi(_requester);
ProjectsRulesetsResourceApi get rulesets =>
ProjectsRulesetsResourceApi(_requester);
ProjectsResourceApi(commons.ApiRequester client) : _requester = client;
/// Test `Source` for syntactic and semantic correctness. Issues present, if
/// any, will be returned to the caller with a description, severity, and
/// source location. The test method may be executed with `Source` or a
/// `Ruleset` name. Passing `Source` is useful for unit testing new rules.
/// Passing a `Ruleset` name is useful for regression testing an existing
/// rule. The following is an example of `Source` that permits users to upload
/// images to a bucket bearing their user id and matching the correct
/// metadata: _*Example*_ // Users are allowed to subscribe and unsubscribe to
/// the blog. service firebase.storage { match
/// /users/{userId}/images/{imageName} { allow write: if userId ==
/// request.auth.uid && (imageName.matches('*.png$') ||
/// imageName.matches('*.jpg$')) && resource.mimeType.matches('^image/') } }
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Tests may either provide `source` or a `Ruleset` resource name.
/// For tests against `source`, the resource name must refer to the project:
/// Format: `projects/{project_id}` For tests against a `Ruleset`, this must
/// be the `Ruleset` resource name: Format:
/// `projects/{project_id}/rulesets/{ruleset_id}`
/// Value must have pattern "^projects/.*$".
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [TestRulesetResponse].
///
/// 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<TestRulesetResponse> test(
TestRulesetRequest request,
core.String name, {
core.String $fields,
}) {
core.String _url;
final _queryParams = <core.String, core.List<core.String>>{};
commons.Media _uploadMedia;
commons.UploadOptions _uploadOptions;
var _downloadOptions = commons.DownloadOptions.Metadata;
core.String _body;
if (request != null) {
_body = convert.json.encode(request.toJson());
}
if (name == null) {
throw core.ArgumentError('Parameter name is required.');
}
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
_url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name') + ':test';
final _response = _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
uploadOptions: _uploadOptions,
uploadMedia: _uploadMedia,
downloadOptions: _downloadOptions,
);
return _response.then(
(data) => TestRulesetResponse.fromJson(
data as core.Map<core.String, core.dynamic>),
);
}
}
class ProjectsReleasesResourceApi {
final commons.ApiRequester _requester;
ProjectsReleasesResourceApi(commons.ApiRequester client)
: _requester = client;
/// Create a `Release`. Release names should reflect the developer's
/// deployment practices. For example, the release name may include the
/// environment name, application name, application version, or any other name
/// meaningful to the developer. Once a `Release` refers to a `Ruleset`, the
/// rules can be enforced by Firebase Rules-enabled services. More than one
/// `Release` may be 'live' concurrently. Consider the following three
/// `Release` names for `projects/foo` and the `Ruleset` to which they refer.
/// Release Name | Ruleset Name --------------------------------|-------------
/// projects/foo/releases/prod | projects/foo/rulesets/uuid123
/// projects/foo/releases/prod/beta | projects/foo/rulesets/uuid123
/// projects/foo/releases/prod/v23 | projects/foo/rulesets/uuid456 The table
/// reflects the `Ruleset` rollout in progress. The `prod` and `prod/beta`
/// releases refer to the same `Ruleset`. However, `prod/v23` refers to a new
/// `Ruleset`. The `Ruleset` reference for a `Release` may be updated using
/// the UpdateRelease method.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Resource name for the project which owns this `Release`. Format:
/// `projects/{project_id}`
/// Value must have pattern "^projects/[^/]+$".
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Release].
///
/// 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<Release> create(
Release request,
core.String name, {
core.String $fields,
}) {
core.String _url;
final _queryParams = <core.String, core.List<core.String>>{};
commons.Media _uploadMedia;
commons.UploadOptions _uploadOptions;
var _downloadOptions = commons.DownloadOptions.Metadata;
core.String _body;
if (request != null) {
_body = convert.json.encode(request.toJson());
}
if (name == null) {
throw core.ArgumentError('Parameter name is required.');
}
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
_url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name') + '/releases';
final _response = _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
uploadOptions: _uploadOptions,
uploadMedia: _uploadMedia,
downloadOptions: _downloadOptions,
);
return _response.then(
(data) => Release.fromJson(data as core.Map<core.String, core.dynamic>),
);
}
/// Delete a `Release` by resource name.
///
/// Request parameters:
///
/// [name] - Resource name for the `Release` to delete. Format:
/// `projects/{project_id}/releases/{release_id}`
/// Value must have pattern "^projects/[^/]+/releases/.*$".
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Empty].
///
/// 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<Empty> delete(
core.String name, {
core.String $fields,
}) {
core.String _url;
final _queryParams = <core.String, core.List<core.String>>{};
commons.Media _uploadMedia;
commons.UploadOptions _uploadOptions;
var _downloadOptions = commons.DownloadOptions.Metadata;
core.String _body;
if (name == null) {
throw core.ArgumentError('Parameter name is required.');
}
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
_url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
final _response = _requester.request(
_url,
'DELETE',
body: _body,
queryParams: _queryParams,
uploadOptions: _uploadOptions,
uploadMedia: _uploadMedia,
downloadOptions: _downloadOptions,
);
return _response.then(
(data) => Empty.fromJson(data as core.Map<core.String, core.dynamic>),
);
}
/// Get a `Release` by name.
///
/// Request parameters:
///
/// [name] - Resource name of the `Release`. Format:
/// `projects/{project_id}/releases/{release_id}`
/// Value must have pattern "^projects/[^/]+/releases/.*$".
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Release].
///
/// 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<Release> get(
core.String name, {
core.String $fields,
}) {
core.String _url;
final _queryParams = <core.String, core.List<core.String>>{};
commons.Media _uploadMedia;
commons.UploadOptions _uploadOptions;
var _downloadOptions = commons.DownloadOptions.Metadata;
core.String _body;
if (name == null) {
throw core.ArgumentError('Parameter name is required.');
}
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
_url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
final _response = _requester.request(
_url,
'GET',
body: _body,
queryParams: _queryParams,
uploadOptions: _uploadOptions,
uploadMedia: _uploadMedia,
downloadOptions: _downloadOptions,
);
return _response.then(
(data) => Release.fromJson(data as core.Map<core.String, core.dynamic>),
);
}
/// Get the `Release` executable to use when enforcing rules.
///
/// Request parameters:
///
/// [name] - Resource name of the `Release`. Format:
/// `projects/{project_id}/releases/{release_id}`
/// Value must have pattern "^projects/[^/]+/releases/.*$".
///
/// [executableVersion] - The requested runtime executable version. Defaults
/// to FIREBASE_RULES_EXECUTABLE_V1.
/// Possible string values are:
/// - "RELEASE_EXECUTABLE_VERSION_UNSPECIFIED" : Executable format
/// unspecified. Defaults to FIREBASE_RULES_EXECUTABLE_V1
/// - "FIREBASE_RULES_EXECUTABLE_V1" : Firebase Rules syntax 'rules2'
/// executable versions: Custom AST for use with Java clients.
/// - "FIREBASE_RULES_EXECUTABLE_V2" : CEL-based executable for use with C++
/// clients.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GetReleaseExecutableResponse].
///
/// 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<GetReleaseExecutableResponse> getExecutable(
core.String name, {
core.String executableVersion,
core.String $fields,
}) {
core.String _url;
final _queryParams = <core.String, core.List<core.String>>{};
commons.Media _uploadMedia;
commons.UploadOptions _uploadOptions;
var _downloadOptions = commons.DownloadOptions.Metadata;
core.String _body;
if (name == null) {
throw core.ArgumentError('Parameter name is required.');
}
if (executableVersion != null) {
_queryParams['executableVersion'] = [executableVersion];
}
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
_url = 'v1/' +
commons.Escaper.ecapeVariableReserved('$name') +
':getExecutable';
final _response = _requester.request(
_url,
'GET',
body: _body,
queryParams: _queryParams,
uploadOptions: _uploadOptions,
uploadMedia: _uploadMedia,
downloadOptions: _downloadOptions,
);
return _response.then(
(data) => GetReleaseExecutableResponse.fromJson(
data as core.Map<core.String, core.dynamic>),
);
}
/// List the `Release` values for a project. This list may optionally be
/// filtered by `Release` name, `Ruleset` name, `TestSuite` name, or any
/// combination thereof.
///
/// Request parameters:
///
/// [name] - Resource name for the project. Format: `projects/{project_id}`
/// Value must have pattern "^projects/[^/]+$".
///
/// [filter] - `Release` filter. The list method supports filters with
/// restrictions on the `Release.name`, `Release.ruleset_name`, and
/// `Release.test_suite_name`. Example 1: A filter of 'name=prod*' might
/// return `Release`s with names within 'projects/foo' prefixed with 'prod':
/// Name | Ruleset Name ------------------------------|-------------
/// projects/foo/releases/prod | projects/foo/rulesets/uuid1234
/// projects/foo/releases/prod/v1 | projects/foo/rulesets/uuid1234
/// projects/foo/releases/prod/v2 | projects/foo/rulesets/uuid8888 Example 2:
/// A filter of `name=prod* ruleset_name=uuid1234` would return only `Release`
/// instances for 'projects/foo' with names prefixed with 'prod' referring to
/// the same `Ruleset` name of 'uuid1234': Name | Ruleset Name
/// ------------------------------|------------- projects/foo/releases/prod |
/// projects/foo/rulesets/1234 projects/foo/releases/prod/v1 |
/// projects/foo/rulesets/1234 In the examples, the filter parameters refer to
/// the search filters are relative to the project. Fully qualified prefixed
/// may also be used. e.g. `test_suite_name=projects/foo/testsuites/uuid1`
///
/// [pageSize] - Page size to load. Maximum of 100. Defaults to 10. Note:
/// `page_size` is just a hint and the service may choose to load fewer than
/// `page_size` results due to the size of the output. To traverse all of the
/// releases, the caller should iterate until the `page_token` on the response
/// is empty.
///
/// [pageToken] - Next page token for the next batch of `Release` instances.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ListReleasesResponse].
///
/// 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<ListReleasesResponse> list(
core.String name, {
core.String filter,
core.int pageSize,
core.String pageToken,
core.String $fields,
}) {
core.String _url;
final _queryParams = <core.String, core.List<core.String>>{};
commons.Media _uploadMedia;
commons.UploadOptions _uploadOptions;
var _downloadOptions = commons.DownloadOptions.Metadata;
core.String _body;
if (name == null) {
throw core.ArgumentError('Parameter name is required.');
}
if (filter != null) {
_queryParams['filter'] = [filter];
}
if (pageSize != null) {
_queryParams['pageSize'] = ['${pageSize}'];
}
if (pageToken != null) {
_queryParams['pageToken'] = [pageToken];
}
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
_url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name') + '/releases';
final _response = _requester.request(
_url,
'GET',
body: _body,
queryParams: _queryParams,
uploadOptions: _uploadOptions,
uploadMedia: _uploadMedia,
downloadOptions: _downloadOptions,
);
return _response.then(
(data) => ListReleasesResponse.fromJson(
data as core.Map<core.String, core.dynamic>),
);
}
/// Update a `Release` via PATCH. Only updates to the `ruleset_name` and
/// `test_suite_name` fields will be honored. `Release` rename is not
/// supported. To create a `Release` use the CreateRelease method.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Resource name for the project which owns this `Release`. Format:
/// `projects/{project_id}`
/// Value must have pattern "^projects/[^/]+/releases/.*$".
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Release].
///
/// 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<Release> patch(
UpdateReleaseRequest request,
core.String name, {
core.String $fields,
}) {
core.String _url;
final _queryParams = <core.String, core.List<core.String>>{};
commons.Media _uploadMedia;
commons.UploadOptions _uploadOptions;
var _downloadOptions = commons.DownloadOptions.Metadata;
core.String _body;
if (request != null) {
_body = convert.json.encode(request.toJson());
}
if (name == null) {
throw core.ArgumentError('Parameter name is required.');
}
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
_url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
final _response = _requester.request(
_url,
'PATCH',
body: _body,
queryParams: _queryParams,
uploadOptions: _uploadOptions,
uploadMedia: _uploadMedia,
downloadOptions: _downloadOptions,
);
return _response.then(
(data) => Release.fromJson(data as core.Map<core.String, core.dynamic>),
);
}
}
class ProjectsRulesetsResourceApi {
final commons.ApiRequester _requester;
ProjectsRulesetsResourceApi(commons.ApiRequester client)
: _requester = client;
/// Create a `Ruleset` from `Source`. The `Ruleset` is given a unique
/// generated name which is returned to the caller. `Source` containing
/// syntactic or semantics errors will result in an error response indicating
/// the first error encountered. For a detailed view of `Source` issues, use
/// TestRuleset.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Resource name for Project which owns this `Ruleset`. Format:
/// `projects/{project_id}`
/// Value must have pattern "^projects/[^/]+$".
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Ruleset].
///
/// 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<Ruleset> create(
Ruleset request,
core.String name, {
core.String $fields,
}) {
core.String _url;
final _queryParams = <core.String, core.List<core.String>>{};
commons.Media _uploadMedia;
commons.UploadOptions _uploadOptions;
var _downloadOptions = commons.DownloadOptions.Metadata;
core.String _body;
if (request != null) {
_body = convert.json.encode(request.toJson());
}
if (name == null) {
throw core.ArgumentError('Parameter name is required.');
}
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
_url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name') + '/rulesets';
final _response = _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
uploadOptions: _uploadOptions,
uploadMedia: _uploadMedia,
downloadOptions: _downloadOptions,
);
return _response.then(
(data) => Ruleset.fromJson(data as core.Map<core.String, core.dynamic>),
);
}
/// Delete a `Ruleset` by resource name. If the `Ruleset` is referenced by a
/// `Release` the operation will fail.
///
/// Request parameters:
///
/// [name] - Resource name for the ruleset to delete. Format:
/// `projects/{project_id}/rulesets/{ruleset_id}`
/// Value must have pattern "^projects/[^/]+/rulesets/[^/]+$".
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Empty].
///
/// 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<Empty> delete(
core.String name, {
core.String $fields,
}) {
core.String _url;
final _queryParams = <core.String, core.List<core.String>>{};
commons.Media _uploadMedia;
commons.UploadOptions _uploadOptions;
var _downloadOptions = commons.DownloadOptions.Metadata;
core.String _body;
if (name == null) {
throw core.ArgumentError('Parameter name is required.');
}
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
_url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
final _response = _requester.request(
_url,
'DELETE',
body: _body,
queryParams: _queryParams,
uploadOptions: _uploadOptions,
uploadMedia: _uploadMedia,
downloadOptions: _downloadOptions,
);
return _response.then(
(data) => Empty.fromJson(data as core.Map<core.String, core.dynamic>),
);
}
/// Get a `Ruleset` by name including the full `Source` contents.
///
/// Request parameters:
///
/// [name] - Resource name for the ruleset to get. Format:
/// `projects/{project_id}/rulesets/{ruleset_id}`
/// Value must have pattern "^projects/[^/]+/rulesets/[^/]+$".
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Ruleset].
///
/// 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<Ruleset> get(
core.String name, {
core.String $fields,
}) {
core.String _url;
final _queryParams = <core.String, core.List<core.String>>{};
commons.Media _uploadMedia;
commons.UploadOptions _uploadOptions;
var _downloadOptions = commons.DownloadOptions.Metadata;
core.String _body;
if (name == null) {
throw core.ArgumentError('Parameter name is required.');
}
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
_url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
final _response = _requester.request(
_url,
'GET',
body: _body,
queryParams: _queryParams,
uploadOptions: _uploadOptions,
uploadMedia: _uploadMedia,
downloadOptions: _downloadOptions,
);
return _response.then(
(data) => Ruleset.fromJson(data as core.Map<core.String, core.dynamic>),
);
}
/// List `Ruleset` metadata only and optionally filter the results by
/// `Ruleset` name. The full `Source` contents of a `Ruleset` may be retrieved
/// with GetRuleset.
///
/// Request parameters:
///
/// [name] - Resource name for the project. Format: `projects/{project_id}`
/// Value must have pattern "^projects/[^/]+$".
///
/// [filter] - `Ruleset` filter. The list method supports filters with
/// restrictions on `Ruleset.name`. Filters on `Ruleset.create_time` should
/// use the `date` function which parses strings that conform to the RFC 3339
/// date/time specifications. Example: `create_time >
/// date("2017-01-01T00:00:00Z") AND name=UUID-*`
///
/// [pageSize] - Page size to load. Maximum of 100. Defaults to 10. Note:
/// `page_size` is just a hint and the service may choose to load less than
/// `page_size` due to the size of the output. To traverse all of the
/// releases, caller should iterate until the `page_token` is empty.
///
/// [pageToken] - Next page token for loading the next batch of `Ruleset`
/// instances.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ListRulesetsResponse].
///
/// 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<ListRulesetsResponse> list(
core.String name, {
core.String filter,
core.int pageSize,
core.String pageToken,
core.String $fields,
}) {
core.String _url;
final _queryParams = <core.String, core.List<core.String>>{};
commons.Media _uploadMedia;
commons.UploadOptions _uploadOptions;
var _downloadOptions = commons.DownloadOptions.Metadata;
core.String _body;
if (name == null) {
throw core.ArgumentError('Parameter name is required.');
}
if (filter != null) {
_queryParams['filter'] = [filter];
}
if (pageSize != null) {
_queryParams['pageSize'] = ['${pageSize}'];
}
if (pageToken != null) {
_queryParams['pageToken'] = [pageToken];
}
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
_url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name') + '/rulesets';
final _response = _requester.request(
_url,
'GET',
body: _body,
queryParams: _queryParams,
uploadOptions: _uploadOptions,
uploadMedia: _uploadMedia,
downloadOptions: _downloadOptions,
);
return _response.then(
(data) => ListRulesetsResponse.fromJson(
data as core.Map<core.String, core.dynamic>),
);
}
}
/// Arg matchers for the mock function.
class Arg {
/// Argument matches any value provided.
Empty anyValue;
/// Argument exactly matches value provided.
///
/// 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.Object exactValue;
Arg();
Arg.fromJson(core.Map _json) {
if (_json.containsKey('anyValue')) {
anyValue = Empty.fromJson(
_json['anyValue'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('exactValue')) {
exactValue = _json['exactValue'] as core.Object;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (anyValue != null) {
_json['anyValue'] = anyValue.toJson();
}
if (exactValue != null) {
_json['exactValue'] = exactValue;
}
return _json;
}
}
/// A generic empty message that you can re-use to avoid defining duplicated
/// empty messages in your APIs. A typical example is to use it as the request
/// or the response type of an API method. For instance: service Foo { rpc
/// Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON
/// representation for `Empty` is empty JSON object `{}`.
class Empty {
Empty();
Empty.fromJson(
// ignore: avoid_unused_constructor_parameters
core.Map _json);
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
return _json;
}
}
/// Describes where in a file an expression is found and what it was evaluated
/// to over the course of its use.
class ExpressionReport {
/// Subexpressions
core.List<ExpressionReport> children;
/// Position of expression in original rules source.
SourcePosition sourcePosition;
/// Values that this expression evaluated to when encountered.
core.List<ValueCount> values;
ExpressionReport();
ExpressionReport.fromJson(core.Map _json) {
if (_json.containsKey('children')) {
children = (_json['children'] as core.List)
.map<ExpressionReport>((value) => ExpressionReport.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('sourcePosition')) {
sourcePosition = SourcePosition.fromJson(
_json['sourcePosition'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('values')) {
values = (_json['values'] as core.List)
.map<ValueCount>((value) =>
ValueCount.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (children != null) {
_json['children'] = children.map((value) => value.toJson()).toList();
}
if (sourcePosition != null) {
_json['sourcePosition'] = sourcePosition.toJson();
}
if (values != null) {
_json['values'] = values.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// `File` containing source content.
class File {
/// Textual Content.
core.String content;
/// Fingerprint (e.g. github sha) associated with the `File`.
core.String fingerprint;
core.List<core.int> get fingerprintAsBytes =>
convert.base64.decode(fingerprint);
set fingerprintAsBytes(core.List<core.int> _bytes) {
fingerprint =
convert.base64.encode(_bytes).replaceAll('/', '_').replaceAll('+', '-');
}
/// File name.
core.String name;
File();
File.fromJson(core.Map _json) {
if (_json.containsKey('content')) {
content = _json['content'] as core.String;
}
if (_json.containsKey('fingerprint')) {
fingerprint = _json['fingerprint'] as core.String;
}
if (_json.containsKey('name')) {
name = _json['name'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (content != null) {
_json['content'] = content;
}
if (fingerprint != null) {
_json['fingerprint'] = fingerprint;
}
if (name != null) {
_json['name'] = name;
}
return _json;
}
}
/// Represents a service-defined function call that was invoked during test
/// execution.
class FunctionCall {
/// The arguments that were provided to the function.
///
/// 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.Object> args;
/// Name of the function invoked.
core.String function;
FunctionCall();
FunctionCall.fromJson(core.Map _json) {
if (_json.containsKey('args')) {
args = (_json['args'] as core.List)
.map<core.Object>((value) => value as core.Object)
.toList();
}
if (_json.containsKey('function')) {
function = _json['function'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (args != null) {
_json['args'] = args;
}
if (function != null) {
_json['function'] = function;
}
return _json;
}
}
/// Mock function definition. Mocks must refer to a function declared by the
/// target service. The type of the function args and result will be inferred at
/// test time. If either the arg or result values are not compatible with
/// function type declaration, the request will be considered invalid. More than
/// one `FunctionMock` may be provided for a given function name so long as the
/// `Arg` matchers are distinct. There may be only one function for a given
/// overload where all `Arg` values are `Arg.any_value`.
class FunctionMock {
/// The list of `Arg` values to match. The order in which the arguments are
/// provided is the order in which they must appear in the function
/// invocation.
core.List<Arg> args;
/// The name of the function. The function name must match one provided by a
/// service declaration.
core.String function;
/// The mock result of the function call.
Result result;
FunctionMock();
FunctionMock.fromJson(core.Map _json) {
if (_json.containsKey('args')) {
args = (_json['args'] as core.List)
.map<Arg>((value) =>
Arg.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('function')) {
function = _json['function'] as core.String;
}
if (_json.containsKey('result')) {
result = Result.fromJson(
_json['result'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (args != null) {
_json['args'] = args.map((value) => value.toJson()).toList();
}
if (function != null) {
_json['function'] = function;
}
if (result != null) {
_json['result'] = result.toJson();
}
return _json;
}
}
/// The response for FirebaseRulesService.GetReleaseExecutable
class GetReleaseExecutableResponse {
/// Executable view of the `Ruleset` referenced by the `Release`.
core.String executable;
core.List<core.int> get executableAsBytes =>
convert.base64.decode(executable);
set executableAsBytes(core.List<core.int> _bytes) {
executable =
convert.base64.encode(_bytes).replaceAll('/', '_').replaceAll('+', '-');
}
/// The Rules runtime version of the executable.
/// Possible string values are:
/// - "RELEASE_EXECUTABLE_VERSION_UNSPECIFIED" : Executable format
/// unspecified. Defaults to FIREBASE_RULES_EXECUTABLE_V1
/// - "FIREBASE_RULES_EXECUTABLE_V1" : Firebase Rules syntax 'rules2'
/// executable versions: Custom AST for use with Java clients.
/// - "FIREBASE_RULES_EXECUTABLE_V2" : CEL-based executable for use with C++
/// clients.
core.String executableVersion;
/// `Language` used to generate the executable bytes.
/// Possible string values are:
/// - "LANGUAGE_UNSPECIFIED" : Language unspecified. Defaults to
/// FIREBASE_RULES.
/// - "FIREBASE_RULES" : Firebase Rules language.
/// - "EVENT_FLOW_TRIGGERS" : Event Flow triggers.
core.String language;
/// `Ruleset` name associated with the `Release` executable.
core.String rulesetName;
/// Optional, indicates the freshness of the result. The response is
/// guaranteed to be the latest within an interval up to the sync_time
/// (inclusive).
core.String syncTime;
/// Timestamp for the most recent `Release.update_time`.
core.String updateTime;
GetReleaseExecutableResponse();
GetReleaseExecutableResponse.fromJson(core.Map _json) {
if (_json.containsKey('executable')) {
executable = _json['executable'] as core.String;
}
if (_json.containsKey('executableVersion')) {
executableVersion = _json['executableVersion'] as core.String;
}
if (_json.containsKey('language')) {
language = _json['language'] as core.String;
}
if (_json.containsKey('rulesetName')) {
rulesetName = _json['rulesetName'] as core.String;
}
if (_json.containsKey('syncTime')) {
syncTime = _json['syncTime'] as core.String;
}
if (_json.containsKey('updateTime')) {
updateTime = _json['updateTime'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (executable != null) {
_json['executable'] = executable;
}
if (executableVersion != null) {
_json['executableVersion'] = executableVersion;
}
if (language != null) {
_json['language'] = language;
}
if (rulesetName != null) {
_json['rulesetName'] = rulesetName;
}
if (syncTime != null) {
_json['syncTime'] = syncTime;
}
if (updateTime != null) {
_json['updateTime'] = updateTime;
}
return _json;
}
}
/// Issues include warnings, errors, and deprecation notices.
class Issue {
/// Short error description.
core.String description;
/// The severity of the issue.
/// Possible string values are:
/// - "SEVERITY_UNSPECIFIED" : An unspecified severity.
/// - "DEPRECATION" : Deprecation issue for statements and method that may no
/// longer be supported or maintained.
/// - "WARNING" : Warnings such as: unused variables.
/// - "ERROR" : Errors such as: unmatched curly braces or variable
/// redefinition.
core.String severity;
/// Position of the issue in the `Source`.
SourcePosition sourcePosition;
Issue();
Issue.fromJson(core.Map _json) {
if (_json.containsKey('description')) {
description = _json['description'] as core.String;
}
if (_json.containsKey('severity')) {
severity = _json['severity'] as core.String;
}
if (_json.containsKey('sourcePosition')) {
sourcePosition = SourcePosition.fromJson(
_json['sourcePosition'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (description != null) {
_json['description'] = description;
}
if (severity != null) {
_json['severity'] = severity;
}
if (sourcePosition != null) {
_json['sourcePosition'] = sourcePosition.toJson();
}
return _json;
}
}
/// The response for FirebaseRulesService.ListReleases.
class ListReleasesResponse {
/// The pagination token to retrieve the next page of results. If the value is
/// empty, no further results remain.
core.String nextPageToken;
/// List of `Release` instances.
core.List<Release> releases;
ListReleasesResponse();
ListReleasesResponse.fromJson(core.Map _json) {
if (_json.containsKey('nextPageToken')) {
nextPageToken = _json['nextPageToken'] as core.String;
}
if (_json.containsKey('releases')) {
releases = (_json['releases'] as core.List)
.map<Release>((value) =>
Release.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (nextPageToken != null) {
_json['nextPageToken'] = nextPageToken;
}
if (releases != null) {
_json['releases'] = releases.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// The response for FirebaseRulesService.ListRulesets.
class ListRulesetsResponse {
/// The pagination token to retrieve the next page of results. If the value is
/// empty, no further results remain.
core.String nextPageToken;
/// List of `Ruleset` instances.
core.List<Ruleset> rulesets;
ListRulesetsResponse();
ListRulesetsResponse.fromJson(core.Map _json) {
if (_json.containsKey('nextPageToken')) {
nextPageToken = _json['nextPageToken'] as core.String;
}
if (_json.containsKey('rulesets')) {
rulesets = (_json['rulesets'] as core.List)
.map<Ruleset>((value) =>
Ruleset.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (nextPageToken != null) {
_json['nextPageToken'] = nextPageToken;
}
if (rulesets != null) {
_json['rulesets'] = rulesets.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// Metadata for a Ruleset.
class Metadata {
/// Services that this ruleset has declarations for (e.g., "cloud.firestore").
/// There may be 0+ of these.
core.List<core.String> services;
Metadata();
Metadata.fromJson(core.Map _json) {
if (_json.containsKey('services')) {
services = (_json['services'] as core.List)
.map<core.String>((value) => value as core.String)
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (services != null) {
_json['services'] = services;
}
return _json;
}
}
/// `Release` is a named reference to a `Ruleset`. Once a `Release` refers to a
/// `Ruleset`, rules-enabled services will be able to enforce the `Ruleset`.
class Release {
/// Time the release was created. Output only.
core.String createTime;
/// Resource name for the `Release`. `Release` names may be structured
/// `app1/prod/v2` or flat `app1_prod_v2` which affords developers a great
/// deal of flexibility in mapping the name to the style that best fits their
/// existing development practices. For example, a name could refer to an
/// environment, an app, a version, or some combination of three. In the table
/// below, for the project name `projects/foo`, the following relative release
/// paths show how flat and structured names might be chosen to match a
/// desired development / deployment strategy. Use Case | Flat Name |
/// Structured Name -------------|---------------------|----------------
/// Environments | releases/qa | releases/qa Apps | releases/app1_qa |
/// releases/app1/qa Versions | releases/app1_v2_qa | releases/app1/v2/qa The
/// delimiter between the release name path elements can be almost anything
/// and it should work equally well with the release name list filter, but in
/// many ways the structured paths provide a clearer picture of the
/// relationship between `Release` instances. Format:
/// `projects/{project_id}/releases/{release_id}`
core.String name;
/// Name of the `Ruleset` referred to by this `Release`. The `Ruleset` must
/// exist the `Release` to be created.
core.String rulesetName;
/// Time the release was updated. Output only.
core.String updateTime;
Release();
Release.fromJson(core.Map _json) {
if (_json.containsKey('createTime')) {
createTime = _json['createTime'] as core.String;
}
if (_json.containsKey('name')) {
name = _json['name'] as core.String;
}
if (_json.containsKey('rulesetName')) {
rulesetName = _json['rulesetName'] as core.String;
}
if (_json.containsKey('updateTime')) {
updateTime = _json['updateTime'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (createTime != null) {
_json['createTime'] = createTime;
}
if (name != null) {
_json['name'] = name;
}
if (rulesetName != null) {
_json['rulesetName'] = rulesetName;
}
if (updateTime != null) {
_json['updateTime'] = updateTime;
}
return _json;
}
}
/// Possible result values from the function mock invocation.
class Result {
/// The result is undefined, meaning the result could not be computed.
Empty undefined;
/// The result is an actual value. The type of the value must match that of
/// the type declared by the service.
///
/// 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.Object value;
Result();
Result.fromJson(core.Map _json) {
if (_json.containsKey('undefined')) {
undefined = Empty.fromJson(
_json['undefined'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('value')) {
value = _json['value'] as core.Object;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (undefined != null) {
_json['undefined'] = undefined.toJson();
}
if (value != null) {
_json['value'] = value;
}
return _json;
}
}
/// `Ruleset` is an immutable copy of `Source` with a globally unique identifier
/// and a creation time.
class Ruleset {
/// Time the `Ruleset` was created. Output only.
core.String createTime;
/// The metadata for this ruleset. Output only.
Metadata metadata;
/// Name of the `Ruleset`. The ruleset_id is auto generated by the service.
/// Format: `projects/{project_id}/rulesets/{ruleset_id}` Output only.
core.String name;
/// `Source` for the `Ruleset`.
Source source;
Ruleset();
Ruleset.fromJson(core.Map _json) {
if (_json.containsKey('createTime')) {
createTime = _json['createTime'] as core.String;
}
if (_json.containsKey('metadata')) {
metadata = Metadata.fromJson(
_json['metadata'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('name')) {
name = _json['name'] as core.String;
}
if (_json.containsKey('source')) {
source = Source.fromJson(
_json['source'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (createTime != null) {
_json['createTime'] = createTime;
}
if (metadata != null) {
_json['metadata'] = metadata.toJson();
}
if (name != null) {
_json['name'] = name;
}
if (source != null) {
_json['source'] = source.toJson();
}
return _json;
}
}
/// `Source` is one or more `File` messages comprising a logical set of rules.
class Source {
/// `File` set constituting the `Source` bundle.
core.List<File> files;
Source();
Source.fromJson(core.Map _json) {
if (_json.containsKey('files')) {
files = (_json['files'] as core.List)
.map<File>((value) =>
File.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (files != null) {
_json['files'] = files.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// Position in the `Source` content including its line, column number, and an
/// index of the `File` in the `Source` message. Used for debug purposes.
class SourcePosition {
/// First column on the source line associated with the source fragment.
core.int column;
/// Start position relative to the beginning of the file.
core.int currentOffset;
/// End position relative to the beginning of the file.
core.int endOffset;
/// Name of the `File`.
core.String fileName;
/// Line number of the source fragment. 1-based.
core.int line;
SourcePosition();
SourcePosition.fromJson(core.Map _json) {
if (_json.containsKey('column')) {
column = _json['column'] as core.int;
}
if (_json.containsKey('currentOffset')) {
currentOffset = _json['currentOffset'] as core.int;
}
if (_json.containsKey('endOffset')) {
endOffset = _json['endOffset'] as core.int;
}
if (_json.containsKey('fileName')) {
fileName = _json['fileName'] as core.String;
}
if (_json.containsKey('line')) {
line = _json['line'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (column != null) {
_json['column'] = column;
}
if (currentOffset != null) {
_json['currentOffset'] = currentOffset;
}
if (endOffset != null) {
_json['endOffset'] = endOffset;
}
if (fileName != null) {
_json['fileName'] = fileName;
}
if (line != null) {
_json['line'] = line;
}
return _json;
}
}
/// `TestCase` messages provide the request context and an expectation as to
/// whether the given context will be allowed or denied. Test cases may specify
/// the `request`, `resource`, and `function_mocks` to mock a function call to a
/// service-provided function. The `request` object represents context present
/// at request-time. The `resource` is the value of the target resource as it
/// appears in persistent storage before the request is executed.
class TestCase {
/// Test expectation.
/// Possible string values are:
/// - "EXPECTATION_UNSPECIFIED" : Unspecified expectation.
/// - "ALLOW" : Expect an allowed result.
/// - "DENY" : Expect a denied result.
core.String expectation;
/// Specifies what should be included in the response.
/// Possible string values are:
/// - "LEVEL_UNSPECIFIED" : No level has been specified. Defaults to "NONE"
/// behavior.
/// - "NONE" : Do not include any additional information.
/// - "FULL" : Include detailed reporting on expressions evaluated.
/// - "VISITED" : Only include the expressions that were visited during
/// evaluation.
core.String expressionReportLevel;
/// Optional function mocks for service-defined functions. If not set, any
/// service defined function is expected to return an error, which may or may
/// not influence the test outcome.
core.List<FunctionMock> functionMocks;
/// Specifies whether paths (such as request.path) are encoded and how.
/// Possible string values are:
/// - "ENCODING_UNSPECIFIED" : No encoding has been specified. Defaults to
/// "URL_ENCODED" behavior.
/// - "URL_ENCODED" : Treats path segments as URL encoded but with non-encoded
/// separators ("/"). This is the default behavior.
/// - "PLAIN" : Treats total path as non-URL encoded e.g. raw.
core.String pathEncoding;
/// Request context. The exact format of the request context is
/// service-dependent. See the appropriate service documentation for
/// information about the supported fields and types on the request.
/// Minimally, all services support the following fields and types: Request
/// field | Type ---------------|----------------- auth.uid | `string`
/// auth.token | `map` headers | `map` method | `string` params | `map` path |
/// `string` time | `google.protobuf.Timestamp` If the request value is not
/// well-formed for the service, the request will be rejected as an invalid
/// argument.
///
/// 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.Object request;
/// Optional resource value as it appears in persistent storage before the
/// request is fulfilled. The resource type depends on the `request.path`
/// value.
///
/// 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.Object resource;
TestCase();
TestCase.fromJson(core.Map _json) {
if (_json.containsKey('expectation')) {
expectation = _json['expectation'] as core.String;
}
if (_json.containsKey('expressionReportLevel')) {
expressionReportLevel = _json['expressionReportLevel'] as core.String;
}
if (_json.containsKey('functionMocks')) {
functionMocks = (_json['functionMocks'] as core.List)
.map<FunctionMock>((value) => FunctionMock.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('pathEncoding')) {
pathEncoding = _json['pathEncoding'] as core.String;
}
if (_json.containsKey('request')) {
request = _json['request'] as core.Object;
}
if (_json.containsKey('resource')) {
resource = _json['resource'] as core.Object;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (expectation != null) {
_json['expectation'] = expectation;
}
if (expressionReportLevel != null) {
_json['expressionReportLevel'] = expressionReportLevel;
}
if (functionMocks != null) {
_json['functionMocks'] =
functionMocks.map((value) => value.toJson()).toList();
}
if (pathEncoding != null) {
_json['pathEncoding'] = pathEncoding;
}
if (request != null) {
_json['request'] = request;
}
if (resource != null) {
_json['resource'] = resource;
}
return _json;
}
}
/// Test result message containing the state of the test as well as a
/// description and source position for test failures.
class TestResult {
/// Debug messages related to test execution issues encountered during
/// evaluation. Debug messages may be related to too many or too few
/// invocations of function mocks or to runtime errors that occur during
/// evaluation. For example: ```Unable to read variable [name: "resource"]```
core.List<core.String> debugMessages;
/// Position in the `Source` or `Ruleset` where the principle runtime error
/// occurs. Evaluation of an expression may result in an error. Rules are deny
/// by default, so a `DENY` expectation when an error is generated is valid.
/// When there is a `DENY` with an error, the `SourcePosition` is returned.
/// E.g. `error_position { line: 19 column: 37 }`
SourcePosition errorPosition;
/// The mapping from expression in the ruleset AST to the values they were
/// evaluated to. Partially-nested to mirror AST structure. Note that this
/// field is actually tracking expressions and not permission statements in
/// contrast to the "visited_expressions" field above. Literal expressions are
/// omitted.
core.List<ExpressionReport> expressionReports;
/// The set of function calls made to service-defined methods. Function calls
/// are included in the order in which they are encountered during evaluation,
/// are provided for both mocked and unmocked functions, and included on the
/// response regardless of the test `state`.
core.List<FunctionCall> functionCalls;
/// State of the test.
/// Possible string values are:
/// - "STATE_UNSPECIFIED" : Test state is not set.
/// - "SUCCESS" : Test is a success.
/// - "FAILURE" : Test is a failure.
core.String state;
/// The set of visited permission expressions for a given test. This returns
/// the positions and evaluation results of all visited permission expressions
/// which were relevant to the test case, e.g. ``` match /path { allow read
/// if: } ``` For a detailed report of the intermediate evaluation states, see
/// the `expression_reports` field
core.List<VisitedExpression> visitedExpressions;
TestResult();
TestResult.fromJson(core.Map _json) {
if (_json.containsKey('debugMessages')) {
debugMessages = (_json['debugMessages'] as core.List)
.map<core.String>((value) => value as core.String)
.toList();
}
if (_json.containsKey('errorPosition')) {
errorPosition = SourcePosition.fromJson(
_json['errorPosition'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('expressionReports')) {
expressionReports = (_json['expressionReports'] as core.List)
.map<ExpressionReport>((value) => ExpressionReport.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('functionCalls')) {
functionCalls = (_json['functionCalls'] as core.List)
.map<FunctionCall>((value) => FunctionCall.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('state')) {
state = _json['state'] as core.String;
}
if (_json.containsKey('visitedExpressions')) {
visitedExpressions = (_json['visitedExpressions'] as core.List)
.map<VisitedExpression>((value) => VisitedExpression.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (debugMessages != null) {
_json['debugMessages'] = debugMessages;
}
if (errorPosition != null) {
_json['errorPosition'] = errorPosition.toJson();
}
if (expressionReports != null) {
_json['expressionReports'] =
expressionReports.map((value) => value.toJson()).toList();
}
if (functionCalls != null) {
_json['functionCalls'] =
functionCalls.map((value) => value.toJson()).toList();
}
if (state != null) {
_json['state'] = state;
}
if (visitedExpressions != null) {
_json['visitedExpressions'] =
visitedExpressions.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// The request for FirebaseRulesService.TestRuleset.
class TestRulesetRequest {
/// Optional `Source` to be checked for correctness. This field must not be
/// set when the resource name refers to a `Ruleset`.
Source source;
/// Inline `TestSuite` to run.
TestSuite testSuite;
TestRulesetRequest();
TestRulesetRequest.fromJson(core.Map _json) {
if (_json.containsKey('source')) {
source = Source.fromJson(
_json['source'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('testSuite')) {
testSuite = TestSuite.fromJson(
_json['testSuite'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (source != null) {
_json['source'] = source.toJson();
}
if (testSuite != null) {
_json['testSuite'] = testSuite.toJson();
}
return _json;
}
}
/// The response for FirebaseRulesService.TestRuleset.
class TestRulesetResponse {
/// Syntactic and semantic `Source` issues of varying severity. Issues of
/// `ERROR` severity will prevent tests from executing.
core.List<Issue> issues;
/// The set of test results given the test cases in the `TestSuite`. The
/// results will appear in the same order as the test cases appear in the
/// `TestSuite`.
core.List<TestResult> testResults;
TestRulesetResponse();
TestRulesetResponse.fromJson(core.Map _json) {
if (_json.containsKey('issues')) {
issues = (_json['issues'] as core.List)
.map<Issue>((value) =>
Issue.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('testResults')) {
testResults = (_json['testResults'] as core.List)
.map<TestResult>((value) =>
TestResult.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (issues != null) {
_json['issues'] = issues.map((value) => value.toJson()).toList();
}
if (testResults != null) {
_json['testResults'] =
testResults.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// `TestSuite` is a collection of `TestCase` instances that validate the
/// logical correctness of a `Ruleset`. The `TestSuite` may be referenced
/// in-line within a `TestRuleset` invocation or as part of a `Release` object
/// as a pre-release check.
class TestSuite {
/// Collection of test cases associated with the `TestSuite`.
core.List<TestCase> testCases;
TestSuite();
TestSuite.fromJson(core.Map _json) {
if (_json.containsKey('testCases')) {
testCases = (_json['testCases'] as core.List)
.map<TestCase>((value) =>
TestCase.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (testCases != null) {
_json['testCases'] = testCases.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// The request for FirebaseRulesService.UpdateReleasePatch.
class UpdateReleaseRequest {
/// `Release` to update.
Release release;
/// Specifies which fields to update.
core.String updateMask;
UpdateReleaseRequest();
UpdateReleaseRequest.fromJson(core.Map _json) {
if (_json.containsKey('release')) {
release = Release.fromJson(
_json['release'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateMask')) {
updateMask = _json['updateMask'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (release != null) {
_json['release'] = release.toJson();
}
if (updateMask != null) {
_json['updateMask'] = updateMask;
}
return _json;
}
}
/// Tuple for how many times an Expression was evaluated to a particular
/// ExpressionValue.
class ValueCount {
/// The amount of times that expression returned.
core.int count;
/// The return value of the expression
///
/// 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.Object value;
ValueCount();
ValueCount.fromJson(core.Map _json) {
if (_json.containsKey('count')) {
count = _json['count'] as core.int;
}
if (_json.containsKey('value')) {
value = _json['value'] as core.Object;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (count != null) {
_json['count'] = count;
}
if (value != null) {
_json['value'] = value;
}
return _json;
}
}
/// Store the position and access outcome for an expression visited in rules.
class VisitedExpression {
/// Position in the `Source` or `Ruleset` where an expression was visited.
SourcePosition sourcePosition;
/// The evaluated value for the visited expression, e.g. true/false
///
/// 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.Object value;
VisitedExpression();
VisitedExpression.fromJson(core.Map _json) {
if (_json.containsKey('sourcePosition')) {
sourcePosition = SourcePosition.fromJson(
_json['sourcePosition'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('value')) {
value = _json['value'] as core.Object;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (sourcePosition != null) {
_json['sourcePosition'] = sourcePosition.toJson();
}
if (value != null) {
_json['value'] = value;
}
return _json;
}
}