blob: 2a0943c25c24dd020981424074f16abd804ff958 [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: 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_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
/// Cloud Pub/Sub API - v1
///
/// Provides reliable, many-to-many, asynchronous messaging between
/// applications.
///
/// For more information, see <https://cloud.google.com/pubsub/docs>
///
/// Create an instance of [PubsubApi] to access these resources:
///
/// - [ProjectsResource]
/// - [ProjectsSchemasResource]
/// - [ProjectsSnapshotsResource]
/// - [ProjectsSubscriptionsResource]
/// - [ProjectsTopicsResource]
/// - [ProjectsTopicsSnapshotsResource]
/// - [ProjectsTopicsSubscriptionsResource]
library pubsub.v1;
import 'dart:async' as async;
import 'dart:convert' as convert;
import 'dart:core' as core;
import 'package:_discoveryapis_commons/_discoveryapis_commons.dart' as commons;
import 'package:http/http.dart' as http;
import '../src/user_agent.dart';
export 'package:_discoveryapis_commons/_discoveryapis_commons.dart'
show ApiRequestError, DetailedApiRequestError;
/// Provides reliable, many-to-many, asynchronous messaging between
/// applications.
class PubsubApi {
/// View and manage your data across Google Cloud Platform services
static const cloudPlatformScope =
'https://www.googleapis.com/auth/cloud-platform';
/// View and manage Pub/Sub topics and subscriptions
static const pubsubScope = 'https://www.googleapis.com/auth/pubsub';
final commons.ApiRequester _requester;
ProjectsResource get projects => ProjectsResource(_requester);
PubsubApi(http.Client client,
{core.String rootUrl = 'https://pubsub.googleapis.com/',
core.String servicePath = ''})
: _requester =
commons.ApiRequester(client, rootUrl, servicePath, userAgent);
}
class ProjectsResource {
final commons.ApiRequester _requester;
ProjectsSchemasResource get schemas => ProjectsSchemasResource(_requester);
ProjectsSnapshotsResource get snapshots =>
ProjectsSnapshotsResource(_requester);
ProjectsSubscriptionsResource get subscriptions =>
ProjectsSubscriptionsResource(_requester);
ProjectsTopicsResource get topics => ProjectsTopicsResource(_requester);
ProjectsResource(commons.ApiRequester client) : _requester = client;
}
class ProjectsSchemasResource {
final commons.ApiRequester _requester;
ProjectsSchemasResource(commons.ApiRequester client) : _requester = client;
/// Creates a schema.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [parent] - Required. The name of the project in which to create the
/// schema. Format is `projects/{project-id}`.
/// Value must have pattern `^projects/\[^/\]+$`.
///
/// [schemaId] - The ID to use for the schema, which will become the final
/// component of the schema's resource name. See
/// https://cloud.google.com/pubsub/docs/admin#resource_names for resource
/// name constraints.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Schema].
///
/// 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<Schema> create(
Schema request,
core.String parent, {
core.String? schemaId,
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if (schemaId != null) 'schemaId': [schemaId],
if ($fields != null) 'fields': [$fields],
};
final _url =
'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/schemas';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return Schema.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Deletes a schema.
///
/// Request parameters:
///
/// [name] - Required. Name of the schema to delete. Format is
/// `projects/{project}/schemas/{schema}`.
/// Value must have pattern `^projects/\[^/\]+/schemas/\[^/\]+$`.
///
/// [$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,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
final _response = await _requester.request(
_url,
'DELETE',
queryParams: _queryParams,
);
return Empty.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Gets a schema.
///
/// Request parameters:
///
/// [name] - Required. The name of the schema to get. Format is
/// `projects/{project}/schemas/{schema}`.
/// Value must have pattern `^projects/\[^/\]+/schemas/\[^/\]+$`.
///
/// [view] - The set of fields to return in the response. If not set, returns
/// a Schema with `name` and `type`, but not `definition`. Set to `FULL` to
/// retrieve all fields.
/// Possible string values are:
/// - "SCHEMA_VIEW_UNSPECIFIED" : The default / unset value. The API will
/// default to the BASIC view.
/// - "BASIC" : Include the name and type of the schema, but not the
/// definition.
/// - "FULL" : Include all Schema object fields.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Schema].
///
/// 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<Schema> get(
core.String name, {
core.String? view,
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if (view != null) 'view': [view],
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return Schema.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Lists schemas in a project.
///
/// Request parameters:
///
/// [parent] - Required. The name of the project in which to list schemas.
/// Format is `projects/{project-id}`.
/// Value must have pattern `^projects/\[^/\]+$`.
///
/// [pageSize] - Maximum number of schemas to return.
///
/// [pageToken] - The value returned by the last `ListSchemasResponse`;
/// indicates that this is a continuation of a prior `ListSchemas` call, and
/// that the system should return the next page of data.
///
/// [view] - The set of Schema fields to return in the response. If not set,
/// returns Schemas with `name` and `type`, but not `definition`. Set to
/// `FULL` to retrieve all fields.
/// Possible string values are:
/// - "SCHEMA_VIEW_UNSPECIFIED" : The default / unset value. The API will
/// default to the BASIC view.
/// - "BASIC" : Include the name and type of the schema, but not the
/// definition.
/// - "FULL" : Include all Schema object fields.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ListSchemasResponse].
///
/// 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<ListSchemasResponse> list(
core.String parent, {
core.int? pageSize,
core.String? pageToken,
core.String? view,
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if (pageSize != null) 'pageSize': ['${pageSize}'],
if (pageToken != null) 'pageToken': [pageToken],
if (view != null) 'view': [view],
if ($fields != null) 'fields': [$fields],
};
final _url =
'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/schemas';
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return ListSchemasResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Validates a schema.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [parent] - Required. The name of the project in which to validate schemas.
/// Format is `projects/{project-id}`.
/// Value must have pattern `^projects/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ValidateSchemaResponse].
///
/// 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<ValidateSchemaResponse> validate(
ValidateSchemaRequest request,
core.String parent, {
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' +
commons.Escaper.ecapeVariableReserved('$parent') +
'/schemas:validate';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return ValidateSchemaResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Validates a message against a schema.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [parent] - Required. The name of the project in which to validate schemas.
/// Format is `projects/{project-id}`.
/// Value must have pattern `^projects/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ValidateMessageResponse].
///
/// 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<ValidateMessageResponse> validateMessage(
ValidateMessageRequest request,
core.String parent, {
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' +
commons.Escaper.ecapeVariableReserved('$parent') +
'/schemas:validateMessage';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return ValidateMessageResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
}
class ProjectsSnapshotsResource {
final commons.ApiRequester _requester;
ProjectsSnapshotsResource(commons.ApiRequester client) : _requester = client;
/// Creates a snapshot from the requested subscription.
///
/// Snapshots are used in
/// [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
/// which allow you to manage message acknowledgments in bulk. That is, you
/// can set the acknowledgment state of messages in an existing subscription
/// to the state captured by a snapshot. If the snapshot already exists,
/// returns `ALREADY_EXISTS`. If the requested subscription doesn't exist,
/// returns `NOT_FOUND`. If the backlog in the subscription is too old -- and
/// the resulting snapshot would expire in less than 1 hour -- then
/// `FAILED_PRECONDITION` is returned. See also the `Snapshot.expire_time`
/// field. If the name is not provided in the request, the server will assign
/// a random name for this snapshot on the same project as the subscription,
/// conforming to the
/// [resource name format](https://cloud.google.com/pubsub/docs/admin#resource_names).
/// The generated name is populated in the returned Snapshot object. Note that
/// for REST API requests, you must specify a name in the request.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Required. User-provided name for this snapshot. If the name is
/// not provided in the request, the server will assign a random name for this
/// snapshot on the same project as the subscription. Note that for REST API
/// requests, you must specify a name. See the resource name rules. Format is
/// `projects/{project}/snapshots/{snap}`.
/// Value must have pattern `^projects/\[^/\]+/snapshots/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Snapshot].
///
/// 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<Snapshot> create(
CreateSnapshotRequest request,
core.String name, {
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
final _response = await _requester.request(
_url,
'PUT',
body: _body,
queryParams: _queryParams,
);
return Snapshot.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Removes an existing snapshot.
///
/// Snapshots are used in
/// [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
/// which allow you to manage message acknowledgments in bulk. That is, you
/// can set the acknowledgment state of messages in an existing subscription
/// to the state captured by a snapshot. When the snapshot is deleted, all
/// messages retained in the snapshot are immediately dropped. After a
/// snapshot is deleted, a new one may be created with the same name, but the
/// new one has no association with the old snapshot or its subscription,
/// unless the same subscription is specified.
///
/// Request parameters:
///
/// [snapshot] - Required. The name of the snapshot to delete. Format is
/// `projects/{project}/snapshots/{snap}`.
/// Value must have pattern `^projects/\[^/\]+/snapshots/\[^/\]+$`.
///
/// [$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 snapshot, {
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$snapshot');
final _response = await _requester.request(
_url,
'DELETE',
queryParams: _queryParams,
);
return Empty.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Gets the configuration details of a snapshot.
///
/// Snapshots are used in Seek operations, which allow you to manage message
/// acknowledgments in bulk. That is, you can set the acknowledgment state of
/// messages in an existing subscription to the state captured by a snapshot.
///
/// Request parameters:
///
/// [snapshot] - Required. The name of the snapshot to get. Format is
/// `projects/{project}/snapshots/{snap}`.
/// Value must have pattern `^projects/\[^/\]+/snapshots/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Snapshot].
///
/// 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<Snapshot> get(
core.String snapshot, {
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$snapshot');
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return Snapshot.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Gets the access control policy for a resource.
///
/// Returns an empty policy if the resource exists and does not have a policy
/// set.
///
/// Request parameters:
///
/// [resource] - REQUIRED: The resource for which the policy is being
/// requested. See the operation documentation for the appropriate value for
/// this field.
/// Value must have pattern `^projects/\[^/\]+/snapshots/\[^/\]+$`.
///
/// [options_requestedPolicyVersion] - Optional. The policy format version to
/// be returned. Valid values are 0, 1, and 3. Requests specifying an invalid
/// value will be rejected. Requests for policies with any conditional
/// bindings must specify version 3. Policies without any conditional bindings
/// may specify any valid value or leave the field unset. To learn which
/// resources support conditions in their IAM policies, see the
/// [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Policy].
///
/// 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<Policy> getIamPolicy(
core.String resource, {
core.int? options_requestedPolicyVersion,
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if (options_requestedPolicyVersion != null)
'options.requestedPolicyVersion': ['${options_requestedPolicyVersion}'],
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' +
commons.Escaper.ecapeVariableReserved('$resource') +
':getIamPolicy';
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return Policy.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Lists the existing snapshots.
///
/// Snapshots are used in \[Seek\](
/// https://cloud.google.com/pubsub/docs/replay-overview) operations, which
/// allow you to manage message acknowledgments in bulk. That is, you can set
/// the acknowledgment state of messages in an existing subscription to the
/// state captured by a snapshot.
///
/// Request parameters:
///
/// [project] - Required. The name of the project in which to list snapshots.
/// Format is `projects/{project-id}`.
/// Value must have pattern `^projects/\[^/\]+$`.
///
/// [pageSize] - Maximum number of snapshots to return.
///
/// [pageToken] - The value returned by the last `ListSnapshotsResponse`;
/// indicates that this is a continuation of a prior `ListSnapshots` call, and
/// that the system should return the next page of data.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ListSnapshotsResponse].
///
/// 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<ListSnapshotsResponse> list(
core.String project, {
core.int? pageSize,
core.String? pageToken,
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if (pageSize != null) 'pageSize': ['${pageSize}'],
if (pageToken != null) 'pageToken': [pageToken],
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' +
commons.Escaper.ecapeVariableReserved('$project') +
'/snapshots';
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return ListSnapshotsResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Updates an existing snapshot.
///
/// Snapshots are used in Seek operations, which allow you to manage message
/// acknowledgments in bulk. That is, you can set the acknowledgment state of
/// messages in an existing subscription to the state captured by a snapshot.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - The name of the snapshot.
/// Value must have pattern `^projects/\[^/\]+/snapshots/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Snapshot].
///
/// 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<Snapshot> patch(
UpdateSnapshotRequest request,
core.String name, {
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
final _response = await _requester.request(
_url,
'PATCH',
body: _body,
queryParams: _queryParams,
);
return Snapshot.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Sets the access control policy on the specified resource.
///
/// Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`,
/// and `PERMISSION_DENIED` errors.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [resource] - REQUIRED: The resource for which the policy is being
/// specified. See the operation documentation for the appropriate value for
/// this field.
/// Value must have pattern `^projects/\[^/\]+/snapshots/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Policy].
///
/// 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<Policy> setIamPolicy(
SetIamPolicyRequest request,
core.String resource, {
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' +
commons.Escaper.ecapeVariableReserved('$resource') +
':setIamPolicy';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return Policy.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Returns permissions that a caller has on the specified resource.
///
/// If the resource does not exist, this will return an empty set of
/// permissions, not a `NOT_FOUND` error. Note: This operation is designed to
/// be used for building permission-aware UIs and command-line tools, not for
/// authorization checking. This operation may "fail open" without warning.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [resource] - REQUIRED: The resource for which the policy detail is being
/// requested. See the operation documentation for the appropriate value for
/// this field.
/// Value must have pattern `^projects/\[^/\]+/snapshots/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [TestIamPermissionsResponse].
///
/// 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<TestIamPermissionsResponse> testIamPermissions(
TestIamPermissionsRequest request,
core.String resource, {
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' +
commons.Escaper.ecapeVariableReserved('$resource') +
':testIamPermissions';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return TestIamPermissionsResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
}
class ProjectsSubscriptionsResource {
final commons.ApiRequester _requester;
ProjectsSubscriptionsResource(commons.ApiRequester client)
: _requester = client;
/// Acknowledges the messages associated with the `ack_ids` in the
/// `AcknowledgeRequest`.
///
/// The Pub/Sub system can remove the relevant messages from the subscription.
/// Acknowledging a message whose ack deadline has expired may succeed, but
/// such a message may be redelivered later. Acknowledging a message more than
/// once will not result in an error.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [subscription] - Required. The subscription whose message is being
/// acknowledged. Format is `projects/{project}/subscriptions/{sub}`.
/// Value must have pattern `^projects/\[^/\]+/subscriptions/\[^/\]+$`.
///
/// [$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> acknowledge(
AcknowledgeRequest request,
core.String subscription, {
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' +
commons.Escaper.ecapeVariableReserved('$subscription') +
':acknowledge';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return Empty.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Creates a subscription to a given topic.
///
/// See the
/// [resource name rules](https://cloud.google.com/pubsub/docs/admin#resource_names).
/// If the subscription already exists, returns `ALREADY_EXISTS`. If the
/// corresponding topic doesn't exist, returns `NOT_FOUND`. If the name is not
/// provided in the request, the server will assign a random name for this
/// subscription on the same project as the topic, conforming to the
/// [resource name format](https://cloud.google.com/pubsub/docs/admin#resource_names).
/// The generated name is populated in the returned Subscription object. Note
/// that for REST API requests, you must specify a name in the request.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Required. The name of the subscription. It must have the format
/// `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must
/// start with a letter, and contain only letters (`[A-Za-z]`), numbers
/// (`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`),
/// plus (`+`) or percent signs (`%`). It must be between 3 and 255 characters
/// in length, and it must not start with `"goog"`.
/// Value must have pattern `^projects/\[^/\]+/subscriptions/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Subscription].
///
/// 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<Subscription> create(
Subscription request,
core.String name, {
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
final _response = await _requester.request(
_url,
'PUT',
body: _body,
queryParams: _queryParams,
);
return Subscription.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Deletes an existing subscription.
///
/// All messages retained in the subscription are immediately dropped. Calls
/// to `Pull` after deletion will return `NOT_FOUND`. After a subscription is
/// deleted, a new one may be created with the same name, but the new one has
/// no association with the old subscription or its topic unless the same
/// topic is specified.
///
/// Request parameters:
///
/// [subscription] - Required. The subscription to delete. Format is
/// `projects/{project}/subscriptions/{sub}`.
/// Value must have pattern `^projects/\[^/\]+/subscriptions/\[^/\]+$`.
///
/// [$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 subscription, {
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$subscription');
final _response = await _requester.request(
_url,
'DELETE',
queryParams: _queryParams,
);
return Empty.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Detaches a subscription from this topic.
///
/// All messages retained in the subscription are dropped. Subsequent `Pull`
/// and `StreamingPull` requests will return FAILED_PRECONDITION. If the
/// subscription is a push subscription, pushes to the endpoint will stop.
///
/// Request parameters:
///
/// [subscription] - Required. The subscription to detach. Format is
/// `projects/{project}/subscriptions/{subscription}`.
/// Value must have pattern `^projects/\[^/\]+/subscriptions/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [DetachSubscriptionResponse].
///
/// 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<DetachSubscriptionResponse> detach(
core.String subscription, {
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' +
commons.Escaper.ecapeVariableReserved('$subscription') +
':detach';
final _response = await _requester.request(
_url,
'POST',
queryParams: _queryParams,
);
return DetachSubscriptionResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Gets the configuration details of a subscription.
///
/// Request parameters:
///
/// [subscription] - Required. The name of the subscription to get. Format is
/// `projects/{project}/subscriptions/{sub}`.
/// Value must have pattern `^projects/\[^/\]+/subscriptions/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Subscription].
///
/// 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<Subscription> get(
core.String subscription, {
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$subscription');
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return Subscription.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Gets the access control policy for a resource.
///
/// Returns an empty policy if the resource exists and does not have a policy
/// set.
///
/// Request parameters:
///
/// [resource] - REQUIRED: The resource for which the policy is being
/// requested. See the operation documentation for the appropriate value for
/// this field.
/// Value must have pattern `^projects/\[^/\]+/subscriptions/\[^/\]+$`.
///
/// [options_requestedPolicyVersion] - Optional. The policy format version to
/// be returned. Valid values are 0, 1, and 3. Requests specifying an invalid
/// value will be rejected. Requests for policies with any conditional
/// bindings must specify version 3. Policies without any conditional bindings
/// may specify any valid value or leave the field unset. To learn which
/// resources support conditions in their IAM policies, see the
/// [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Policy].
///
/// 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<Policy> getIamPolicy(
core.String resource, {
core.int? options_requestedPolicyVersion,
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if (options_requestedPolicyVersion != null)
'options.requestedPolicyVersion': ['${options_requestedPolicyVersion}'],
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' +
commons.Escaper.ecapeVariableReserved('$resource') +
':getIamPolicy';
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return Policy.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Lists matching subscriptions.
///
/// Request parameters:
///
/// [project] - Required. The name of the project in which to list
/// subscriptions. Format is `projects/{project-id}`.
/// Value must have pattern `^projects/\[^/\]+$`.
///
/// [pageSize] - Maximum number of subscriptions to return.
///
/// [pageToken] - The value returned by the last `ListSubscriptionsResponse`;
/// indicates that this is a continuation of a prior `ListSubscriptions` call,
/// and that the system should return the next page of data.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ListSubscriptionsResponse].
///
/// 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<ListSubscriptionsResponse> list(
core.String project, {
core.int? pageSize,
core.String? pageToken,
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if (pageSize != null) 'pageSize': ['${pageSize}'],
if (pageToken != null) 'pageToken': [pageToken],
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' +
commons.Escaper.ecapeVariableReserved('$project') +
'/subscriptions';
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return ListSubscriptionsResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Modifies the ack deadline for a specific message.
///
/// This method is useful to indicate that more time is needed to process a
/// message by the subscriber, or to make the message available for redelivery
/// if the processing was interrupted. Note that this does not modify the
/// subscription-level `ackDeadlineSeconds` used for subsequent messages.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [subscription] - Required. The name of the subscription. Format is
/// `projects/{project}/subscriptions/{sub}`.
/// Value must have pattern `^projects/\[^/\]+/subscriptions/\[^/\]+$`.
///
/// [$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> modifyAckDeadline(
ModifyAckDeadlineRequest request,
core.String subscription, {
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' +
commons.Escaper.ecapeVariableReserved('$subscription') +
':modifyAckDeadline';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return Empty.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Modifies the `PushConfig` for a specified subscription.
///
/// This may be used to change a push subscription to a pull one (signified by
/// an empty `PushConfig`) or vice versa, or change the endpoint URL and other
/// attributes of a push subscription. Messages will accumulate for delivery
/// continuously through the call regardless of changes to the `PushConfig`.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [subscription] - Required. The name of the subscription. Format is
/// `projects/{project}/subscriptions/{sub}`.
/// Value must have pattern `^projects/\[^/\]+/subscriptions/\[^/\]+$`.
///
/// [$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> modifyPushConfig(
ModifyPushConfigRequest request,
core.String subscription, {
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' +
commons.Escaper.ecapeVariableReserved('$subscription') +
':modifyPushConfig';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return Empty.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Updates an existing subscription.
///
/// Note that certain properties of a subscription, such as its topic, are not
/// modifiable.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Required. The name of the subscription. It must have the format
/// `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must
/// start with a letter, and contain only letters (`[A-Za-z]`), numbers
/// (`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`),
/// plus (`+`) or percent signs (`%`). It must be between 3 and 255 characters
/// in length, and it must not start with `"goog"`.
/// Value must have pattern `^projects/\[^/\]+/subscriptions/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Subscription].
///
/// 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<Subscription> patch(
UpdateSubscriptionRequest request,
core.String name, {
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
final _response = await _requester.request(
_url,
'PATCH',
body: _body,
queryParams: _queryParams,
);
return Subscription.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Pulls messages from the server.
///
/// The server may return `UNAVAILABLE` if there are too many concurrent pull
/// requests pending for the given subscription.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [subscription] - Required. The subscription from which messages should be
/// pulled. Format is `projects/{project}/subscriptions/{sub}`.
/// Value must have pattern `^projects/\[^/\]+/subscriptions/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [PullResponse].
///
/// 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<PullResponse> pull(
PullRequest request,
core.String subscription, {
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' +
commons.Escaper.ecapeVariableReserved('$subscription') +
':pull';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return PullResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Seeks an existing subscription to a point in time or to a given snapshot,
/// whichever is provided in the request.
///
/// Snapshots are used in
/// [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
/// which allow you to manage message acknowledgments in bulk. That is, you
/// can set the acknowledgment state of messages in an existing subscription
/// to the state captured by a snapshot. Note that both the subscription and
/// the snapshot must be on the same topic.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [subscription] - Required. The subscription to affect.
/// Value must have pattern `^projects/\[^/\]+/subscriptions/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [SeekResponse].
///
/// 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<SeekResponse> seek(
SeekRequest request,
core.String subscription, {
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' +
commons.Escaper.ecapeVariableReserved('$subscription') +
':seek';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return SeekResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Sets the access control policy on the specified resource.
///
/// Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`,
/// and `PERMISSION_DENIED` errors.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [resource] - REQUIRED: The resource for which the policy is being
/// specified. See the operation documentation for the appropriate value for
/// this field.
/// Value must have pattern `^projects/\[^/\]+/subscriptions/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Policy].
///
/// 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<Policy> setIamPolicy(
SetIamPolicyRequest request,
core.String resource, {
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' +
commons.Escaper.ecapeVariableReserved('$resource') +
':setIamPolicy';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return Policy.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Returns permissions that a caller has on the specified resource.
///
/// If the resource does not exist, this will return an empty set of
/// permissions, not a `NOT_FOUND` error. Note: This operation is designed to
/// be used for building permission-aware UIs and command-line tools, not for
/// authorization checking. This operation may "fail open" without warning.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [resource] - REQUIRED: The resource for which the policy detail is being
/// requested. See the operation documentation for the appropriate value for
/// this field.
/// Value must have pattern `^projects/\[^/\]+/subscriptions/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [TestIamPermissionsResponse].
///
/// 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<TestIamPermissionsResponse> testIamPermissions(
TestIamPermissionsRequest request,
core.String resource, {
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' +
commons.Escaper.ecapeVariableReserved('$resource') +
':testIamPermissions';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return TestIamPermissionsResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
}
class ProjectsTopicsResource {
final commons.ApiRequester _requester;
ProjectsTopicsSnapshotsResource get snapshots =>
ProjectsTopicsSnapshotsResource(_requester);
ProjectsTopicsSubscriptionsResource get subscriptions =>
ProjectsTopicsSubscriptionsResource(_requester);
ProjectsTopicsResource(commons.ApiRequester client) : _requester = client;
/// Creates the given topic with the given name.
///
/// See the
/// [resource name rules](https://cloud.google.com/pubsub/docs/admin#resource_names).
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Required. The name of the topic. It must have the format
/// `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter,
/// and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
/// underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
/// signs (`%`). It must be between 3 and 255 characters in length, and it
/// must not start with `"goog"`.
/// Value must have pattern `^projects/\[^/\]+/topics/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Topic].
///
/// 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<Topic> create(
Topic request,
core.String name, {
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
final _response = await _requester.request(
_url,
'PUT',
body: _body,
queryParams: _queryParams,
);
return Topic.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Deletes the topic with the given name.
///
/// Returns `NOT_FOUND` if the topic does not exist. After a topic is deleted,
/// a new topic may be created with the same name; this is an entirely new
/// topic with none of the old configuration or subscriptions. Existing
/// subscriptions to this topic are not deleted, but their `topic` field is
/// set to `_deleted-topic_`.
///
/// Request parameters:
///
/// [topic] - Required. Name of the topic to delete. Format is
/// `projects/{project}/topics/{topic}`.
/// Value must have pattern `^projects/\[^/\]+/topics/\[^/\]+$`.
///
/// [$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 topic, {
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$topic');
final _response = await _requester.request(
_url,
'DELETE',
queryParams: _queryParams,
);
return Empty.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Gets the configuration of a topic.
///
/// Request parameters:
///
/// [topic] - Required. The name of the topic to get. Format is
/// `projects/{project}/topics/{topic}`.
/// Value must have pattern `^projects/\[^/\]+/topics/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Topic].
///
/// 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<Topic> get(
core.String topic, {
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$topic');
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return Topic.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Gets the access control policy for a resource.
///
/// Returns an empty policy if the resource exists and does not have a policy
/// set.
///
/// Request parameters:
///
/// [resource] - REQUIRED: The resource for which the policy is being
/// requested. See the operation documentation for the appropriate value for
/// this field.
/// Value must have pattern `^projects/\[^/\]+/topics/\[^/\]+$`.
///
/// [options_requestedPolicyVersion] - Optional. The policy format version to
/// be returned. Valid values are 0, 1, and 3. Requests specifying an invalid
/// value will be rejected. Requests for policies with any conditional
/// bindings must specify version 3. Policies without any conditional bindings
/// may specify any valid value or leave the field unset. To learn which
/// resources support conditions in their IAM policies, see the
/// [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Policy].
///
/// 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<Policy> getIamPolicy(
core.String resource, {
core.int? options_requestedPolicyVersion,
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if (options_requestedPolicyVersion != null)
'options.requestedPolicyVersion': ['${options_requestedPolicyVersion}'],
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' +
commons.Escaper.ecapeVariableReserved('$resource') +
':getIamPolicy';
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return Policy.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Lists matching topics.
///
/// Request parameters:
///
/// [project] - Required. The name of the project in which to list topics.
/// Format is `projects/{project-id}`.
/// Value must have pattern `^projects/\[^/\]+$`.
///
/// [pageSize] - Maximum number of topics to return.
///
/// [pageToken] - The value returned by the last `ListTopicsResponse`;
/// indicates that this is a continuation of a prior `ListTopics` call, and
/// that the system should return the next page of data.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ListTopicsResponse].
///
/// 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<ListTopicsResponse> list(
core.String project, {
core.int? pageSize,
core.String? pageToken,
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if (pageSize != null) 'pageSize': ['${pageSize}'],
if (pageToken != null) 'pageToken': [pageToken],
if ($fields != null) 'fields': [$fields],
};
final _url =
'v1/' + commons.Escaper.ecapeVariableReserved('$project') + '/topics';
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return ListTopicsResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Updates an existing topic.
///
/// Note that certain properties of a topic are not modifiable.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Required. The name of the topic. It must have the format
/// `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter,
/// and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
/// underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
/// signs (`%`). It must be between 3 and 255 characters in length, and it
/// must not start with `"goog"`.
/// Value must have pattern `^projects/\[^/\]+/topics/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Topic].
///
/// 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<Topic> patch(
UpdateTopicRequest request,
core.String name, {
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
final _response = await _requester.request(
_url,
'PATCH',
body: _body,
queryParams: _queryParams,
);
return Topic.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Adds one or more messages to the topic.
///
/// Returns `NOT_FOUND` if the topic does not exist.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [topic] - Required. The messages in the request will be published on this
/// topic. Format is `projects/{project}/topics/{topic}`.
/// Value must have pattern `^projects/\[^/\]+/topics/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [PublishResponse].
///
/// 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<PublishResponse> publish(
PublishRequest request,
core.String topic, {
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url =
'v1/' + commons.Escaper.ecapeVariableReserved('$topic') + ':publish';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return PublishResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Sets the access control policy on the specified resource.
///
/// Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`,
/// and `PERMISSION_DENIED` errors.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [resource] - REQUIRED: The resource for which the policy is being
/// specified. See the operation documentation for the appropriate value for
/// this field.
/// Value must have pattern `^projects/\[^/\]+/topics/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Policy].
///
/// 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<Policy> setIamPolicy(
SetIamPolicyRequest request,
core.String resource, {
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' +
commons.Escaper.ecapeVariableReserved('$resource') +
':setIamPolicy';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return Policy.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Returns permissions that a caller has on the specified resource.
///
/// If the resource does not exist, this will return an empty set of
/// permissions, not a `NOT_FOUND` error. Note: This operation is designed to
/// be used for building permission-aware UIs and command-line tools, not for
/// authorization checking. This operation may "fail open" without warning.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [resource] - REQUIRED: The resource for which the policy detail is being
/// requested. See the operation documentation for the appropriate value for
/// this field.
/// Value must have pattern `^projects/\[^/\]+/topics/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [TestIamPermissionsResponse].
///
/// 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<TestIamPermissionsResponse> testIamPermissions(
TestIamPermissionsRequest request,
core.String resource, {
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' +
commons.Escaper.ecapeVariableReserved('$resource') +
':testIamPermissions';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return TestIamPermissionsResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
}
class ProjectsTopicsSnapshotsResource {
final commons.ApiRequester _requester;
ProjectsTopicsSnapshotsResource(commons.ApiRequester client)
: _requester = client;
/// Lists the names of the snapshots on this topic.
///
/// Snapshots are used in
/// [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
/// which allow you to manage message acknowledgments in bulk. That is, you
/// can set the acknowledgment state of messages in an existing subscription
/// to the state captured by a snapshot.
///
/// Request parameters:
///
/// [topic] - Required. The name of the topic that snapshots are attached to.
/// Format is `projects/{project}/topics/{topic}`.
/// Value must have pattern `^projects/\[^/\]+/topics/\[^/\]+$`.
///
/// [pageSize] - Maximum number of snapshot names to return.
///
/// [pageToken] - The value returned by the last `ListTopicSnapshotsResponse`;
/// indicates that this is a continuation of a prior `ListTopicSnapshots`
/// call, and that the system should return the next page of data.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ListTopicSnapshotsResponse].
///
/// 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<ListTopicSnapshotsResponse> list(
core.String topic, {
core.int? pageSize,
core.String? pageToken,
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if (pageSize != null) 'pageSize': ['${pageSize}'],
if (pageToken != null) 'pageToken': [pageToken],
if ($fields != null) 'fields': [$fields],
};
final _url =
'v1/' + commons.Escaper.ecapeVariableReserved('$topic') + '/snapshots';
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return ListTopicSnapshotsResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
}
class ProjectsTopicsSubscriptionsResource {
final commons.ApiRequester _requester;
ProjectsTopicsSubscriptionsResource(commons.ApiRequester client)
: _requester = client;
/// Lists the names of the attached subscriptions on this topic.
///
/// Request parameters:
///
/// [topic] - Required. The name of the topic that subscriptions are attached
/// to. Format is `projects/{project}/topics/{topic}`.
/// Value must have pattern `^projects/\[^/\]+/topics/\[^/\]+$`.
///
/// [pageSize] - Maximum number of subscription names to return.
///
/// [pageToken] - The value returned by the last
/// `ListTopicSubscriptionsResponse`; indicates that this is a continuation of
/// a prior `ListTopicSubscriptions` call, and that the system should return
/// the next page of data.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ListTopicSubscriptionsResponse].
///
/// 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<ListTopicSubscriptionsResponse> list(
core.String topic, {
core.int? pageSize,
core.String? pageToken,
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if (pageSize != null) 'pageSize': ['${pageSize}'],
if (pageToken != null) 'pageToken': [pageToken],
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' +
commons.Escaper.ecapeVariableReserved('$topic') +
'/subscriptions';
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return ListTopicSubscriptionsResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
}
/// Request for the Acknowledge method.
class AcknowledgeRequest {
/// The acknowledgment ID for the messages being acknowledged that was
/// returned by the Pub/Sub system in the `Pull` response.
///
/// Must not be empty.
///
/// Required.
core.List<core.String>? ackIds;
AcknowledgeRequest();
AcknowledgeRequest.fromJson(core.Map _json) {
if (_json.containsKey('ackIds')) {
ackIds = (_json['ackIds'] as core.List)
.map<core.String>((value) => value as core.String)
.toList();
}
}
core.Map<core.String, core.Object?> toJson() => {
if (ackIds != null) 'ackIds': ackIds!,
};
}
/// Associates `members` with a `role`.
class Binding {
/// The condition that is associated with this binding.
///
/// If the condition evaluates to `true`, then this binding applies to the
/// current request. If the condition evaluates to `false`, then this binding
/// does not apply to the current request. However, a different role binding
/// might grant the same role to one or more of the members in this binding.
/// To learn which resources support conditions in their IAM policies, see the
/// [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
Expr? condition;
/// Specifies the identities requesting access for a Cloud Platform resource.
///
/// `members` can have the following values: * `allUsers`: A special
/// identifier that represents anyone who is on the internet; with or without
/// a Google account. * `allAuthenticatedUsers`: A special identifier that
/// represents anyone who is authenticated with a Google account or a service
/// account. * `user:{emailid}`: An email address that represents a specific
/// Google account. For example, `alice@example.com` . *
/// `serviceAccount:{emailid}`: An email address that represents a service
/// account. For example, `my-other-app@appspot.gserviceaccount.com`. *
/// `group:{emailid}`: An email address that represents a Google group. For
/// example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`:
/// An email address (plus unique identifier) representing a user that has
/// been recently deleted. For example,
/// `alice@example.com?uid=123456789012345678901`. If the user is recovered,
/// this value reverts to `user:{emailid}` and the recovered user retains the
/// role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`:
/// An email address (plus unique identifier) representing a service account
/// that has been recently deleted. For example,
/// `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If
/// the service account is undeleted, this value reverts to
/// `serviceAccount:{emailid}` and the undeleted service account retains the
/// role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email
/// address (plus unique identifier) representing a Google group that has been
/// recently deleted. For example,
/// `admins@example.com?uid=123456789012345678901`. If the group is recovered,
/// this value reverts to `group:{emailid}` and the recovered group retains
/// the role in the binding. * `domain:{domain}`: The G Suite domain (primary)
/// that represents all the users of that domain. For example, `google.com` or
/// `example.com`.
core.List<core.String>? members;
/// Role that is assigned to `members`.
///
/// For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
core.String? role;
Binding();
Binding.fromJson(core.Map _json) {
if (_json.containsKey('condition')) {
condition = Expr.fromJson(
_json['condition'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('members')) {
members = (_json['members'] as core.List)
.map<core.String>((value) => value as core.String)
.toList();
}
if (_json.containsKey('role')) {
role = _json['role'] as core.String;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (condition != null) 'condition': condition!.toJson(),
if (members != null) 'members': members!,
if (role != null) 'role': role!,
};
}
/// Request for the `CreateSnapshot` method.
class CreateSnapshotRequest {
/// See Creating and managing labels.
core.Map<core.String, core.String>? labels;
/// The subscription whose backlog the snapshot retains.
///
/// Specifically, the created snapshot is guaranteed to retain: (a) The
/// existing backlog on the subscription. More precisely, this is defined as
/// the messages in the subscription's backlog that are unacknowledged upon
/// the successful completion of the `CreateSnapshot` request; as well as: (b)
/// Any messages published to the subscription's topic following the
/// successful completion of the CreateSnapshot request. Format is
/// `projects/{project}/subscriptions/{sub}`.
///
/// Required.
core.String? subscription;
CreateSnapshotRequest();
CreateSnapshotRequest.fromJson(core.Map _json) {
if (_json.containsKey('labels')) {
labels =
(_json['labels'] as core.Map).cast<core.String, core.String>().map(
(key, item) => core.MapEntry(
key,
item as core.String,
),
);
}
if (_json.containsKey('subscription')) {
subscription = _json['subscription'] as core.String;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (labels != null) 'labels': labels!,
if (subscription != null) 'subscription': subscription!,
};
}
/// Dead lettering is done on a best effort basis.
///
/// The same message might be dead lettered multiple times. If validation on any
/// of the fields fails at subscription creation/updation, the create/update
/// subscription request will fail.
class DeadLetterPolicy {
/// The name of the topic to which dead letter messages should be published.
///
/// Format is `projects/{project}/topics/{topic}`.The Cloud Pub/Sub service
/// account associated with the enclosing subscription's parent project (i.e.,
/// service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have
/// permission to Publish() to this topic. The operation will fail if the
/// topic does not exist. Users should ensure that there is a subscription
/// attached to this topic since messages published to a topic with no
/// subscriptions are lost.
core.String? deadLetterTopic;
/// The maximum number of delivery attempts for any message.
///
/// The value must be between 5 and 100. The number of delivery attempts is
/// defined as 1 + (the sum of number of NACKs and number of times the
/// acknowledgement deadline has been exceeded for the message). A NACK is any
/// call to ModifyAckDeadline with a 0 deadline. Note that client libraries
/// may automatically extend ack_deadlines. This field will be honored on a
/// best effort basis. If this parameter is 0, a default value of 5 is used.
core.int? maxDeliveryAttempts;
DeadLetterPolicy();
DeadLetterPolicy.fromJson(core.Map _json) {
if (_json.containsKey('deadLetterTopic')) {
deadLetterTopic = _json['deadLetterTopic'] as core.String;
}
if (_json.containsKey('maxDeliveryAttempts')) {
maxDeliveryAttempts = _json['maxDeliveryAttempts'] as core.int;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (deadLetterTopic != null) 'deadLetterTopic': deadLetterTopic!,
if (maxDeliveryAttempts != null)
'maxDeliveryAttempts': maxDeliveryAttempts!,
};
}
/// Response for the DetachSubscription method.
///
/// Reserved for future use.
class DetachSubscriptionResponse {
DetachSubscriptionResponse();
DetachSubscriptionResponse.fromJson(
// ignore: avoid_unused_constructor_parameters
core.Map _json);
core.Map<core.String, core.Object?> toJson() => {};
}
/// 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() => {};
}
/// A policy that specifies the conditions for resource expiration (i.e.,
/// automatic resource deletion).
class ExpirationPolicy {
/// Specifies the "time-to-live" duration for an associated resource.
///
/// The resource expires if it is not active for a period of `ttl`. The
/// definition of "activity" depends on the type of the associated resource.
/// The minimum and maximum allowed values for `ttl` depend on the type of the
/// associated resource, as well. If `ttl` is not set, the associated resource
/// never expires.
core.String? ttl;
ExpirationPolicy();
ExpirationPolicy.fromJson(core.Map _json) {
if (_json.containsKey('ttl')) {
ttl = _json['ttl'] as core.String;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (ttl != null) 'ttl': ttl!,
};
}
/// Represents a textual expression in the Common Expression Language (CEL)
/// syntax.
///
/// CEL is a C-like expression language. The syntax and semantics of CEL are
/// documented at https://github.com/google/cel-spec. Example (Comparison):
/// title: "Summary size limit" description: "Determines if a summary is less
/// than 100 chars" expression: "document.summary.size() < 100" Example
/// (Equality): title: "Requestor is owner" description: "Determines if
/// requestor is the document owner" expression: "document.owner ==
/// request.auth.claims.email" Example (Logic): title: "Public documents"
/// description: "Determine whether the document should be publicly visible"
/// expression: "document.type != 'private' && document.type != 'internal'"
/// Example (Data Manipulation): title: "Notification string" description:
/// "Create a notification string with a timestamp." expression: "'New message
/// received at ' + string(document.create_time)" The exact variables and
/// functions that may be referenced within an expression are determined by the
/// service that evaluates it. See the service documentation for additional
/// information.
class Expr {
/// Description of the expression.
///
/// This is a longer text which describes the expression, e.g. when hovered
/// over it in a UI.
///
/// Optional.
core.String? description;
/// Textual representation of an expression in Common Expression Language
/// syntax.
core.String? expression;
/// String indicating the location of the expression for error reporting, e.g.
/// a file name and a position in the file.
///
/// Optional.
core.String? location;
/// Title for the expression, i.e. a short string describing its purpose.
///
/// This can be used e.g. in UIs which allow to enter the expression.
///
/// Optional.
core.String? title;
Expr();
Expr.fromJson(core.Map _json) {
if (_json.containsKey('description')) {
description = _json['description'] as core.String;
}
if (_json.containsKey('expression')) {
expression = _json['expression'] as core.String;
}
if (_json.containsKey('location')) {
location = _json['location'] as core.String;
}
if (_json.containsKey('title')) {
title = _json['title'] as core.String;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (description != null) 'description': description!,
if (expression != null) 'expression': expression!,
if (location != null) 'location': location!,
if (title != null) 'title': title!,
};
}
/// Response for the `ListSchemas` method.
class ListSchemasResponse {
/// If not empty, indicates that there may be more schemas that match the
/// request; this value should be passed in a new `ListSchemasRequest`.
core.String? nextPageToken;
/// The resulting schemas.
core.List<Schema>? schemas;
ListSchemasResponse();
ListSchemasResponse.fromJson(core.Map _json) {
if (_json.containsKey('nextPageToken')) {
nextPageToken = _json['nextPageToken'] as core.String;
}
if (_json.containsKey('schemas')) {
schemas = (_json['schemas'] as core.List)
.map<Schema>((value) =>
Schema.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object?> toJson() => {
if (nextPageToken != null) 'nextPageToken': nextPageToken!,
if (schemas != null)
'schemas': schemas!.map((value) => value.toJson()).toList(),
};
}
/// Response for the `ListSnapshots` method.
class ListSnapshotsResponse {
/// If not empty, indicates that there may be more snapshot that match the
/// request; this value should be passed in a new `ListSnapshotsRequest`.
core.String? nextPageToken;
/// The resulting snapshots.
core.List<Snapshot>? snapshots;
ListSnapshotsResponse();
ListSnapshotsResponse.fromJson(core.Map _json) {
if (_json.containsKey('nextPageToken')) {
nextPageToken = _json['nextPageToken'] as core.String;
}
if (_json.containsKey('snapshots')) {
snapshots = (_json['snapshots'] as core.List)
.map<Snapshot>((value) =>
Snapshot.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object?> toJson() => {
if (nextPageToken != null) 'nextPageToken': nextPageToken!,
if (snapshots != null)
'snapshots': snapshots!.map((value) => value.toJson()).toList(),
};
}
/// Response for the `ListSubscriptions` method.
class ListSubscriptionsResponse {
/// If not empty, indicates that there may be more subscriptions that match
/// the request; this value should be passed in a new
/// `ListSubscriptionsRequest` to get more subscriptions.
core.String? nextPageToken;
/// The subscriptions that match the request.
core.List<Subscription>? subscriptions;
ListSubscriptionsResponse();
ListSubscriptionsResponse.fromJson(core.Map _json) {
if (_json.containsKey('nextPageToken')) {
nextPageToken = _json['nextPageToken'] as core.String;
}
if (_json.containsKey('subscriptions')) {
subscriptions = (_json['subscriptions'] as core.List)
.map<Subscription>((value) => Subscription.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object?> toJson() => {
if (nextPageToken != null) 'nextPageToken': nextPageToken!,
if (subscriptions != null)
'subscriptions':
subscriptions!.map((value) => value.toJson()).toList(),
};
}
/// Response for the `ListTopicSnapshots` method.
class ListTopicSnapshotsResponse {
/// If not empty, indicates that there may be more snapshots that match the
/// request; this value should be passed in a new `ListTopicSnapshotsRequest`
/// to get more snapshots.
core.String? nextPageToken;
/// The names of the snapshots that match the request.
core.List<core.String>? snapshots;
ListTopicSnapshotsResponse();
ListTopicSnapshotsResponse.fromJson(core.Map _json) {
if (_json.containsKey('nextPageToken')) {
nextPageToken = _json['nextPageToken'] as core.String;
}
if (_json.containsKey('snapshots')) {
snapshots = (_json['snapshots'] as core.List)
.map<core.String>((value) => value as core.String)
.toList();
}
}
core.Map<core.String, core.Object?> toJson() => {
if (nextPageToken != null) 'nextPageToken': nextPageToken!,
if (snapshots != null) 'snapshots': snapshots!,
};
}
/// Response for the `ListTopicSubscriptions` method.
class ListTopicSubscriptionsResponse {
/// If not empty, indicates that there may be more subscriptions that match
/// the request; this value should be passed in a new
/// `ListTopicSubscriptionsRequest` to get more subscriptions.
core.String? nextPageToken;
/// The names of subscriptions attached to the topic specified in the request.
core.List<core.String>? subscriptions;
ListTopicSubscriptionsResponse();
ListTopicSubscriptionsResponse.fromJson(core.Map _json) {
if (_json.containsKey('nextPageToken')) {
nextPageToken = _json['nextPageToken'] as core.String;
}
if (_json.containsKey('subscriptions')) {
subscriptions = (_json['subscriptions'] as core.List)
.map<core.String>((value) => value as core.String)
.toList();
}
}
core.Map<core.String, core.Object?> toJson() => {
if (nextPageToken != null) 'nextPageToken': nextPageToken!,
if (subscriptions != null) 'subscriptions': subscriptions!,
};
}
/// Response for the `ListTopics` method.
class ListTopicsResponse {
/// If not empty, indicates that there may be more topics that match the
/// request; this value should be passed in a new `ListTopicsRequest`.
core.String? nextPageToken;
/// The resulting topics.
core.List<Topic>? topics;
ListTopicsResponse();
ListTopicsResponse.fromJson(core.Map _json) {
if (_json.containsKey('nextPageToken')) {
nextPageToken = _json['nextPageToken'] as core.String;
}
if (_json.containsKey('topics')) {
topics = (_json['topics'] as core.List)
.map<Topic>((value) =>
Topic.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object?> toJson() => {
if (nextPageToken != null) 'nextPageToken': nextPageToken!,
if (topics != null)
'topics': topics!.map((value) => value.toJson()).toList(),
};
}
/// A policy constraining the storage of messages published to the topic.
class MessageStoragePolicy {
/// A list of IDs of GCP regions where messages that are published to the
/// topic may be persisted in storage.
///
/// Messages published by publishers running in non-allowed GCP regions (or
/// running outside of GCP altogether) will be routed for storage in one of
/// the allowed regions. An empty list means that no regions are allowed, and
/// is not a valid configuration.
core.List<core.String>? allowedPersistenceRegions;
MessageStoragePolicy();
MessageStoragePolicy.fromJson(core.Map _json) {
if (_json.containsKey('allowedPersistenceRegions')) {
allowedPersistenceRegions =
(_json['allowedPersistenceRegions'] as core.List)
.map<core.String>((value) => value as core.String)
.toList();
}
}
core.Map<core.String, core.Object?> toJson() => {
if (allowedPersistenceRegions != null)
'allowedPersistenceRegions': allowedPersistenceRegions!,
};
}
/// Request for the ModifyAckDeadline method.
class ModifyAckDeadlineRequest {
/// The new ack deadline with respect to the time this request was sent to the
/// Pub/Sub system.
///
/// For example, if the value is 10, the new ack deadline will expire 10
/// seconds after the `ModifyAckDeadline` call was made. Specifying zero might
/// immediately make the message available for delivery to another subscriber
/// client. This typically results in an increase in the rate of message
/// redeliveries (that is, duplicates). The minimum deadline you can specify
/// is 0 seconds. The maximum deadline you can specify is 600 seconds (10
/// minutes).
///
/// Required.
core.int? ackDeadlineSeconds;
/// List of acknowledgment IDs.
///
/// Required.
core.List<core.String>? ackIds;
ModifyAckDeadlineRequest();
ModifyAckDeadlineRequest.fromJson(core.Map _json) {
if (_json.containsKey('ackDeadlineSeconds')) {
ackDeadlineSeconds = _json['ackDeadlineSeconds'] as core.int;
}
if (_json.containsKey('ackIds')) {
ackIds = (_json['ackIds'] as core.List)
.map<core.String>((value) => value as core.String)
.toList();
}
}
core.Map<core.String, core.Object?> toJson() => {
if (ackDeadlineSeconds != null)
'ackDeadlineSeconds': ackDeadlineSeconds!,
if (ackIds != null) 'ackIds': ackIds!,
};
}
/// Request for the ModifyPushConfig method.
class ModifyPushConfigRequest {
/// The push configuration for future deliveries.
///
/// An empty `pushConfig` indicates that the Pub/Sub system should stop
/// pushing messages from the given subscription and allow messages to be
/// pulled and acknowledged - effectively pausing the subscription if `Pull`
/// or `StreamingPull` is not called.
///
/// Required.
PushConfig? pushConfig;
ModifyPushConfigRequest();
ModifyPushConfigRequest.fromJson(core.Map _json) {
if (_json.containsKey('pushConfig')) {
pushConfig = PushConfig.fromJson(
_json['pushConfig'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object?> toJson() => {
if (pushConfig != null) 'pushConfig': pushConfig!.toJson(),
};
}
/// Contains information needed for generating an
/// [OpenID Connect token](https://developers.google.com/identity/protocols/OpenIDConnect).
class OidcToken {
/// Audience to be used when generating OIDC token.
///
/// The audience claim identifies the recipients that the JWT is intended for.
/// The audience value is a single case-sensitive string. Having multiple
/// values (array) for the audience field is not supported. More info about
/// the OIDC JWT token audience here:
/// https://tools.ietf.org/html/rfc7519#section-4.1.3 Note: if not specified,
/// the Push endpoint URL will be used.
core.String? audience;
/// [Service account email](https://cloud.google.com/iam/docs/service-accounts)
/// to be used for generating the OIDC token.
///
/// The caller (for CreateSubscription, UpdateSubscription, and
/// ModifyPushConfig RPCs) must have the iam.serviceAccounts.actAs permission
/// for the service account.
core.String? serviceAccountEmail;
OidcToken();
OidcToken.fromJson(core.Map _json) {
if (_json.containsKey('audience')) {
audience = _json['audience'] as core.String;
}
if (_json.containsKey('serviceAccountEmail')) {
serviceAccountEmail = _json['serviceAccountEmail'] as core.String;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (audience != null) 'audience': audience!,
if (serviceAccountEmail != null)
'serviceAccountEmail': serviceAccountEmail!,
};
}
/// An Identity and Access Management (IAM) policy, which specifies access
/// controls for Google Cloud resources.
///
/// A `Policy` is a collection of `bindings`. A `binding` binds one or more
/// `members` to a single `role`. Members can be user accounts, service
/// accounts, Google groups, and domains (such as G Suite). A `role` is a named
/// list of permissions; each `role` can be an IAM predefined role or a
/// user-created custom role. For some types of Google Cloud resources, a
/// `binding` can also specify a `condition`, which is a logical expression that
/// allows access to a resource only if the expression evaluates to `true`. A
/// condition can add constraints based on attributes of the request, the
/// resource, or both. To learn which resources support conditions in their IAM
/// policies, see the
/// [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
/// **JSON example:** { "bindings": \[ { "role":
/// "roles/resourcemanager.organizationAdmin", "members": \[
/// "user:mike@example.com", "group:admins@example.com", "domain:google.com",
/// "serviceAccount:my-project-id@appspot.gserviceaccount.com" \] }, { "role":
/// "roles/resourcemanager.organizationViewer", "members": \[
/// "user:eve@example.com" \], "condition": { "title": "expirable access",
/// "description": "Does not grant access after Sep 2020", "expression":
/// "request.time < timestamp('2020-10-01T00:00:00.000Z')", } } \], "etag":
/// "BwWWja0YfJA=", "version": 3 } **YAML example:** bindings: - members: -
/// user:mike@example.com - group:admins@example.com - domain:google.com -
/// serviceAccount:my-project-id@appspot.gserviceaccount.com role:
/// roles/resourcemanager.organizationAdmin - members: - user:eve@example.com
/// role: roles/resourcemanager.organizationViewer condition: title: expirable
/// access description: Does not grant access after Sep 2020 expression:
/// request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= -
/// version: 3 For a description of IAM and its features, see the
/// [IAM documentation](https://cloud.google.com/iam/docs/).
class Policy {
/// Associates a list of `members` to a `role`.
///
/// Optionally, may specify a `condition` that determines how and when the
/// `bindings` are applied. Each of the `bindings` must contain at least one
/// member.
core.List<Binding>? bindings;
/// `etag` is used for optimistic concurrency control as a way to help prevent
/// simultaneous updates of a policy from overwriting each other.
///
/// It is strongly suggested that systems make use of the `etag` in the
/// read-modify-write cycle to perform policy updates in order to avoid race
/// conditions: An `etag` is returned in the response to `getIamPolicy`, and
/// systems are expected to put that etag in the request to `setIamPolicy` to
/// ensure that their change will be applied to the same version of the
/// policy. **Important:** If you use IAM Conditions, you must include the
/// `etag` field whenever you call `setIamPolicy`. If you omit this field,
/// then IAM allows you to overwrite a version `3` policy with a version `1`
/// policy, and all of the conditions in the version `3` policy are lost.
core.String? etag;
core.List<core.int> get etagAsBytes => convert.base64.decode(etag!);
set etagAsBytes(core.List<core.int> _bytes) {
etag =
convert.base64.encode(_bytes).replaceAll('/', '_').replaceAll('+', '-');
}
/// Specifies the format of the policy.
///
/// Valid values are `0`, `1`, and `3`. Requests that specify an invalid value
/// are rejected. Any operation that affects conditional role bindings must
/// specify version `3`. This requirement applies to the following operations:
/// * Getting a policy that includes a conditional role binding * Adding a
/// conditional role binding to a policy * Changing a conditional role binding
/// in a policy * Removing any role binding, with or without a condition, from
/// a policy that includes conditions **Important:** If you use IAM
/// Conditions, you must include the `etag` field whenever you call
/// `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a
/// version `3` policy with a version `1` policy, and all of the conditions in
/// the version `3` policy are lost. If a policy does not include any
/// conditions, operations on that policy may specify any valid version or
/// leave the field unset. To learn which resources support conditions in
/// their IAM policies, see the
/// [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
core.int? version;
Policy();
Policy.fromJson(core.Map _json) {
if (_json.containsKey('bindings')) {
bindings = (_json['bindings'] as core.List)
.map<Binding>((value) =>
Binding.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('etag')) {
etag = _json['etag'] as core.String;
}
if (_json.containsKey('version')) {
version = _json['version'] as core.int;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (bindings != null)
'bindings': bindings!.map((value) => value.toJson()).toList(),
if (etag != null) 'etag': etag!,
if (version != null) 'version': version!,
};
}
/// Request for the Publish method.
class PublishRequest {
/// The messages to publish.
///
/// Required.
core.List<PubsubMessage>? messages;
PublishRequest();
PublishRequest.fromJson(core.Map _json) {
if (_json.containsKey('messages')) {
messages = (_json['messages'] as core.List)
.map<PubsubMessage>((value) => PubsubMessage.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object?> toJson() => {
if (messages != null)
'messages': messages!.map((value) => value.toJson()).toList(),
};
}
/// Response for the `Publish` method.
class PublishResponse {
/// The server-assigned ID of each published message, in the same order as the
/// messages in the request.
///
/// IDs are guaranteed to be unique within the topic.
core.List<core.String>? messageIds;
PublishResponse();
PublishResponse.fromJson(core.Map _json) {
if (_json.containsKey('messageIds')) {
messageIds = (_json['messageIds'] as core.List)
.map<core.String>((value) => value as core.String)
.toList();
}
}
core.Map<core.String, core.Object?> toJson() => {
if (messageIds != null) 'messageIds': messageIds!,
};
}
/// A message that is published by publishers and consumed by subscribers.
///
/// The message must contain either a non-empty data field or at least one
/// attribute. Note that client libraries represent this object differently
/// depending on the language. See the corresponding
/// [client library documentation](https://cloud.google.com/pubsub/docs/reference/libraries)
/// for more information. See
/// [quotas and limits](https://cloud.google.com/pubsub/quotas) for more
/// information about message limits.
class PubsubMessage {
/// Attributes for this message.
///
/// If this field is empty, the message must contain non-empty data. This can
/// be used to filter messages on the subscription.
core.Map<core.String, core.String>? attributes;
/// The message data field.
///
/// If this field is empty, the message must contain at least one attribute.
core.String? data;
core.List<core.int> get dataAsBytes => convert.base64.decode(data!);
set dataAsBytes(core.List<core.int> _bytes) {
data =
convert.base64.encode(_bytes).replaceAll('/', '_').replaceAll('+', '-');
}
/// ID of this message, assigned by the server when the message is published.
///
/// Guaranteed to be unique within the topic. This value may be read by a
/// subscriber that receives a `PubsubMessage` via a `Pull` call or a push
/// delivery. It must not be populated by the publisher in a `Publish` call.
core.String? messageId;
/// If non-empty, identifies related messages for which publish order should
/// be respected.
///
/// If a `Subscription` has `enable_message_ordering` set to `true`, messages
/// published with the same non-empty `ordering_key` value will be delivered
/// to subscribers in the order in which they are received by the Pub/Sub
/// system. All `PubsubMessage`s published in a given `PublishRequest` must
/// specify the same `ordering_key` value.
core.String? orderingKey;
/// The time at which the message was published, populated by the server when
/// it receives the `Publish` call.
///
/// It must not be populated by the publisher in a `Publish` call.
core.String? publishTime;
PubsubMessage();
PubsubMessage.fromJson(core.Map _json) {
if (_json.containsKey('attributes')) {
attributes = (_json['attributes'] as core.Map)
.cast<core.String, core.String>()
.map(
(key, item) => core.MapEntry(
key,
item as core.String,
),
);
}
if (_json.containsKey('data')) {
data = _json['data'] as core.String;
}
if (_json.containsKey('messageId')) {
messageId = _json['messageId'] as core.String;
}
if (_json.containsKey('orderingKey')) {
orderingKey = _json['orderingKey'] as core.String;
}
if (_json.containsKey('publishTime')) {
publishTime = _json['publishTime'] as core.String;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (attributes != null) 'attributes': attributes!,
if (data != null) 'data': data!,
if (messageId != null) 'messageId': messageId!,
if (orderingKey != null) 'orderingKey': orderingKey!,
if (publishTime != null) 'publishTime': publishTime!,
};
}
/// Request for the `Pull` method.
class PullRequest {
/// The maximum number of messages to return for this request.
///
/// Must be a positive integer. The Pub/Sub system may return fewer than the
/// number specified.
///
/// Required.
core.int? maxMessages;
/// If this field set to true, the system will respond immediately even if it
/// there are no messages available to return in the `Pull` response.
///
/// Otherwise, the system may wait (for a bounded amount of time) until at
/// least one message is available, rather than returning no messages.
/// Warning: setting this field to `true` is discouraged because it adversely
/// impacts the performance of `Pull` operations. We recommend that users do
/// not set this field.
///
/// Optional.
core.bool? returnImmediately;
PullRequest();
PullRequest.fromJson(core.Map _json) {
if (_json.containsKey('maxMessages')) {
maxMessages = _json['maxMessages'] as core.int;
}
if (_json.containsKey('returnImmediately')) {
returnImmediately = _json['returnImmediately'] as core.bool;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (maxMessages != null) 'maxMessages': maxMessages!,
if (returnImmediately != null) 'returnImmediately': returnImmediately!,
};
}
/// Response for the `Pull` method.
class PullResponse {
/// Received Pub/Sub messages.
///
/// The list will be empty if there are no more messages available in the
/// backlog. For JSON, the response can be entirely empty. The Pub/Sub system
/// may return fewer than the `maxMessages` requested even if there are more
/// messages available in the backlog.
core.List<ReceivedMessage>? receivedMessages;
PullResponse();
PullResponse.fromJson(core.Map _json) {
if (_json.containsKey('receivedMessages')) {
receivedMessages = (_json['receivedMessages'] as core.List)
.map<ReceivedMessage>((value) => ReceivedMessage.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object?> toJson() => {
if (receivedMessages != null)
'receivedMessages':
receivedMessages!.map((value) => value.toJson()).toList(),
};
}
/// Configuration for a push delivery endpoint.
class PushConfig {
/// Endpoint configuration attributes that can be used to control different
/// aspects of the message delivery.
///
/// The only currently supported attribute is `x-goog-version`, which you can
/// use to change the format of the pushed message. This attribute indicates
/// the version of the data expected by the endpoint. This controls the shape
/// of the pushed message (i.e., its fields and metadata). If not present
/// during the `CreateSubscription` call, it will default to the version of
/// the Pub/Sub API used to make such call. If not present in a
/// `ModifyPushConfig` call, its value will not be changed. `GetSubscription`
/// calls will always return a valid version, even if the subscription was
/// created without this attribute. The only supported values for the
/// `x-goog-version` attribute are: * `v1beta1`: uses the push format defined
/// in the v1beta1 Pub/Sub API. * `v1` or `v1beta2`: uses the push format
/// defined in the v1 Pub/Sub API. For example: attributes { "x-goog-version":
/// "v1" }
core.Map<core.String, core.String>? attributes;
/// If specified, Pub/Sub will generate and attach an OIDC JWT token as an
/// `Authorization` header in the HTTP request for every pushed message.
OidcToken? oidcToken;
/// A URL locating the endpoint to which messages should be pushed.
///
/// For example, a Webhook endpoint might use `https://example.com/push`.
core.String? pushEndpoint;
PushConfig();
PushConfig.fromJson(core.Map _json) {
if (_json.containsKey('attributes')) {
attributes = (_json['attributes'] as core.Map)
.cast<core.String, core.String>()
.map(
(key, item) => core.MapEntry(
key,
item as core.String,
),
);
}
if (_json.containsKey('oidcToken')) {
oidcToken = OidcToken.fromJson(
_json['oidcToken'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('pushEndpoint')) {
pushEndpoint = _json['pushEndpoint'] as core.String;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (attributes != null) 'attributes': attributes!,
if (oidcToken != null) 'oidcToken': oidcToken!.toJson(),
if (pushEndpoint != null) 'pushEndpoint': pushEndpoint!,
};
}
/// A message and its corresponding acknowledgment ID.
class ReceivedMessage {
/// This ID can be used to acknowledge the received message.
core.String? ackId;
/// The approximate number of times that Cloud Pub/Sub has attempted to
/// deliver the associated message to a subscriber.
///
/// More precisely, this is 1 + (number of NACKs) + (number of ack_deadline
/// exceeds) for this message. A NACK is any call to ModifyAckDeadline with a
/// 0 deadline. An ack_deadline exceeds event is whenever a message is not
/// acknowledged within ack_deadline. Note that ack_deadline is initially
/// Subscription.ackDeadlineSeconds, but may get extended automatically by the
/// client library. Upon the first delivery of a given message,
/// `delivery_attempt` will have a value of 1. The value is calculated at best
/// effort and is approximate. If a DeadLetterPolicy is not set on the
/// subscription, this will be 0.
core.int? deliveryAttempt;
/// The message.
PubsubMessage? message;
ReceivedMessage();
ReceivedMessage.fromJson(core.Map _json) {
if (_json.containsKey('ackId')) {
ackId = _json['ackId'] as core.String;
}
if (_json.containsKey('deliveryAttempt')) {
deliveryAttempt = _json['deliveryAttempt'] as core.int;
}
if (_json.containsKey('message')) {
message = PubsubMessage.fromJson(
_json['message'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object?> toJson() => {
if (ackId != null) 'ackId': ackId!,
if (deliveryAttempt != null) 'deliveryAttempt': deliveryAttempt!,
if (message != null) 'message': message!.toJson(),
};
}
/// A policy that specifies how Cloud Pub/Sub retries message delivery.
///
/// Retry delay will be exponential based on provided minimum and maximum
/// backoffs. https://en.wikipedia.org/wiki/Exponential_backoff. RetryPolicy
/// will be triggered on NACKs or acknowledgement deadline exceeded events for a
/// given message. Retry Policy is implemented on a best effort basis. At times,
/// the delay between consecutive deliveries may not match the configuration.
/// That is, delay can be more or less than configured backoff.
class RetryPolicy {
/// The maximum delay between consecutive deliveries of a given message.
///
/// Value should be between 0 and 600 seconds. Defaults to 600 seconds.
core.String? maximumBackoff;
/// The minimum delay between consecutive deliveries of a given message.
///
/// Value should be between 0 and 600 seconds. Defaults to 10 seconds.
core.String? minimumBackoff;
RetryPolicy();
RetryPolicy.fromJson(core.Map _json) {
if (_json.containsKey('maximumBackoff')) {
maximumBackoff = _json['maximumBackoff'] as core.String;
}
if (_json.containsKey('minimumBackoff')) {
minimumBackoff = _json['minimumBackoff'] as core.String;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (maximumBackoff != null) 'maximumBackoff': maximumBackoff!,
if (minimumBackoff != null) 'minimumBackoff': minimumBackoff!,
};
}
/// A schema resource.
class Schema {
/// The definition of the schema.
///
/// This should contain a string representing the full definition of the
/// schema that is a valid schema definition of the type specified in `type`.
core.String? definition;
/// Name of the schema.
///
/// Format is `projects/{project}/schemas/{schema}`.
///
/// Required.
core.String? name;
/// The type of the schema definition.
/// Possible string values are:
/// - "TYPE_UNSPECIFIED" : Default value. This value is unused.
/// - "PROTOCOL_BUFFER" : A Protocol Buffer schema definition.
/// - "AVRO" : An Avro schema definition.
core.String? type;
Schema();
Schema.fromJson(core.Map _json) {
if (_json.containsKey('definition')) {
definition = _json['definition'] as core.String;
}
if (_json.containsKey('name')) {
name = _json['name'] as core.String;
}
if (_json.containsKey('type')) {
type = _json['type'] as core.String;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (definition != null) 'definition': definition!,
if (name != null) 'name': name!,
if (type != null) 'type': type!,
};
}
/// Settings for validating messages published against a schema.
class SchemaSettings {
/// The encoding of messages validated against `schema`.
/// Possible string values are:
/// - "ENCODING_UNSPECIFIED" : Unspecified
/// - "JSON" : JSON encoding
/// - "BINARY" : Binary encoding, as defined by the schema type. For some
/// schema types, binary encoding may not be available.
core.String? encoding;
/// The name of the schema that messages published should be validated
/// against.
///
/// Format is `projects/{project}/schemas/{schema}`. The value of this field
/// will be `_deleted-schema_` if the schema has been deleted.
///
/// Required.
core.String? schema;
SchemaSettings();
SchemaSettings.fromJson(core.Map _json) {
if (_json.containsKey('encoding')) {
encoding = _json['encoding'] as core.String;
}
if (_json.containsKey('schema')) {
schema = _json['schema'] as core.String;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (encoding != null) 'encoding': encoding!,
if (schema != null) 'schema': schema!,
};
}
/// Request for the `Seek` method.
class SeekRequest {
/// The snapshot to seek to.
///
/// The snapshot's topic must be the same as that of the provided
/// subscription. Format is `projects/{project}/snapshots/{snap}`.
core.String? snapshot;
/// The time to seek to.
///
/// Messages retained in the subscription that were published before this time
/// are marked as acknowledged, and messages retained in the subscription that
/// were published after this time are marked as unacknowledged. Note that
/// this operation affects only those messages retained in the subscription
/// (configured by the combination of `message_retention_duration` and
/// `retain_acked_messages`). For example, if `time` corresponds to a point
/// before the message retention window (or to a point before the system's
/// notion of the subscription creation time), only retained messages will be
/// marked as unacknowledged, and already-expunged messages will not be
/// restored.
core.String? time;
SeekRequest();
SeekRequest.fromJson(core.Map _json) {
if (_json.containsKey('snapshot')) {
snapshot = _json['snapshot'] as core.String;
}
if (_json.containsKey('time')) {
time = _json['time'] as core.String;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (snapshot != null) 'snapshot': snapshot!,
if (time != null) 'time': time!,
};
}
/// Response for the `Seek` method (this response is empty).
class SeekResponse {
SeekResponse();
SeekResponse.fromJson(
// ignore: avoid_unused_constructor_parameters
core.Map _json);
core.Map<core.String, core.Object?> toJson() => {};
}
/// Request message for `SetIamPolicy` method.
class SetIamPolicyRequest {
/// REQUIRED: The complete policy to be applied to the `resource`.
///
/// The size of the policy is limited to a few 10s of KB. An empty policy is a
/// valid policy but certain Cloud Platform services (such as Projects) might
/// reject them.
Policy? policy;
SetIamPolicyRequest();
SetIamPolicyRequest.fromJson(core.Map _json) {
if (_json.containsKey('policy')) {
policy = Policy.fromJson(
_json['policy'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object?> toJson() => {
if (policy != null) 'policy': policy!.toJson(),
};
}
/// A snapshot resource.
///
/// Snapshots are used in
/// [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
/// which allow you to manage message acknowledgments in bulk. That is, you can
/// set the acknowledgment state of messages in an existing subscription to the
/// state captured by a snapshot.
class Snapshot {
/// The snapshot is guaranteed to exist up until this time.
///
/// A newly-created snapshot expires no later than 7 days from the time of its
/// creation. Its exact lifetime is determined at creation by the existing
/// backlog in the source subscription. Specifically, the lifetime of the
/// snapshot is `7 days - (age of oldest unacked message in the
/// subscription)`. For example, consider a subscription whose oldest unacked
/// message is 3 days old. If a snapshot is created from this subscription,
/// the snapshot -- which will always capture this 3-day-old backlog as long
/// as the snapshot exists -- will expire in 4 days. The service will refuse
/// to create a snapshot that would expire in less than 1 hour after creation.
core.String? expireTime;
/// See
/// [Creating and managing labels](https://cloud.google.com/pubsub/docs/labels).
core.Map<core.String, core.String>? labels;
/// The name of the snapshot.
core.String? name;
/// The name of the topic from which this snapshot is retaining messages.
core.String? topic;
Snapshot();
Snapshot.fromJson(core.Map _json) {
if (_json.containsKey('expireTime')) {
expireTime = _json['expireTime'] as core.String;
}
if (_json.containsKey('labels')) {
labels =
(_json['labels'] as core.Map).cast<core.String, core.String>().map(
(key, item) => core.MapEntry(
key,
item as core.String,
),
);
}
if (_json.containsKey('name')) {
name = _json['name'] as core.String;
}
if (_json.containsKey('topic')) {
topic = _json['topic'] as core.String;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (expireTime != null) 'expireTime': expireTime!,
if (labels != null) 'labels': labels!,
if (name != null) 'name': name!,
if (topic != null) 'topic': topic!,
};
}
/// A subscription resource.
class Subscription {
/// The approximate amount of time (on a best-effort basis) Pub/Sub waits for
/// the subscriber to acknowledge receipt before resending the message.
///
/// In the interval after the message is delivered and before it is
/// acknowledged, it is considered to be *outstanding*. During that time
/// period, the message will not be redelivered (on a best-effort basis). For
/// pull subscriptions, this value is used as the initial value for the ack
/// deadline. To override this value for a given message, call
/// `ModifyAckDeadline` with the corresponding `ack_id` if using non-streaming
/// pull or send the `ack_id` in a `StreamingModifyAckDeadlineRequest` if
/// using streaming pull. The minimum custom deadline you can specify is 10
/// seconds. The maximum custom deadline you can specify is 600 seconds (10
/// minutes). If this parameter is 0, a default value of 10 seconds is used.
/// For push delivery, this value is also used to set the request timeout for
/// the call to the push endpoint. If the subscriber never acknowledges the
/// message, the Pub/Sub system will eventually redeliver the message.
core.int? ackDeadlineSeconds;
/// A policy that specifies the conditions for dead lettering messages in this
/// subscription.
///
/// If dead_letter_policy is not set, dead lettering is disabled. The Cloud
/// Pub/Sub service account associated with this subscriptions's parent
/// project (i.e.,
/// service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have
/// permission to Acknowledge() messages on this subscription.
DeadLetterPolicy? deadLetterPolicy;
/// Indicates whether the subscription is detached from its topic.
///
/// Detached subscriptions don't receive messages from their topic and don't
/// retain any backlog. `Pull` and `StreamingPull` requests will return
/// FAILED_PRECONDITION. If the subscription is a push subscription, pushes to
/// the endpoint will not be made.
core.bool? detached;
/// If true, messages published with the same `ordering_key` in
/// `PubsubMessage` will be delivered to the subscribers in the order in which
/// they are received by the Pub/Sub system.
///
/// Otherwise, they may be delivered in any order.
core.bool? enableMessageOrdering;
/// A policy that specifies the conditions for this subscription's expiration.
///
/// A subscription is considered active as long as any connected subscriber is
/// successfully consuming messages from the subscription or is issuing
/// operations on the subscription. If `expiration_policy` is not set, a
/// *default policy* with `ttl` of 31 days will be used. The minimum allowed
/// value for `expiration_policy.ttl` is 1 day.
ExpirationPolicy? expirationPolicy;
/// An expression written in the Pub/Sub
/// [filter language](https://cloud.google.com/pubsub/docs/filtering).
///
/// If non-empty, then only `PubsubMessage`s whose `attributes` field matches
/// the filter are delivered on this subscription. If empty, then no messages
/// are filtered out.
core.String? filter;
/// See Creating and managing labels.
core.Map<core.String, core.String>? labels;
/// How long to retain unacknowledged messages in the subscription's backlog,
/// from the moment a message is published.
///
/// If `retain_acked_messages` is true, then this also configures the
/// retention of acknowledged messages, and thus configures how far back in
/// time a `Seek` can be done. Defaults to 7 days. Cannot be more than 7 days
/// or less than 10 minutes.
core.String? messageRetentionDuration;
/// The name of the subscription.
///
/// It must have the format
/// `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must
/// start with a letter, and contain only letters (`[A-Za-z]`), numbers
/// (`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`),
/// plus (`+`) or percent signs (`%`). It must be between 3 and 255 characters
/// in length, and it must not start with `"goog"`.
///
/// Required.
core.String? name;
/// If push delivery is used with this subscription, this field is used to
/// configure it.
///
/// An empty `pushConfig` signifies that the subscriber will pull and ack
/// messages using API methods.
PushConfig? pushConfig;
/// Indicates whether to retain acknowledged messages.
///
/// If true, then messages are not expunged from the subscription's backlog,
/// even if they are acknowledged, until they fall out of the
/// `message_retention_duration` window. This must be true if you would like
/// to
/// [Seek to a timestamp](https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time).
core.bool? retainAckedMessages;
/// A policy that specifies how Pub/Sub retries message delivery for this
/// subscription.
///
/// If not set, the default retry policy is applied. This generally implies
/// that messages will be retried as soon as possible for healthy subscribers.
/// RetryPolicy will be triggered on NACKs or acknowledgement deadline
/// exceeded events for a given message.
RetryPolicy? retryPolicy;
/// The name of the topic from which this subscription is receiving messages.
///
/// Format is `projects/{project}/topics/{topic}`. The value of this field
/// will be `_deleted-topic_` if the topic has been deleted.
///
/// Required.
core.String? topic;
Subscription();
Subscription.fromJson(core.Map _json) {
if (_json.containsKey('ackDeadlineSeconds')) {
ackDeadlineSeconds = _json['ackDeadlineSeconds'] as core.int;
}
if (_json.containsKey('deadLetterPolicy')) {
deadLetterPolicy = DeadLetterPolicy.fromJson(
_json['deadLetterPolicy'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('detached')) {
detached = _json['detached'] as core.bool;
}
if (_json.containsKey('enableMessageOrdering')) {
enableMessageOrdering = _json['enableMessageOrdering'] as core.bool;
}
if (_json.containsKey('expirationPolicy')) {
expirationPolicy = ExpirationPolicy.fromJson(
_json['expirationPolicy'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('filter')) {
filter = _json['filter'] as core.String;
}
if (_json.containsKey('labels')) {
labels =
(_json['labels'] as core.Map).cast<core.String, core.String>().map(
(key, item) => core.MapEntry(
key,
item as core.String,
),
);
}
if (_json.containsKey('messageRetentionDuration')) {
messageRetentionDuration =
_json['messageRetentionDuration'] as core.String;
}
if (_json.containsKey('name')) {
name = _json['name'] as core.String;
}
if (_json.containsKey('pushConfig')) {
pushConfig = PushConfig.fromJson(
_json['pushConfig'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('retainAckedMessages')) {
retainAckedMessages = _json['retainAckedMessages'] as core.bool;
}
if (_json.containsKey('retryPolicy')) {
retryPolicy = RetryPolicy.fromJson(
_json['retryPolicy'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('topic')) {
topic = _json['topic'] as core.String;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (ackDeadlineSeconds != null)
'ackDeadlineSeconds': ackDeadlineSeconds!,
if (deadLetterPolicy != null)
'deadLetterPolicy': deadLetterPolicy!.toJson(),
if (detached != null) 'detached': detached!,
if (enableMessageOrdering != null)
'enableMessageOrdering': enableMessageOrdering!,
if (expirationPolicy != null)
'expirationPolicy': expirationPolicy!.toJson(),
if (filter != null) 'filter': filter!,
if (labels != null) 'labels': labels!,
if (messageRetentionDuration != null)
'messageRetentionDuration': messageRetentionDuration!,
if (name != null) 'name': name!,
if (pushConfig != null) 'pushConfig': pushConfig!.toJson(),
if (retainAckedMessages != null)
'retainAckedMessages': retainAckedMessages!,
if (retryPolicy != null) 'retryPolicy': retryPolicy!.toJson(),
if (topic != null) 'topic': topic!,
};
}
/// Request message for `TestIamPermissions` method.
class TestIamPermissionsRequest {
/// The set of permissions to check for the `resource`.
///
/// Permissions with wildcards (such as '*' or 'storage.*') are not allowed.
/// For more information see
/// [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).
core.List<core.String>? permissions;
TestIamPermissionsRequest();
TestIamPermissionsRequest.fromJson(core.Map _json) {
if (_json.containsKey('permissions')) {
permissions = (_json['permissions'] as core.List)
.map<core.String>((value) => value as core.String)
.toList();
}
}
core.Map<core.String, core.Object?> toJson() => {
if (permissions != null) 'permissions': permissions!,
};
}
/// Response message for `TestIamPermissions` method.
class TestIamPermissionsResponse {
/// A subset of `TestPermissionsRequest.permissions` that the caller is
/// allowed.
core.List<core.String>? permissions;
TestIamPermissionsResponse();
TestIamPermissionsResponse.fromJson(core.Map _json) {
if (_json.containsKey('permissions')) {
permissions = (_json['permissions'] as core.List)
.map<core.String>((value) => value as core.String)
.toList();
}
}
core.Map<core.String, core.Object?> toJson() => {
if (permissions != null) 'permissions': permissions!,
};
}
/// A topic resource.
class Topic {
/// The resource name of the Cloud KMS CryptoKey to be used to protect access
/// to messages published on this topic.
///
/// The expected format is `projects / * /locations / * /keyRings / *
/// /cryptoKeys / * `.
core.String? kmsKeyName;
/// See
/// [Creating and managing labels](https://cloud.google.com/pubsub/docs/labels).
core.Map<core.String, core.String>? labels;
/// Policy constraining the set of Google Cloud Platform regions where
/// messages published to the topic may be stored.
///
/// If not present, then no constraints are in effect.
MessageStoragePolicy? messageStoragePolicy;
/// The name of the topic.
///
/// It must have the format `"projects/{project}/topics/{topic}"`. `{topic}`
/// must start with a letter, and contain only letters (`[A-Za-z]`), numbers
/// (`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`),
/// plus (`+`) or percent signs (`%`). It must be between 3 and 255 characters
/// in length, and it must not start with `"goog"`.
///
/// Required.
core.String? name;
/// Reserved for future use.
///
/// This field is set only in responses from the server; it is ignored if it
/// is set in any requests.
core.bool? satisfiesPzs;
/// Settings for validating messages published against a schema.
SchemaSettings? schemaSettings;
Topic();
Topic.fromJson(core.Map _json) {
if (_json.containsKey('kmsKeyName')) {
kmsKeyName = _json['kmsKeyName'] as core.String;
}
if (_json.containsKey('labels')) {
labels =
(_json['labels'] as core.Map).cast<core.String, core.String>().map(
(key, item) => core.MapEntry(
key,
item as core.String,
),
);
}
if (_json.containsKey('messageStoragePolicy')) {
messageStoragePolicy = MessageStoragePolicy.fromJson(
_json['messageStoragePolicy'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('name')) {
name = _json['name'] as core.String;
}
if (_json.containsKey('satisfiesPzs')) {
satisfiesPzs = _json['satisfiesPzs'] as core.bool;
}
if (_json.containsKey('schemaSettings')) {
schemaSettings = SchemaSettings.fromJson(
_json['schemaSettings'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object?> toJson() => {
if (kmsKeyName != null) 'kmsKeyName': kmsKeyName!,
if (labels != null) 'labels': labels!,
if (messageStoragePolicy != null)
'messageStoragePolicy': messageStoragePolicy!.toJson(),
if (name != null) 'name': name!,
if (satisfiesPzs != null) 'satisfiesPzs': satisfiesPzs!,
if (schemaSettings != null) 'schemaSettings': schemaSettings!.toJson(),
};
}
/// Request for the UpdateSnapshot method.
class UpdateSnapshotRequest {
/// The updated snapshot object.
///
/// Required.
Snapshot? snapshot;
/// Indicates which fields in the provided snapshot to update.
///
/// Must be specified and non-empty.
///
/// Required.
core.String? updateMask;
UpdateSnapshotRequest();
UpdateSnapshotRequest.fromJson(core.Map _json) {
if (_json.containsKey('snapshot')) {
snapshot = Snapshot.fromJson(
_json['snapshot'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateMask')) {
updateMask = _json['updateMask'] as core.String;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (snapshot != null) 'snapshot': snapshot!.toJson(),
if (updateMask != null) 'updateMask': updateMask!,
};
}
/// Request for the UpdateSubscription method.
class UpdateSubscriptionRequest {
/// The updated subscription object.
///
/// Required.
Subscription? subscription;
/// Indicates which fields in the provided subscription to update.
///
/// Must be specified and non-empty.
///
/// Required.
core.String? updateMask;
UpdateSubscriptionRequest();
UpdateSubscriptionRequest.fromJson(core.Map _json) {
if (_json.containsKey('subscription')) {
subscription = Subscription.fromJson(
_json['subscription'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateMask')) {
updateMask = _json['updateMask'] as core.String;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (subscription != null) 'subscription': subscription!.toJson(),
if (updateMask != null) 'updateMask': updateMask!,
};
}
/// Request for the UpdateTopic method.
class UpdateTopicRequest {
/// The updated topic object.
///
/// Required.
Topic? topic;
/// Indicates which fields in the provided topic to update.
///
/// Must be specified and non-empty. Note that if `update_mask` contains
/// "message_storage_policy" but the `message_storage_policy` is not set in
/// the `topic` provided above, then the updated value is determined by the
/// policy configured at the project or organization level.
///
/// Required.
core.String? updateMask;
UpdateTopicRequest();
UpdateTopicRequest.fromJson(core.Map _json) {
if (_json.containsKey('topic')) {
topic =
Topic.fromJson(_json['topic'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateMask')) {
updateMask = _json['updateMask'] as core.String;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (topic != null) 'topic': topic!.toJson(),
if (updateMask != null) 'updateMask': updateMask!,
};
}
/// Request for the `ValidateMessage` method.
class ValidateMessageRequest {
/// The encoding expected for messages
/// Possible string values are:
/// - "ENCODING_UNSPECIFIED" : Unspecified
/// - "JSON" : JSON encoding
/// - "BINARY" : Binary encoding, as defined by the schema type. For some
/// schema types, binary encoding may not be available.
core.String? encoding;
/// Message to validate against the provided `schema_spec`.
core.String? message;
core.List<core.int> get messageAsBytes => convert.base64.decode(message!);
set messageAsBytes(core.List<core.int> _bytes) {
message =
convert.base64.encode(_bytes).replaceAll('/', '_').replaceAll('+', '-');
}
/// Name of the schema against which to validate.
///
/// Format is `projects/{project}/schemas/{schema}`.
core.String? name;
/// Ad-hoc schema against which to validate
Schema? schema;
ValidateMessageRequest();
ValidateMessageRequest.fromJson(core.Map _json) {
if (_json.containsKey('encoding')) {
encoding = _json['encoding'] as core.String;
}
if (_json.containsKey('message')) {
message = _json['message'] as core.String;
}
if (_json.containsKey('name')) {
name = _json['name'] as core.String;
}
if (_json.containsKey('schema')) {
schema = Schema.fromJson(
_json['schema'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object?> toJson() => {
if (encoding != null) 'encoding': encoding!,
if (message != null) 'message': message!,
if (name != null) 'name': name!,
if (schema != null) 'schema': schema!.toJson(),
};
}
/// Response for the `ValidateMessage` method.
///
/// Empty for now.
class ValidateMessageResponse {
ValidateMessageResponse();
ValidateMessageResponse.fromJson(
// ignore: avoid_unused_constructor_parameters
core.Map _json);
core.Map<core.String, core.Object?> toJson() => {};
}
/// Request for the `ValidateSchema` method.
class ValidateSchemaRequest {
/// The schema object to validate.
///
/// Required.
Schema? schema;
ValidateSchemaRequest();
ValidateSchemaRequest.fromJson(core.Map _json) {
if (_json.containsKey('schema')) {
schema = Schema.fromJson(
_json['schema'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object?> toJson() => {
if (schema != null) 'schema': schema!.toJson(),
};
}
/// Response for the `ValidateSchema` method.
///
/// Empty for now.
class ValidateSchemaResponse {
ValidateSchemaResponse();
ValidateSchemaResponse.fromJson(
// ignore: avoid_unused_constructor_parameters
core.Map _json);
core.Map<core.String, core.Object?> toJson() => {};
}