blob: 5642d12582292d9d9d9c626871c29db872fcc0b3 [file]
// 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_lambdas
// ignore_for_file: unnecessary_string_interpolations
/// Cloud TPU API - v1
///
/// TPU API provides customers with access to Google TPU technology.
///
/// For more information, see <https://cloud.google.com/tpu/>
///
/// Create an instance of [TPUApi] to access these resources:
///
/// - [ProjectsResource]
/// - [ProjectsLocationsResource]
/// - [ProjectsLocationsAcceleratorTypesResource]
/// - [ProjectsLocationsNodesResource]
/// - [ProjectsLocationsOperationsResource]
/// - [ProjectsLocationsTensorflowVersionsResource]
library tpu.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;
/// TPU API provides customers with access to Google TPU technology.
class TPUApi {
/// View and manage your data across Google Cloud Platform services
static const cloudPlatformScope =
'https://www.googleapis.com/auth/cloud-platform';
final commons.ApiRequester _requester;
ProjectsResource get projects => ProjectsResource(_requester);
TPUApi(http.Client client,
{core.String rootUrl = 'https://tpu.googleapis.com/',
core.String servicePath = ''})
: _requester =
commons.ApiRequester(client, rootUrl, servicePath, requestHeaders);
}
class ProjectsResource {
final commons.ApiRequester _requester;
ProjectsLocationsResource get locations =>
ProjectsLocationsResource(_requester);
ProjectsResource(commons.ApiRequester client) : _requester = client;
}
class ProjectsLocationsResource {
final commons.ApiRequester _requester;
ProjectsLocationsAcceleratorTypesResource get acceleratorTypes =>
ProjectsLocationsAcceleratorTypesResource(_requester);
ProjectsLocationsNodesResource get nodes =>
ProjectsLocationsNodesResource(_requester);
ProjectsLocationsOperationsResource get operations =>
ProjectsLocationsOperationsResource(_requester);
ProjectsLocationsTensorflowVersionsResource get tensorflowVersions =>
ProjectsLocationsTensorflowVersionsResource(_requester);
ProjectsLocationsResource(commons.ApiRequester client) : _requester = client;
/// Gets information about a location.
///
/// Request parameters:
///
/// [name] - Resource name for the location.
/// Value must have pattern `^projects/\[^/\]+/locations/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Location].
///
/// 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<Location> get(
core.String name, {
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + core.Uri.encodeFull('$name');
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return Location.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Lists information about the supported locations for this service.
///
/// Request parameters:
///
/// [name] - The resource that owns the locations collection, if applicable.
/// Value must have pattern `^projects/\[^/\]+$`.
///
/// [filter] - The standard list filter.
///
/// [pageSize] - The standard list page size.
///
/// [pageToken] - The standard list page token.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ListLocationsResponse].
///
/// 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<ListLocationsResponse> list(
core.String name, {
core.String? filter,
core.int? pageSize,
core.String? pageToken,
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if (filter != null) 'filter': [filter],
if (pageSize != null) 'pageSize': ['${pageSize}'],
if (pageToken != null) 'pageToken': [pageToken],
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + core.Uri.encodeFull('$name') + '/locations';
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return ListLocationsResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
}
class ProjectsLocationsAcceleratorTypesResource {
final commons.ApiRequester _requester;
ProjectsLocationsAcceleratorTypesResource(commons.ApiRequester client)
: _requester = client;
/// Gets AcceleratorType.
///
/// Request parameters:
///
/// [name] - Required. The resource name.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/acceleratorTypes/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [AcceleratorType].
///
/// 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<AcceleratorType> get(
core.String name, {
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + core.Uri.encodeFull('$name');
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return AcceleratorType.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Lists accelerator types supported by this API.
///
/// Request parameters:
///
/// [parent] - Required. The parent resource name.
/// Value must have pattern `^projects/\[^/\]+/locations/\[^/\]+$`.
///
/// [filter] - List filter.
///
/// [orderBy] - Sort results.
///
/// [pageSize] - The maximum number of items to return.
///
/// [pageToken] - The next_page_token value returned from a previous List
/// request, if any.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ListAcceleratorTypesResponse].
///
/// 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<ListAcceleratorTypesResponse> list(
core.String parent, {
core.String? filter,
core.String? orderBy,
core.int? pageSize,
core.String? pageToken,
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if (filter != null) 'filter': [filter],
if (orderBy != null) 'orderBy': [orderBy],
if (pageSize != null) 'pageSize': ['${pageSize}'],
if (pageToken != null) 'pageToken': [pageToken],
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + core.Uri.encodeFull('$parent') + '/acceleratorTypes';
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return ListAcceleratorTypesResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
}
class ProjectsLocationsNodesResource {
final commons.ApiRequester _requester;
ProjectsLocationsNodesResource(commons.ApiRequester client)
: _requester = client;
/// Creates a node.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [parent] - Required. The parent resource name.
/// Value must have pattern `^projects/\[^/\]+/locations/\[^/\]+$`.
///
/// [nodeId] - The unqualified resource name.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Operation].
///
/// 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<Operation> create(
Node request,
core.String parent, {
core.String? nodeId,
core.String? $fields,
}) async {
final _body = convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{
if (nodeId != null) 'nodeId': [nodeId],
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + core.Uri.encodeFull('$parent') + '/nodes';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return Operation.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Deletes a node.
///
/// Request parameters:
///
/// [name] - Required. The resource name.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/nodes/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Operation].
///
/// 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<Operation> delete(
core.String name, {
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + core.Uri.encodeFull('$name');
final _response = await _requester.request(
_url,
'DELETE',
queryParams: _queryParams,
);
return Operation.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Gets the details of a node.
///
/// Request parameters:
///
/// [name] - Required. The resource name.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/nodes/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Node].
///
/// 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<Node> get(
core.String name, {
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + core.Uri.encodeFull('$name');
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return Node.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Lists nodes.
///
/// Request parameters:
///
/// [parent] - Required. The parent resource name.
/// Value must have pattern `^projects/\[^/\]+/locations/\[^/\]+$`.
///
/// [pageSize] - The maximum number of items to return.
///
/// [pageToken] - The next_page_token value returned from a previous List
/// request, if any.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ListNodesResponse].
///
/// 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<ListNodesResponse> 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/' + core.Uri.encodeFull('$parent') + '/nodes';
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return ListNodesResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Reimages a node's OS.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - The resource name.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/nodes/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Operation].
///
/// 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<Operation> reimage(
ReimageNodeRequest 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/' + core.Uri.encodeFull('$name') + ':reimage';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return Operation.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Starts a node.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - The resource name.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/nodes/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Operation].
///
/// 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<Operation> start(
StartNodeRequest 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/' + core.Uri.encodeFull('$name') + ':start';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return Operation.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Stops a node.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - The resource name.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/nodes/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Operation].
///
/// 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<Operation> stop(
StopNodeRequest 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/' + core.Uri.encodeFull('$name') + ':stop';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return Operation.fromJson(_response as core.Map<core.String, core.dynamic>);
}
}
class ProjectsLocationsOperationsResource {
final commons.ApiRequester _requester;
ProjectsLocationsOperationsResource(commons.ApiRequester client)
: _requester = client;
/// Starts asynchronous cancellation on a long-running operation.
///
/// The server makes a best effort to cancel the operation, but success is not
/// guaranteed. If the server doesn't support this method, it returns
/// `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation
/// or other methods to check whether the cancellation succeeded or whether
/// the operation completed despite cancellation. On successful cancellation,
/// the operation is not deleted; instead, it becomes an operation with an
/// Operation.error value with a google.rpc.Status.code of 1, corresponding to
/// `Code.CANCELLED`.
///
/// Request parameters:
///
/// [name] - The name of the operation resource to be cancelled.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/operations/\[^/\]+$`.
///
/// [$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> cancel(
core.String name, {
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + core.Uri.encodeFull('$name') + ':cancel';
final _response = await _requester.request(
_url,
'POST',
queryParams: _queryParams,
);
return Empty.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Deletes a long-running operation.
///
/// This method indicates that the client is no longer interested in the
/// operation result. It does not cancel the operation. If the server doesn't
/// support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.
///
/// Request parameters:
///
/// [name] - The name of the operation resource to be deleted.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/operations/\[^/\]+$`.
///
/// [$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/' + core.Uri.encodeFull('$name');
final _response = await _requester.request(
_url,
'DELETE',
queryParams: _queryParams,
);
return Empty.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Gets the latest state of a long-running operation.
///
/// Clients can use this method to poll the operation result at intervals as
/// recommended by the API service.
///
/// Request parameters:
///
/// [name] - The name of the operation resource.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/operations/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Operation].
///
/// 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<Operation> get(
core.String name, {
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + core.Uri.encodeFull('$name');
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return Operation.fromJson(_response as core.Map<core.String, core.dynamic>);
}
/// Lists operations that match the specified filter in the request.
///
/// If the server doesn't support this method, it returns `UNIMPLEMENTED`.
/// NOTE: the `name` binding allows API services to override the binding to
/// use different resource name schemes, such as `users / * /operations`. To
/// override the binding, API services can add a binding such as
/// `"/v1/{name=users / * }/operations"` to their service configuration. For
/// backwards compatibility, the default name includes the operations
/// collection id, however overriding users must ensure the name binding is
/// the parent resource, without the operations collection id.
///
/// Request parameters:
///
/// [name] - The name of the operation's parent resource.
/// Value must have pattern `^projects/\[^/\]+/locations/\[^/\]+$`.
///
/// [filter] - The standard list filter.
///
/// [pageSize] - The standard list page size.
///
/// [pageToken] - The standard list page token.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ListOperationsResponse].
///
/// 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<ListOperationsResponse> list(
core.String name, {
core.String? filter,
core.int? pageSize,
core.String? pageToken,
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if (filter != null) 'filter': [filter],
if (pageSize != null) 'pageSize': ['${pageSize}'],
if (pageToken != null) 'pageToken': [pageToken],
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + core.Uri.encodeFull('$name') + '/operations';
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return ListOperationsResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
}
class ProjectsLocationsTensorflowVersionsResource {
final commons.ApiRequester _requester;
ProjectsLocationsTensorflowVersionsResource(commons.ApiRequester client)
: _requester = client;
/// Gets TensorFlow Version.
///
/// Request parameters:
///
/// [name] - Required. The resource name.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/tensorflowVersions/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [TensorFlowVersion].
///
/// 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<TensorFlowVersion> get(
core.String name, {
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + core.Uri.encodeFull('$name');
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return TensorFlowVersion.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// List TensorFlow versions supported by this API.
///
/// Request parameters:
///
/// [parent] - Required. The parent resource name.
/// Value must have pattern `^projects/\[^/\]+/locations/\[^/\]+$`.
///
/// [filter] - List filter.
///
/// [orderBy] - Sort results.
///
/// [pageSize] - The maximum number of items to return.
///
/// [pageToken] - The next_page_token value returned from a previous List
/// request, if any.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ListTensorFlowVersionsResponse].
///
/// 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<ListTensorFlowVersionsResponse> list(
core.String parent, {
core.String? filter,
core.String? orderBy,
core.int? pageSize,
core.String? pageToken,
core.String? $fields,
}) async {
final _queryParams = <core.String, core.List<core.String>>{
if (filter != null) 'filter': [filter],
if (orderBy != null) 'orderBy': [orderBy],
if (pageSize != null) 'pageSize': ['${pageSize}'],
if (pageToken != null) 'pageToken': [pageToken],
if ($fields != null) 'fields': [$fields],
};
final _url = 'v1/' + core.Uri.encodeFull('$parent') + '/tensorflowVersions';
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return ListTensorFlowVersionsResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
}
/// A accelerator type that a Node can be configured with.
class AcceleratorType {
/// The resource name.
core.String? name;
/// the accelerator type.
core.String? type;
AcceleratorType();
AcceleratorType.fromJson(core.Map _json) {
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.dynamic> toJson() => {
if (name != null) 'name': name!,
if (type != null) 'type': type!,
};
}
/// 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.dynamic> toJson() => {};
}
/// Response for ListAcceleratorTypes.
class ListAcceleratorTypesResponse {
/// The listed nodes.
core.List<AcceleratorType>? acceleratorTypes;
/// The next page token or empty if none.
core.String? nextPageToken;
/// Locations that could not be reached.
core.List<core.String>? unreachable;
ListAcceleratorTypesResponse();
ListAcceleratorTypesResponse.fromJson(core.Map _json) {
if (_json.containsKey('acceleratorTypes')) {
acceleratorTypes = (_json['acceleratorTypes'] as core.List)
.map<AcceleratorType>((value) => AcceleratorType.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('nextPageToken')) {
nextPageToken = _json['nextPageToken'] as core.String;
}
if (_json.containsKey('unreachable')) {
unreachable = (_json['unreachable'] as core.List)
.map<core.String>((value) => value as core.String)
.toList();
}
}
core.Map<core.String, core.dynamic> toJson() => {
if (acceleratorTypes != null)
'acceleratorTypes':
acceleratorTypes!.map((value) => value.toJson()).toList(),
if (nextPageToken != null) 'nextPageToken': nextPageToken!,
if (unreachable != null) 'unreachable': unreachable!,
};
}
/// The response message for Locations.ListLocations.
class ListLocationsResponse {
/// A list of locations that matches the specified filter in the request.
core.List<Location>? locations;
/// The standard List next-page token.
core.String? nextPageToken;
ListLocationsResponse();
ListLocationsResponse.fromJson(core.Map _json) {
if (_json.containsKey('locations')) {
locations = (_json['locations'] as core.List)
.map<Location>((value) =>
Location.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('nextPageToken')) {
nextPageToken = _json['nextPageToken'] as core.String;
}
}
core.Map<core.String, core.dynamic> toJson() => {
if (locations != null)
'locations': locations!.map((value) => value.toJson()).toList(),
if (nextPageToken != null) 'nextPageToken': nextPageToken!,
};
}
/// Response for ListNodes.
class ListNodesResponse {
/// The next page token or empty if none.
core.String? nextPageToken;
/// The listed nodes.
core.List<Node>? nodes;
/// Locations that could not be reached.
core.List<core.String>? unreachable;
ListNodesResponse();
ListNodesResponse.fromJson(core.Map _json) {
if (_json.containsKey('nextPageToken')) {
nextPageToken = _json['nextPageToken'] as core.String;
}
if (_json.containsKey('nodes')) {
nodes = (_json['nodes'] as core.List)
.map<Node>((value) =>
Node.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('unreachable')) {
unreachable = (_json['unreachable'] as core.List)
.map<core.String>((value) => value as core.String)
.toList();
}
}
core.Map<core.String, core.dynamic> toJson() => {
if (nextPageToken != null) 'nextPageToken': nextPageToken!,
if (nodes != null)
'nodes': nodes!.map((value) => value.toJson()).toList(),
if (unreachable != null) 'unreachable': unreachable!,
};
}
/// The response message for Operations.ListOperations.
class ListOperationsResponse {
/// The standard List next-page token.
core.String? nextPageToken;
/// A list of operations that matches the specified filter in the request.
core.List<Operation>? operations;
ListOperationsResponse();
ListOperationsResponse.fromJson(core.Map _json) {
if (_json.containsKey('nextPageToken')) {
nextPageToken = _json['nextPageToken'] as core.String;
}
if (_json.containsKey('operations')) {
operations = (_json['operations'] as core.List)
.map<Operation>((value) =>
Operation.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.dynamic> toJson() => {
if (nextPageToken != null) 'nextPageToken': nextPageToken!,
if (operations != null)
'operations': operations!.map((value) => value.toJson()).toList(),
};
}
/// Response for ListTensorFlowVersions.
class ListTensorFlowVersionsResponse {
/// The next page token or empty if none.
core.String? nextPageToken;
/// The listed nodes.
core.List<TensorFlowVersion>? tensorflowVersions;
/// Locations that could not be reached.
core.List<core.String>? unreachable;
ListTensorFlowVersionsResponse();
ListTensorFlowVersionsResponse.fromJson(core.Map _json) {
if (_json.containsKey('nextPageToken')) {
nextPageToken = _json['nextPageToken'] as core.String;
}
if (_json.containsKey('tensorflowVersions')) {
tensorflowVersions = (_json['tensorflowVersions'] as core.List)
.map<TensorFlowVersion>((value) => TensorFlowVersion.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('unreachable')) {
unreachable = (_json['unreachable'] as core.List)
.map<core.String>((value) => value as core.String)
.toList();
}
}
core.Map<core.String, core.dynamic> toJson() => {
if (nextPageToken != null) 'nextPageToken': nextPageToken!,
if (tensorflowVersions != null)
'tensorflowVersions':
tensorflowVersions!.map((value) => value.toJson()).toList(),
if (unreachable != null) 'unreachable': unreachable!,
};
}
/// A resource that represents Google Cloud Platform location.
class Location {
/// The friendly name for this location, typically a nearby city name.
///
/// For example, "Tokyo".
core.String? displayName;
/// Cross-service attributes for the location.
///
/// For example {"cloud.googleapis.com/region": "us-east1"}
core.Map<core.String, core.String>? labels;
/// The canonical id for this location.
///
/// For example: `"us-east1"`.
core.String? locationId;
/// Service-specific metadata.
///
/// For example the available capacity at the given location.
///
/// The values for Object must be JSON objects. It can consist of `num`,
/// `String`, `bool` and `null` as well as `Map` and `List` values.
core.Map<core.String, core.Object>? metadata;
/// Resource name for the location, which may vary between implementations.
///
/// For example: `"projects/example-project/locations/us-east1"`
core.String? name;
Location();
Location.fromJson(core.Map _json) {
if (_json.containsKey('displayName')) {
displayName = _json['displayName'] as core.String;
}
if (_json.containsKey('labels')) {
labels = (_json['labels'] as core.Map<core.String, core.dynamic>).map(
(key, item) => core.MapEntry(
key,
item as core.String,
),
);
}
if (_json.containsKey('locationId')) {
locationId = _json['locationId'] as core.String;
}
if (_json.containsKey('metadata')) {
metadata = (_json['metadata'] as core.Map<core.String, core.dynamic>).map(
(key, item) => core.MapEntry(
key,
item as core.Object,
),
);
}
if (_json.containsKey('name')) {
name = _json['name'] as core.String;
}
}
core.Map<core.String, core.dynamic> toJson() => {
if (displayName != null) 'displayName': displayName!,
if (labels != null) 'labels': labels!,
if (locationId != null) 'locationId': locationId!,
if (metadata != null) 'metadata': metadata!,
if (name != null) 'name': name!,
};
}
/// A network endpoint over which a TPU worker can be reached.
class NetworkEndpoint {
/// The IP address of this network endpoint.
core.String? ipAddress;
/// The port of this network endpoint.
core.int? port;
NetworkEndpoint();
NetworkEndpoint.fromJson(core.Map _json) {
if (_json.containsKey('ipAddress')) {
ipAddress = _json['ipAddress'] as core.String;
}
if (_json.containsKey('port')) {
port = _json['port'] as core.int;
}
}
core.Map<core.String, core.dynamic> toJson() => {
if (ipAddress != null) 'ipAddress': ipAddress!,
if (port != null) 'port': port!,
};
}
/// A TPU instance.
class Node {
/// The type of hardware accelerators associated with this node.
///
/// Required.
core.String? acceleratorType;
/// The CIDR block that the TPU node will use when selecting an IP address.
///
/// This CIDR block must be a /29 block; the Compute Engine networks API
/// forbids a smaller block, and using a larger block would be wasteful (a
/// node can only consume one IP address). Errors will occur if the CIDR block
/// has already been used for a currently existing TPU node, the CIDR block
/// conflicts with any subnetworks in the user's provided network, or the
/// provided network is peered with another network that is using that CIDR
/// block.
core.String? cidrBlock;
/// The time when the node was created.
///
/// Output only.
core.String? createTime;
/// The user-supplied description of the TPU.
///
/// Maximum of 512 characters.
core.String? description;
/// The health status of the TPU node.
/// Possible string values are:
/// - "HEALTH_UNSPECIFIED" : Health status is unknown: not initialized or
/// failed to retrieve.
/// - "HEALTHY" : The resource is healthy.
/// - "DEPRECATED_UNHEALTHY" : The resource is unhealthy.
/// - "TIMEOUT" : The resource is unresponsive.
/// - "UNHEALTHY_TENSORFLOW" : The in-guest ML stack is unhealthy.
/// - "UNHEALTHY_MAINTENANCE" : The node is under maintenance/priority boost
/// caused rescheduling and will resume running once rescheduled.
core.String? health;
/// If this field is populated, it contains a description of why the TPU Node
/// is unhealthy.
///
/// Output only.
core.String? healthDescription;
/// DEPRECATED! Use network_endpoints instead.
///
/// The network address for the TPU Node as visible to Compute Engine
/// instances.
///
/// Output only.
core.String? ipAddress;
/// Resource labels to represent user-provided metadata.
core.Map<core.String, core.String>? labels;
/// The name of the TPU
///
/// Output only. Immutable.
core.String? name;
/// The name of a network they wish to peer the TPU node to.
///
/// It must be a preexisting Compute Engine network inside of the project on
/// which this API has been activated. If none is provided, "default" will be
/// used.
core.String? network;
/// The network endpoints where TPU workers can be accessed and sent work.
///
/// It is recommended that Tensorflow clients of the node reach out to the 0th
/// entry in this map first.
///
/// Output only.
core.List<NetworkEndpoint>? networkEndpoints;
/// DEPRECATED! Use network_endpoints instead.
///
/// The network port for the TPU Node as visible to Compute Engine instances.
///
/// Output only.
core.String? port;
/// The scheduling options for this node.
SchedulingConfig? schedulingConfig;
/// The service account used to run the tensor flow services within the node.
///
/// To share resources, including Google Cloud Storage data, with the
/// Tensorflow job running in the Node, this account must have permissions to
/// that data.
///
/// Output only.
core.String? serviceAccount;
/// The current state for the TPU Node.
///
/// Output only.
/// Possible string values are:
/// - "STATE_UNSPECIFIED" : TPU node state is not known/set.
/// - "CREATING" : TPU node is being created.
/// - "READY" : TPU node has been created and is fully usable.
/// - "RESTARTING" : TPU node is restarting.
/// - "REIMAGING" : TPU node is undergoing reimaging.
/// - "DELETING" : TPU node is being deleted.
/// - "REPAIRING" : TPU node is being repaired and may be unusable. Details
/// can be found in the `help_description` field.
/// - "STOPPED" : TPU node is stopped.
/// - "STOPPING" : TPU node is currently stopping.
/// - "STARTING" : TPU node is currently starting.
/// - "PREEMPTED" : TPU node has been preempted. Only applies to Preemptible
/// TPU Nodes.
/// - "TERMINATED" : TPU node has been terminated due to maintenance or has
/// reached the end of its life cycle (for preemptible nodes).
/// - "HIDING" : TPU node is currently hiding.
/// - "HIDDEN" : TPU node has been hidden.
/// - "UNHIDING" : TPU node is currently unhiding.
core.String? state;
/// The Symptoms that have occurred to the TPU Node.
///
/// Output only.
core.List<Symptom>? symptoms;
/// The version of Tensorflow running in the Node.
///
/// Required.
core.String? tensorflowVersion;
/// Whether the VPC peering for the node is set up through Service Networking
/// API.
///
/// The VPC Peering should be set up before provisioning the node. If this
/// field is set, cidr_block field should not be specified. If the network,
/// that you want to peer the TPU Node to, is Shared VPC networks, the node
/// must be created with this this field enabled.
core.bool? useServiceNetworking;
Node();
Node.fromJson(core.Map _json) {
if (_json.containsKey('acceleratorType')) {
acceleratorType = _json['acceleratorType'] as core.String;
}
if (_json.containsKey('cidrBlock')) {
cidrBlock = _json['cidrBlock'] as core.String;
}
if (_json.containsKey('createTime')) {
createTime = _json['createTime'] as core.String;
}
if (_json.containsKey('description')) {
description = _json['description'] as core.String;
}
if (_json.containsKey('health')) {
health = _json['health'] as core.String;
}
if (_json.containsKey('healthDescription')) {
healthDescription = _json['healthDescription'] as core.String;
}
if (_json.containsKey('ipAddress')) {
ipAddress = _json['ipAddress'] as core.String;
}
if (_json.containsKey('labels')) {
labels = (_json['labels'] as core.Map<core.String, core.dynamic>).map(
(key, item) => core.MapEntry(
key,
item as core.String,
),
);
}
if (_json.containsKey('name')) {
name = _json['name'] as core.String;
}
if (_json.containsKey('network')) {
network = _json['network'] as core.String;
}
if (_json.containsKey('networkEndpoints')) {
networkEndpoints = (_json['networkEndpoints'] as core.List)
.map<NetworkEndpoint>((value) => NetworkEndpoint.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('port')) {
port = _json['port'] as core.String;
}
if (_json.containsKey('schedulingConfig')) {
schedulingConfig = SchedulingConfig.fromJson(
_json['schedulingConfig'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('serviceAccount')) {
serviceAccount = _json['serviceAccount'] as core.String;
}
if (_json.containsKey('state')) {
state = _json['state'] as core.String;
}
if (_json.containsKey('symptoms')) {
symptoms = (_json['symptoms'] as core.List)
.map<Symptom>((value) =>
Symptom.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('tensorflowVersion')) {
tensorflowVersion = _json['tensorflowVersion'] as core.String;
}
if (_json.containsKey('useServiceNetworking')) {
useServiceNetworking = _json['useServiceNetworking'] as core.bool;
}
}
core.Map<core.String, core.dynamic> toJson() => {
if (acceleratorType != null) 'acceleratorType': acceleratorType!,
if (cidrBlock != null) 'cidrBlock': cidrBlock!,
if (createTime != null) 'createTime': createTime!,
if (description != null) 'description': description!,
if (health != null) 'health': health!,
if (healthDescription != null) 'healthDescription': healthDescription!,
if (ipAddress != null) 'ipAddress': ipAddress!,
if (labels != null) 'labels': labels!,
if (name != null) 'name': name!,
if (network != null) 'network': network!,
if (networkEndpoints != null)
'networkEndpoints':
networkEndpoints!.map((value) => value.toJson()).toList(),
if (port != null) 'port': port!,
if (schedulingConfig != null)
'schedulingConfig': schedulingConfig!.toJson(),
if (serviceAccount != null) 'serviceAccount': serviceAccount!,
if (state != null) 'state': state!,
if (symptoms != null)
'symptoms': symptoms!.map((value) => value.toJson()).toList(),
if (tensorflowVersion != null) 'tensorflowVersion': tensorflowVersion!,
if (useServiceNetworking != null)
'useServiceNetworking': useServiceNetworking!,
};
}
/// This resource represents a long-running operation that is the result of a
/// network API call.
class Operation {
/// If the value is `false`, it means the operation is still in progress.
///
/// If `true`, the operation is completed, and either `error` or `response` is
/// available.
core.bool? done;
/// The error result of the operation in case of failure or cancellation.
Status? error;
/// Service-specific metadata associated with the operation.
///
/// It typically contains progress information and common metadata such as
/// create time. Some services might not provide such metadata. Any method
/// that returns a long-running operation should document the metadata type,
/// if any.
///
/// The values for Object must be JSON objects. It can consist of `num`,
/// `String`, `bool` and `null` as well as `Map` and `List` values.
core.Map<core.String, core.Object>? metadata;
/// The server-assigned name, which is only unique within the same service
/// that originally returns it.
///
/// If you use the default HTTP mapping, the `name` should be a resource name
/// ending with `operations/{unique_id}`.
core.String? name;
/// The normal response of the operation in case of success.
///
/// If the original method returns no data on success, such as `Delete`, the
/// response is `google.protobuf.Empty`. If the original method is standard
/// `Get`/`Create`/`Update`, the response should be the resource. For other
/// methods, the response should have the type `XxxResponse`, where `Xxx` is
/// the original method name. For example, if the original method name is
/// `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
///
/// The values for Object must be JSON objects. It can consist of `num`,
/// `String`, `bool` and `null` as well as `Map` and `List` values.
core.Map<core.String, core.Object>? response;
Operation();
Operation.fromJson(core.Map _json) {
if (_json.containsKey('done')) {
done = _json['done'] as core.bool;
}
if (_json.containsKey('error')) {
error = Status.fromJson(
_json['error'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('metadata')) {
metadata = (_json['metadata'] as core.Map<core.String, core.dynamic>).map(
(key, item) => core.MapEntry(
key,
item as core.Object,
),
);
}
if (_json.containsKey('name')) {
name = _json['name'] as core.String;
}
if (_json.containsKey('response')) {
response = (_json['response'] as core.Map<core.String, core.dynamic>).map(
(key, item) => core.MapEntry(
key,
item as core.Object,
),
);
}
}
core.Map<core.String, core.dynamic> toJson() => {
if (done != null) 'done': done!,
if (error != null) 'error': error!.toJson(),
if (metadata != null) 'metadata': metadata!,
if (name != null) 'name': name!,
if (response != null) 'response': response!,
};
}
/// Represents the metadata of the long-running operation.
class OperationMetadata {
/// API version used to start the operation.
///
/// Output only.
core.String? apiVersion;
/// Identifies whether the user has requested cancellation of the operation.
///
/// Operations that have successfully been cancelled have Operation.error
/// value with a google.rpc.Status.code of 1, corresponding to
/// `Code.CANCELLED`.
///
/// Output only.
core.bool? cancelRequested;
/// The time the operation was created.
///
/// Output only.
core.String? createTime;
/// The time the operation finished running.
///
/// Output only.
core.String? endTime;
/// Human-readable status of the operation, if any.
///
/// Output only.
core.String? statusDetail;
/// Server-defined resource path for the target of the operation.
///
/// Output only.
core.String? target;
/// Name of the verb executed by the operation.
///
/// Output only.
core.String? verb;
OperationMetadata();
OperationMetadata.fromJson(core.Map _json) {
if (_json.containsKey('apiVersion')) {
apiVersion = _json['apiVersion'] as core.String;
}
if (_json.containsKey('cancelRequested')) {
cancelRequested = _json['cancelRequested'] as core.bool;
}
if (_json.containsKey('createTime')) {
createTime = _json['createTime'] as core.String;
}
if (_json.containsKey('endTime')) {
endTime = _json['endTime'] as core.String;
}
if (_json.containsKey('statusDetail')) {
statusDetail = _json['statusDetail'] as core.String;
}
if (_json.containsKey('target')) {
target = _json['target'] as core.String;
}
if (_json.containsKey('verb')) {
verb = _json['verb'] as core.String;
}
}
core.Map<core.String, core.dynamic> toJson() => {
if (apiVersion != null) 'apiVersion': apiVersion!,
if (cancelRequested != null) 'cancelRequested': cancelRequested!,
if (createTime != null) 'createTime': createTime!,
if (endTime != null) 'endTime': endTime!,
if (statusDetail != null) 'statusDetail': statusDetail!,
if (target != null) 'target': target!,
if (verb != null) 'verb': verb!,
};
}
/// Request for ReimageNode.
class ReimageNodeRequest {
/// The version for reimage to create.
core.String? tensorflowVersion;
ReimageNodeRequest();
ReimageNodeRequest.fromJson(core.Map _json) {
if (_json.containsKey('tensorflowVersion')) {
tensorflowVersion = _json['tensorflowVersion'] as core.String;
}
}
core.Map<core.String, core.dynamic> toJson() => {
if (tensorflowVersion != null) 'tensorflowVersion': tensorflowVersion!,
};
}
/// Sets the scheduling options for this node.
class SchedulingConfig {
/// Defines whether the node is preemptible.
core.bool? preemptible;
/// Whether the node is created under a reservation.
core.bool? reserved;
SchedulingConfig();
SchedulingConfig.fromJson(core.Map _json) {
if (_json.containsKey('preemptible')) {
preemptible = _json['preemptible'] as core.bool;
}
if (_json.containsKey('reserved')) {
reserved = _json['reserved'] as core.bool;
}
}
core.Map<core.String, core.dynamic> toJson() => {
if (preemptible != null) 'preemptible': preemptible!,
if (reserved != null) 'reserved': reserved!,
};
}
/// Request for StartNode.
class StartNodeRequest {
StartNodeRequest();
StartNodeRequest.fromJson(
// ignore: avoid_unused_constructor_parameters
core.Map _json);
core.Map<core.String, core.dynamic> toJson() => {};
}
/// The `Status` type defines a logical error model that is suitable for
/// different programming environments, including REST APIs and RPC APIs.
///
/// It is used by [gRPC](https://github.com/grpc). Each `Status` message
/// contains three pieces of data: error code, error message, and error details.
/// You can find out more about this error model and how to work with it in the
/// [API Design Guide](https://cloud.google.com/apis/design/errors).
class Status {
/// The status code, which should be an enum value of google.rpc.Code.
core.int? code;
/// A list of messages that carry the error details.
///
/// There is a common set of message types for APIs to use.
///
/// The values for Object must be JSON objects. It can consist of `num`,
/// `String`, `bool` and `null` as well as `Map` and `List` values.
core.List<core.Map<core.String, core.Object>>? details;
/// A developer-facing error message, which should be in English.
///
/// Any user-facing error message should be localized and sent in the
/// google.rpc.Status.details field, or localized by the client.
core.String? message;
Status();
Status.fromJson(core.Map _json) {
if (_json.containsKey('code')) {
code = _json['code'] as core.int;
}
if (_json.containsKey('details')) {
details = (_json['details'] as core.List)
.map<core.Map<core.String, core.Object>>(
(value) => (value as core.Map<core.String, core.dynamic>).map(
(key, item) => core.MapEntry(
key,
item as core.Object,
),
))
.toList();
}
if (_json.containsKey('message')) {
message = _json['message'] as core.String;
}
}
core.Map<core.String, core.dynamic> toJson() => {
if (code != null) 'code': code!,
if (details != null) 'details': details!,
if (message != null) 'message': message!,
};
}
/// Request for StopNode.
class StopNodeRequest {
StopNodeRequest();
StopNodeRequest.fromJson(
// ignore: avoid_unused_constructor_parameters
core.Map _json);
core.Map<core.String, core.dynamic> toJson() => {};
}
/// A Symptom instance.
class Symptom {
/// Timestamp when the Symptom is created.
core.String? createTime;
/// Detailed information of the current Symptom.
core.String? details;
/// Type of the Symptom.
/// Possible string values are:
/// - "SYMPTOM_TYPE_UNSPECIFIED" : Unspecified symptom.
/// - "LOW_MEMORY" : TPU VM memory is low.
/// - "OUT_OF_MEMORY" : TPU runtime is out of memory.
/// - "EXECUTE_TIMED_OUT" : TPU runtime execution has timed out.
/// - "MESH_BUILD_FAIL" : TPU runtime fails to construct a mesh that
/// recognizes each TPU device's neighbors.
/// - "HBM_OUT_OF_MEMORY" : TPU HBM is out of memory.
core.String? symptomType;
/// A string used to uniquely distinguish a worker within a TPU node.
core.String? workerId;
Symptom();
Symptom.fromJson(core.Map _json) {
if (_json.containsKey('createTime')) {
createTime = _json['createTime'] as core.String;
}
if (_json.containsKey('details')) {
details = _json['details'] as core.String;
}
if (_json.containsKey('symptomType')) {
symptomType = _json['symptomType'] as core.String;
}
if (_json.containsKey('workerId')) {
workerId = _json['workerId'] as core.String;
}
}
core.Map<core.String, core.dynamic> toJson() => {
if (createTime != null) 'createTime': createTime!,
if (details != null) 'details': details!,
if (symptomType != null) 'symptomType': symptomType!,
if (workerId != null) 'workerId': workerId!,
};
}
/// A tensorflow version that a Node can be configured with.
class TensorFlowVersion {
/// The resource name.
core.String? name;
/// the tensorflow version.
core.String? version;
TensorFlowVersion();
TensorFlowVersion.fromJson(core.Map _json) {
if (_json.containsKey('name')) {
name = _json['name'] as core.String;
}
if (_json.containsKey('version')) {
version = _json['version'] as core.String;
}
}
core.Map<core.String, core.dynamic> toJson() => {
if (name != null) 'name': name!,
if (version != null) 'version': version!,
};
}