// Copyright 2022 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Code generated by aliasgen. DO NOT EDIT.

// Package tables aliases all exported identifiers in package
// "cloud.google.com/go/area120/tables/apiv1alpha1/tablespb".
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb.
// Please read https://github.com/googleapis/google-cloud-go/blob/main/migration.md
// for more details.
package tables

import (
	src "cloud.google.com/go/area120/tables/apiv1alpha1/tablespb"
	grpc "google.golang.org/grpc"
)

// Deprecated: Please use consts in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
const (
	View_COLUMN_ID_VIEW   = src.View_COLUMN_ID_VIEW
	View_VIEW_UNSPECIFIED = src.View_VIEW_UNSPECIFIED
)

// Deprecated: Please use vars in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
var (
	File_google_area120_tables_v1alpha1_tables_proto = src.File_google_area120_tables_v1alpha1_tables_proto
	View_name                                        = src.View_name
	View_value                                       = src.View_value
)

// Request message for TablesService.BatchCreateRows.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type BatchCreateRowsRequest = src.BatchCreateRowsRequest

// Response message for TablesService.BatchCreateRows.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type BatchCreateRowsResponse = src.BatchCreateRowsResponse

// Request message for TablesService.BatchDeleteRows
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type BatchDeleteRowsRequest = src.BatchDeleteRowsRequest

// Request message for TablesService.BatchUpdateRows.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type BatchUpdateRowsRequest = src.BatchUpdateRowsRequest

// Response message for TablesService.BatchUpdateRows.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type BatchUpdateRowsResponse = src.BatchUpdateRowsResponse

// Details on a column in the table.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type ColumnDescription = src.ColumnDescription

// Request message for TablesService.CreateRow.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type CreateRowRequest = src.CreateRowRequest

// Request message for TablesService.DeleteRow
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type DeleteRowRequest = src.DeleteRowRequest

// Request message for TablesService.GetRow.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type GetRowRequest = src.GetRowRequest

// Request message for TablesService.GetTable.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type GetTableRequest = src.GetTableRequest

// Request message for TablesService.GetWorkspace.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type GetWorkspaceRequest = src.GetWorkspaceRequest

// A single item in a labeled column.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type LabeledItem = src.LabeledItem

// Request message for TablesService.ListRows.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type ListRowsRequest = src.ListRowsRequest

// Response message for TablesService.ListRows.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type ListRowsResponse = src.ListRowsResponse

// Request message for TablesService.ListTables.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type ListTablesRequest = src.ListTablesRequest

// Response message for TablesService.ListTables.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type ListTablesResponse = src.ListTablesResponse

// Request message for TablesService.ListWorkspaces.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type ListWorkspacesRequest = src.ListWorkspacesRequest

// Response message for TablesService.ListWorkspaces.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type ListWorkspacesResponse = src.ListWorkspacesResponse

// Details about a lookup column whose value comes from the associated
// relationship.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type LookupDetails = src.LookupDetails

// Details about a relationship column.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type RelationshipDetails = src.RelationshipDetails

// A single row in a table.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type Row = src.Row

// A single table.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type Table = src.Table

// TablesServiceClient is the client API for TablesService service. For
// semantics around ctx use and closing/ending streaming RPCs, please refer to
// https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type TablesServiceClient = src.TablesServiceClient

// TablesServiceServer is the server API for TablesService service.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type TablesServiceServer = src.TablesServiceServer

// UnimplementedTablesServiceServer can be embedded to have forward compatible
// implementations.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type UnimplementedTablesServiceServer = src.UnimplementedTablesServiceServer

// Request message for TablesService.UpdateRow.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type UpdateRowRequest = src.UpdateRowRequest

// Column identifier used for the values in the row.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type View = src.View

// A single workspace.
//
// Deprecated: Please use types in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
type Workspace = src.Workspace

// Deprecated: Please use funcs in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
func NewTablesServiceClient(cc grpc.ClientConnInterface) TablesServiceClient {
	return src.NewTablesServiceClient(cc)
}

// Deprecated: Please use funcs in: cloud.google.com/go/area120/tables/apiv1alpha1/tablespb
func RegisterTablesServiceServer(s *grpc.Server, srv TablesServiceServer) {
	src.RegisterTablesServiceServer(s, srv)
}
