blob: 0bf4a632b72ae76f5964cd431457a6f56fff4c21 [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
/// Pub/Sub Lite API - v1
///
/// For more information, see <https://cloud.google.com/pubsub/lite/docs>
///
/// Create an instance of [PubsubLiteApi] to access these resources:
///
/// - [AdminResource]
/// - [AdminProjectsResource]
/// - [AdminProjectsLocationsResource]
/// - [AdminProjectsLocationsSubscriptionsResource]
/// - [AdminProjectsLocationsTopicsResource]
/// - [AdminProjectsLocationsTopicsSubscriptionsResource]
/// - [CursorResource]
/// - [CursorProjectsResource]
/// - [CursorProjectsLocationsResource]
/// - [CursorProjectsLocationsSubscriptionsResource]
/// - [CursorProjectsLocationsSubscriptionsCursorsResource]
/// - [TopicStatsResource]
/// - [TopicStatsProjectsResource]
/// - [TopicStatsProjectsLocationsResource]
/// - [TopicStatsProjectsLocationsTopicsResource]
library pubsublite.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;
class PubsubLiteApi {
/// View and manage your data across Google Cloud Platform services
static const cloudPlatformScope =
'https://www.googleapis.com/auth/cloud-platform';
final commons.ApiRequester _requester;
AdminResource get admin => AdminResource(_requester);
CursorResource get cursor => CursorResource(_requester);
TopicStatsResource get topicStats => TopicStatsResource(_requester);
PubsubLiteApi(http.Client client,
{core.String rootUrl = 'https://pubsublite.googleapis.com/',
core.String servicePath = ''})
: _requester =
commons.ApiRequester(client, rootUrl, servicePath, userAgent);
}
class AdminResource {
final commons.ApiRequester _requester;
AdminProjectsResource get projects => AdminProjectsResource(_requester);
AdminResource(commons.ApiRequester client) : _requester = client;
}
class AdminProjectsResource {
final commons.ApiRequester _requester;
AdminProjectsLocationsResource get locations =>
AdminProjectsLocationsResource(_requester);
AdminProjectsResource(commons.ApiRequester client) : _requester = client;
}
class AdminProjectsLocationsResource {
final commons.ApiRequester _requester;
AdminProjectsLocationsSubscriptionsResource get subscriptions =>
AdminProjectsLocationsSubscriptionsResource(_requester);
AdminProjectsLocationsTopicsResource get topics =>
AdminProjectsLocationsTopicsResource(_requester);
AdminProjectsLocationsResource(commons.ApiRequester client)
: _requester = client;
}
class AdminProjectsLocationsSubscriptionsResource {
final commons.ApiRequester _requester;
AdminProjectsLocationsSubscriptionsResource(commons.ApiRequester client)
: _requester = client;
/// Creates a new subscription.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [parent] - Required. The parent location in which to create the
/// subscription. Structured like
/// `projects/{project_number}/locations/{location}`.
/// Value must have pattern `^projects/\[^/\]+/locations/\[^/\]+$`.
///
/// [subscriptionId] - Required. The ID to use for the subscription, which
/// will become the final component of the subscription's name. This value is
/// structured like: `my-sub-name`.
///
/// [$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 parent, {
core.String? subscriptionId,
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if (subscriptionId != null) 'subscriptionId': [subscriptionId],
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/admin/' +
commons.Escaper.ecapeVariableReserved('$parent') +
'/subscriptions';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return Subscription.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Deletes the specified subscription.
///
/// Request parameters:
///
/// [name] - Required. The name of the subscription to delete.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/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 name, {
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/admin/' + commons.Escaper.ecapeVariableReserved('$name');
final _response = await _requester.request(
_url,
'DELETE',
queryParams: _queryParams,
);
return Empty.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Returns the subscription configuration.
///
/// Request parameters:
///
/// [name] - Required. The name of the subscription whose configuration to
/// return.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/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 name, {
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/admin/' + commons.Escaper.ecapeVariableReserved('$name');
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return Subscription.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Returns the list of subscriptions for the given project.
///
/// Request parameters:
///
/// [parent] - Required. The parent whose subscriptions are to be listed.
/// Structured like `projects/{project_number}/locations/{location}`.
/// Value must have pattern `^projects/\[^/\]+/locations/\[^/\]+$`.
///
/// [pageSize] - The maximum number of subscriptions to return. The service
/// may return fewer than this value. If unset or zero, all subscriptions for
/// the parent will be returned.
///
/// [pageToken] - A page token, received from a previous `ListSubscriptions`
/// call. Provide this to retrieve the subsequent page. When paginating, all
/// other parameters provided to `ListSubscriptions` must match the call that
/// provided the page token.
///
/// [$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 parent, {
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/admin/' +
commons.Escaper.ecapeVariableReserved('$parent') +
'/subscriptions';
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return ListSubscriptionsResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Updates properties of the specified subscription.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - The name of the subscription. Structured like:
/// projects/{project_number}/locations/{location}/subscriptions/{subscription_id}
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/subscriptions/\[^/\]+$`.
///
/// [updateMask] - Required. A mask specifying the subscription fields to
/// change.
///
/// [$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(
Subscription request,
core.String name, {
core.String? updateMask,
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if (updateMask != null) 'updateMask': [updateMask],
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/admin/' + 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>);
}
}
class AdminProjectsLocationsTopicsResource {
final commons.ApiRequester _requester;
AdminProjectsLocationsTopicsSubscriptionsResource get subscriptions =>
AdminProjectsLocationsTopicsSubscriptionsResource(_requester);
AdminProjectsLocationsTopicsResource(commons.ApiRequester client)
: _requester = client;
/// Creates a new topic.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [parent] - Required. The parent location in which to create the topic.
/// Structured like `projects/{project_number}/locations/{location}`.
/// Value must have pattern `^projects/\[^/\]+/locations/\[^/\]+$`.
///
/// [topicId] - Required. The ID to use for the topic, which will become the
/// final component of the topic's name. This value is structured like:
/// `my-topic-name`.
///
/// [$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 parent, {
core.String? topicId,
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if (topicId != null) 'topicId': [topicId],
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/admin/' +
commons.Escaper.ecapeVariableReserved('$parent') +
'/topics';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return Topic.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Deletes the specified topic.
///
/// Request parameters:
///
/// [name] - Required. The name of the topic to delete.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/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 name, {
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/admin/' + commons.Escaper.ecapeVariableReserved('$name');
final _response = await _requester.request(
_url,
'DELETE',
queryParams: _queryParams,
);
return Empty.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Returns the topic configuration.
///
/// Request parameters:
///
/// [name] - Required. The name of the topic whose configuration to return.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/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 name, {
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/admin/' + commons.Escaper.ecapeVariableReserved('$name');
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return Topic.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Returns the partition information for the requested topic.
///
/// Request parameters:
///
/// [name] - Required. The topic whose partition information to return.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/topics/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [TopicPartitions].
///
/// 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<TopicPartitions> getPartitions(
core.String name, {
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/admin/' +
commons.Escaper.ecapeVariableReserved('$name') +
'/partitions';
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return TopicPartitions.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Returns the list of topics for the given project.
///
/// Request parameters:
///
/// [parent] - Required. The parent whose topics are to be listed. Structured
/// like `projects/{project_number}/locations/{location}`.
/// Value must have pattern `^projects/\[^/\]+/locations/\[^/\]+$`.
///
/// [pageSize] - The maximum number of topics to return. The service may
/// return fewer than this value. If unset or zero, all topics for the parent
/// will be returned.
///
/// [pageToken] - A page token, received from a previous `ListTopics` call.
/// Provide this to retrieve the subsequent page. When paginating, all other
/// parameters provided to `ListTopics` must match the call that provided the
/// page token.
///
/// [$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 parent, {
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/admin/' +
commons.Escaper.ecapeVariableReserved('$parent') +
'/topics';
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return ListTopicsResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Updates properties of the specified topic.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - The name of the topic. Structured like:
/// projects/{project_number}/locations/{location}/topics/{topic_id}
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/topics/\[^/\]+$`.
///
/// [updateMask] - Required. A mask specifying the topic fields to change.
///
/// [$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(
Topic request,
core.String name, {
core.String? updateMask,
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if (updateMask != null) 'updateMask': [updateMask],
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/admin/' + 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>);
}
}
class AdminProjectsLocationsTopicsSubscriptionsResource {
final commons.ApiRequester _requester;
AdminProjectsLocationsTopicsSubscriptionsResource(commons.ApiRequester client)
: _requester = client;
/// Lists the subscriptions attached to the specified topic.
///
/// Request parameters:
///
/// [name] - Required. The name of the topic whose subscriptions to list.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/topics/\[^/\]+$`.
///
/// [pageSize] - The maximum number of subscriptions to return. The service
/// may return fewer than this value. If unset or zero, all subscriptions for
/// the given topic will be returned.
///
/// [pageToken] - A page token, received from a previous
/// `ListTopicSubscriptions` call. Provide this to retrieve the subsequent
/// page. When paginating, all other parameters provided to
/// `ListTopicSubscriptions` must match the call that provided the page token.
///
/// [$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 name, {
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/admin/' +
commons.Escaper.ecapeVariableReserved('$name') +
'/subscriptions';
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return ListTopicSubscriptionsResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
}
class CursorResource {
final commons.ApiRequester _requester;
CursorProjectsResource get projects => CursorProjectsResource(_requester);
CursorResource(commons.ApiRequester client) : _requester = client;
}
class CursorProjectsResource {
final commons.ApiRequester _requester;
CursorProjectsLocationsResource get locations =>
CursorProjectsLocationsResource(_requester);
CursorProjectsResource(commons.ApiRequester client) : _requester = client;
}
class CursorProjectsLocationsResource {
final commons.ApiRequester _requester;
CursorProjectsLocationsSubscriptionsResource get subscriptions =>
CursorProjectsLocationsSubscriptionsResource(_requester);
CursorProjectsLocationsResource(commons.ApiRequester client)
: _requester = client;
}
class CursorProjectsLocationsSubscriptionsResource {
final commons.ApiRequester _requester;
CursorProjectsLocationsSubscriptionsCursorsResource get cursors =>
CursorProjectsLocationsSubscriptionsCursorsResource(_requester);
CursorProjectsLocationsSubscriptionsResource(commons.ApiRequester client)
: _requester = client;
}
class CursorProjectsLocationsSubscriptionsCursorsResource {
final commons.ApiRequester _requester;
CursorProjectsLocationsSubscriptionsCursorsResource(
commons.ApiRequester client)
: _requester = client;
/// Returns all committed cursor information for a subscription.
///
/// Request parameters:
///
/// [parent] - Required. The subscription for which to retrieve cursors.
/// Structured like
/// `projects/{project_number}/locations/{location}/subscriptions/{subscription_id}`.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/subscriptions/\[^/\]+$`.
///
/// [pageSize] - The maximum number of cursors to return. The service may
/// return fewer than this value. If unset or zero, all cursors for the parent
/// will be returned.
///
/// [pageToken] - A page token, received from a previous
/// `ListPartitionCursors` call. Provide this to retrieve the subsequent page.
/// When paginating, all other parameters provided to `ListPartitionCursors`
/// must match the call that provided the page token.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ListPartitionCursorsResponse].
///
/// 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<ListPartitionCursorsResponse> list(
core.String parent, {
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/cursor/' +
commons.Escaper.ecapeVariableReserved('$parent') +
'/cursors';
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return ListPartitionCursorsResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
}
class TopicStatsResource {
final commons.ApiRequester _requester;
TopicStatsProjectsResource get projects =>
TopicStatsProjectsResource(_requester);
TopicStatsResource(commons.ApiRequester client) : _requester = client;
}
class TopicStatsProjectsResource {
final commons.ApiRequester _requester;
TopicStatsProjectsLocationsResource get locations =>
TopicStatsProjectsLocationsResource(_requester);
TopicStatsProjectsResource(commons.ApiRequester client) : _requester = client;
}
class TopicStatsProjectsLocationsResource {
final commons.ApiRequester _requester;
TopicStatsProjectsLocationsTopicsResource get topics =>
TopicStatsProjectsLocationsTopicsResource(_requester);
TopicStatsProjectsLocationsResource(commons.ApiRequester client)
: _requester = client;
}
class TopicStatsProjectsLocationsTopicsResource {
final commons.ApiRequester _requester;
TopicStatsProjectsLocationsTopicsResource(commons.ApiRequester client)
: _requester = client;
/// Compute the head cursor for the partition.
///
/// The head cursor’s offset is guaranteed to be before or equal to all
/// messages which have not yet been acknowledged to be published, and greater
/// than the offset of any message whose publish has already been
/// acknowledged. It is 0 if there have never been messages on the partition.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [topic] - Required. The topic for which we should compute the head cursor.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/topics/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ComputeHeadCursorResponse].
///
/// 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<ComputeHeadCursorResponse> computeHeadCursor(
ComputeHeadCursorRequest 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/topicStats/' +
commons.Escaper.ecapeVariableReserved('$topic') +
':computeHeadCursor';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return ComputeHeadCursorResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Compute statistics about a range of messages in a given topic and
/// partition.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [topic] - Required. The topic for which we should compute message stats.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/topics/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ComputeMessageStatsResponse].
///
/// 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<ComputeMessageStatsResponse> computeMessageStats(
ComputeMessageStatsRequest 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/topicStats/' +
commons.Escaper.ecapeVariableReserved('$topic') +
':computeMessageStats';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return ComputeMessageStatsResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
}
/// The throughput capacity configuration for each partition.
class Capacity {
/// Publish throughput capacity per partition in MiB/s.
///
/// Must be >= 4 and <= 16.
core.int? publishMibPerSec;
/// Subscribe throughput capacity per partition in MiB/s.
///
/// Must be >= 4 and <= 32.
core.int? subscribeMibPerSec;
Capacity();
Capacity.fromJson(core.Map _json) {
if (_json.containsKey('publishMibPerSec')) {
publishMibPerSec = _json['publishMibPerSec'] as core.int;
}
if (_json.containsKey('subscribeMibPerSec')) {
subscribeMibPerSec = _json['subscribeMibPerSec'] as core.int;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (publishMibPerSec != null) 'publishMibPerSec': publishMibPerSec!,
if (subscribeMibPerSec != null)
'subscribeMibPerSec': subscribeMibPerSec!,
};
}
/// Compute the current head cursor for a partition.
class ComputeHeadCursorRequest {
/// The partition for which we should compute the head cursor.
///
/// Required.
core.String? partition;
ComputeHeadCursorRequest();
ComputeHeadCursorRequest.fromJson(core.Map _json) {
if (_json.containsKey('partition')) {
partition = _json['partition'] as core.String;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (partition != null) 'partition': partition!,
};
}
/// Response containing the head cursor for the requested topic and partition.
class ComputeHeadCursorResponse {
/// The head cursor.
Cursor? headCursor;
ComputeHeadCursorResponse();
ComputeHeadCursorResponse.fromJson(core.Map _json) {
if (_json.containsKey('headCursor')) {
headCursor = Cursor.fromJson(
_json['headCursor'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object?> toJson() => {
if (headCursor != null) 'headCursor': headCursor!.toJson(),
};
}
/// Compute statistics about a range of messages in a given topic and partition.
class ComputeMessageStatsRequest {
/// The exclusive end of the range.
///
/// The range is empty if end_cursor <= start_cursor. Specifying a
/// start_cursor before the first message and an end_cursor after the last
/// message will retrieve all messages.
Cursor? endCursor;
/// The partition for which we should compute message stats.
///
/// Required.
core.String? partition;
/// The inclusive start of the range.
Cursor? startCursor;
ComputeMessageStatsRequest();
ComputeMessageStatsRequest.fromJson(core.Map _json) {
if (_json.containsKey('endCursor')) {
endCursor = Cursor.fromJson(
_json['endCursor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('partition')) {
partition = _json['partition'] as core.String;
}
if (_json.containsKey('startCursor')) {
startCursor = Cursor.fromJson(
_json['startCursor'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object?> toJson() => {
if (endCursor != null) 'endCursor': endCursor!.toJson(),
if (partition != null) 'partition': partition!,
if (startCursor != null) 'startCursor': startCursor!.toJson(),
};
}
/// Response containing stats for messages in the requested topic and partition.
class ComputeMessageStatsResponse {
/// The number of quota bytes accounted to these messages.
core.String? messageBytes;
/// The count of messages.
core.String? messageCount;
/// The minimum event timestamp across these messages.
///
/// For the purposes of this computation, if a message does not have an event
/// time, we use the publish time. The timestamp will be unset if there are no
/// messages.
core.String? minimumEventTime;
/// The minimum publish timestamp across these messages.
///
/// Note that publish timestamps within a partition are not guaranteed to be
/// non-decreasing. The timestamp will be unset if there are no messages.
core.String? minimumPublishTime;
ComputeMessageStatsResponse();
ComputeMessageStatsResponse.fromJson(core.Map _json) {
if (_json.containsKey('messageBytes')) {
messageBytes = _json['messageBytes'] as core.String;
}
if (_json.containsKey('messageCount')) {
messageCount = _json['messageCount'] as core.String;
}
if (_json.containsKey('minimumEventTime')) {
minimumEventTime = _json['minimumEventTime'] as core.String;
}
if (_json.containsKey('minimumPublishTime')) {
minimumPublishTime = _json['minimumPublishTime'] as core.String;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (messageBytes != null) 'messageBytes': messageBytes!,
if (messageCount != null) 'messageCount': messageCount!,
if (minimumEventTime != null) 'minimumEventTime': minimumEventTime!,
if (minimumPublishTime != null)
'minimumPublishTime': minimumPublishTime!,
};
}
/// A cursor that describes the position of a message within a topic partition.
class Cursor {
/// The offset of a message within a topic partition.
///
/// Must be greater than or equal 0.
core.String? offset;
Cursor();
Cursor.fromJson(core.Map _json) {
if (_json.containsKey('offset')) {
offset = _json['offset'] as core.String;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (offset != null) 'offset': offset!,
};
}
/// The settings for a subscription's message delivery.
class DeliveryConfig {
/// The DeliveryRequirement for this subscription.
/// Possible string values are:
/// - "DELIVERY_REQUIREMENT_UNSPECIFIED" : Default value. This value is
/// unused.
/// - "DELIVER_IMMEDIATELY" : The server does not wait for a published message
/// to be successfully written to storage before delivering it to subscribers.
/// - "DELIVER_AFTER_STORED" : The server will not deliver a published message
/// to subscribers until the message has been successfully written to storage.
/// This will result in higher end-to-end latency, but consistent delivery.
core.String? deliveryRequirement;
DeliveryConfig();
DeliveryConfig.fromJson(core.Map _json) {
if (_json.containsKey('deliveryRequirement')) {
deliveryRequirement = _json['deliveryRequirement'] as core.String;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (deliveryRequirement != null)
'deliveryRequirement': deliveryRequirement!,
};
}
/// 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() => {};
}
/// Response for ListPartitionCursors
class ListPartitionCursorsResponse {
/// A token, which can be sent as `page_token` to retrieve the next page.
///
/// If this field is omitted, there are no subsequent pages.
core.String? nextPageToken;
/// The partition cursors from this request.
core.List<PartitionCursor>? partitionCursors;
ListPartitionCursorsResponse();
ListPartitionCursorsResponse.fromJson(core.Map _json) {
if (_json.containsKey('nextPageToken')) {
nextPageToken = _json['nextPageToken'] as core.String;
}
if (_json.containsKey('partitionCursors')) {
partitionCursors = (_json['partitionCursors'] as core.List)
.map<PartitionCursor>((value) => PartitionCursor.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object?> toJson() => {
if (nextPageToken != null) 'nextPageToken': nextPageToken!,
if (partitionCursors != null)
'partitionCursors':
partitionCursors!.map((value) => value.toJson()).toList(),
};
}
/// Response for ListSubscriptions.
class ListSubscriptionsResponse {
/// A token that can be sent as `page_token` to retrieve the next page of
/// results.
///
/// If this field is omitted, there are no more results.
core.String? nextPageToken;
/// The list of subscriptions in the requested parent.
///
/// The order of the subscriptions is unspecified.
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 ListTopicSubscriptions.
class ListTopicSubscriptionsResponse {
/// A token that can be sent as `page_token` to retrieve the next page of
/// results.
///
/// If this field is omitted, there are no more results.
core.String? nextPageToken;
/// The names of subscriptions attached to the topic.
///
/// The order of the subscriptions is unspecified.
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 ListTopics.
class ListTopicsResponse {
/// A token that can be sent as `page_token` to retrieve the next page of
/// results.
///
/// If this field is omitted, there are no more results.
core.String? nextPageToken;
/// The list of topic in the requested parent.
///
/// The order of the topics is unspecified.
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(),
};
}
/// The settings for a topic's partitions.
class PartitionConfig {
/// The capacity configuration.
Capacity? capacity;
/// The number of partitions in the topic.
///
/// Must be at least 1.
core.String? count;
/// DEPRECATED: Use capacity instead which can express a superset of
/// configurations.
///
/// Every partition in the topic is allocated throughput equivalent to `scale`
/// times the standard partition throughput (4 MiB/s). This is also reflected
/// in the cost of this topic; a topic with `scale` of 2 and count of 10 is
/// charged for 20 partitions. This value must be in the range \[1,4\].
core.int? scale;
PartitionConfig();
PartitionConfig.fromJson(core.Map _json) {
if (_json.containsKey('capacity')) {
capacity = Capacity.fromJson(
_json['capacity'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('count')) {
count = _json['count'] as core.String;
}
if (_json.containsKey('scale')) {
scale = _json['scale'] as core.int;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (capacity != null) 'capacity': capacity!.toJson(),
if (count != null) 'count': count!,
if (scale != null) 'scale': scale!,
};
}
/// A pair of a Cursor and the partition it is for.
class PartitionCursor {
/// The value of the cursor.
Cursor? cursor;
/// The partition this is for.
core.String? partition;
PartitionCursor();
PartitionCursor.fromJson(core.Map _json) {
if (_json.containsKey('cursor')) {
cursor = Cursor.fromJson(
_json['cursor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('partition')) {
partition = _json['partition'] as core.String;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (cursor != null) 'cursor': cursor!.toJson(),
if (partition != null) 'partition': partition!,
};
}
/// The settings for a topic's message retention.
class RetentionConfig {
/// The provisioned storage, in bytes, per partition.
///
/// If the number of bytes stored in any of the topic's partitions grows
/// beyond this value, older messages will be dropped to make room for newer
/// ones, regardless of the value of `period`.
core.String? perPartitionBytes;
/// How long a published message is retained.
///
/// If unset, messages will be retained as long as the bytes retained for each
/// partition is below `per_partition_bytes`.
core.String? period;
RetentionConfig();
RetentionConfig.fromJson(core.Map _json) {
if (_json.containsKey('perPartitionBytes')) {
perPartitionBytes = _json['perPartitionBytes'] as core.String;
}
if (_json.containsKey('period')) {
period = _json['period'] as core.String;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (perPartitionBytes != null) 'perPartitionBytes': perPartitionBytes!,
if (period != null) 'period': period!,
};
}
/// Metadata about a subscription resource.
class Subscription {
/// The settings for this subscription's message delivery.
DeliveryConfig? deliveryConfig;
/// The name of the subscription.
///
/// Structured like:
/// projects/{project_number}/locations/{location}/subscriptions/{subscription_id}
core.String? name;
/// The name of the topic this subscription is attached to.
///
/// Structured like:
/// projects/{project_number}/locations/{location}/topics/{topic_id}
core.String? topic;
Subscription();
Subscription.fromJson(core.Map _json) {
if (_json.containsKey('deliveryConfig')) {
deliveryConfig = DeliveryConfig.fromJson(
_json['deliveryConfig'] as core.Map<core.String, core.dynamic>);
}
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 (deliveryConfig != null) 'deliveryConfig': deliveryConfig!.toJson(),
if (name != null) 'name': name!,
if (topic != null) 'topic': topic!,
};
}
/// Metadata about a topic resource.
class Topic {
/// The name of the topic.
///
/// Structured like:
/// projects/{project_number}/locations/{location}/topics/{topic_id}
core.String? name;
/// The settings for this topic's partitions.
PartitionConfig? partitionConfig;
/// The settings for this topic's message retention.
RetentionConfig? retentionConfig;
Topic();
Topic.fromJson(core.Map _json) {
if (_json.containsKey('name')) {
name = _json['name'] as core.String;
}
if (_json.containsKey('partitionConfig')) {
partitionConfig = PartitionConfig.fromJson(
_json['partitionConfig'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('retentionConfig')) {
retentionConfig = RetentionConfig.fromJson(
_json['retentionConfig'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object?> toJson() => {
if (name != null) 'name': name!,
if (partitionConfig != null)
'partitionConfig': partitionConfig!.toJson(),
if (retentionConfig != null)
'retentionConfig': retentionConfig!.toJson(),
};
}
/// Response for GetTopicPartitions.
class TopicPartitions {
/// The number of partitions in the topic.
core.String? partitionCount;
TopicPartitions();
TopicPartitions.fromJson(core.Map _json) {
if (_json.containsKey('partitionCount')) {
partitionCount = _json['partitionCount'] as core.String;
}
}
core.Map<core.String, core.Object?> toJson() => {
if (partitionCount != null) 'partitionCount': partitionCount!,
};
}