// Code generated by protoc-gen-go.
// source: google.golang.org/cloud/bigtable/internal/cluster_service_proto/bigtable_cluster_service_messages.proto
// DO NOT EDIT!

/*
Package google_bigtable_admin_cluster_v1 is a generated protocol buffer package.

It is generated from these files:
	google.golang.org/cloud/bigtable/internal/cluster_service_proto/bigtable_cluster_service_messages.proto
	google.golang.org/cloud/bigtable/internal/cluster_service_proto/bigtable_cluster_service.proto

It has these top-level messages:
	ListZonesRequest
	ListZonesResponse
	GetClusterRequest
	ListClustersRequest
	ListClustersResponse
	CreateClusterRequest
	CreateClusterMetadata
	UpdateClusterMetadata
	DeleteClusterRequest
	UndeleteClusterRequest
	UndeleteClusterMetadata
*/
package google_bigtable_admin_cluster_v1

import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import math "math"
import google_bigtable_admin_cluster_v11 "google.golang.org/cloud/bigtable/internal/cluster_data_proto"
import google_protobuf "github.com/golang/protobuf/ptypes/timestamp"

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
const _ = proto.ProtoPackageIsVersion1

// Request message for BigtableClusterService.ListZones.
type ListZonesRequest struct {
	// The unique name of the project for which a list of supported zones is
	// requested.
	// Values are of the form projects/<project>
	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
}

func (m *ListZonesRequest) Reset()                    { *m = ListZonesRequest{} }
func (m *ListZonesRequest) String() string            { return proto.CompactTextString(m) }
func (*ListZonesRequest) ProtoMessage()               {}
func (*ListZonesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }

// Response message for BigtableClusterService.ListZones.
type ListZonesResponse struct {
	// The list of requested zones.
	Zones []*google_bigtable_admin_cluster_v11.Zone `protobuf:"bytes,1,rep,name=zones" json:"zones,omitempty"`
}

func (m *ListZonesResponse) Reset()                    { *m = ListZonesResponse{} }
func (m *ListZonesResponse) String() string            { return proto.CompactTextString(m) }
func (*ListZonesResponse) ProtoMessage()               {}
func (*ListZonesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }

func (m *ListZonesResponse) GetZones() []*google_bigtable_admin_cluster_v11.Zone {
	if m != nil {
		return m.Zones
	}
	return nil
}

// Request message for BigtableClusterService.GetCluster.
type GetClusterRequest struct {
	// The unique name of the requested cluster.
	// Values are of the form projects/<project>/zones/<zone>/clusters/<cluster>
	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
}

func (m *GetClusterRequest) Reset()                    { *m = GetClusterRequest{} }
func (m *GetClusterRequest) String() string            { return proto.CompactTextString(m) }
func (*GetClusterRequest) ProtoMessage()               {}
func (*GetClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }

// Request message for BigtableClusterService.ListClusters.
type ListClustersRequest struct {
	// The unique name of the project for which a list of clusters is requested.
	// Values are of the form projects/<project>
	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
}

func (m *ListClustersRequest) Reset()                    { *m = ListClustersRequest{} }
func (m *ListClustersRequest) String() string            { return proto.CompactTextString(m) }
func (*ListClustersRequest) ProtoMessage()               {}
func (*ListClustersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }

// Response message for BigtableClusterService.ListClusters.
type ListClustersResponse struct {
	// The list of requested Clusters.
	Clusters []*google_bigtable_admin_cluster_v11.Cluster `protobuf:"bytes,1,rep,name=clusters" json:"clusters,omitempty"`
	// The zones for which clusters could not be retrieved.
	FailedZones []*google_bigtable_admin_cluster_v11.Zone `protobuf:"bytes,2,rep,name=failed_zones,json=failedZones" json:"failed_zones,omitempty"`
}

func (m *ListClustersResponse) Reset()                    { *m = ListClustersResponse{} }
func (m *ListClustersResponse) String() string            { return proto.CompactTextString(m) }
func (*ListClustersResponse) ProtoMessage()               {}
func (*ListClustersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }

func (m *ListClustersResponse) GetClusters() []*google_bigtable_admin_cluster_v11.Cluster {
	if m != nil {
		return m.Clusters
	}
	return nil
}

func (m *ListClustersResponse) GetFailedZones() []*google_bigtable_admin_cluster_v11.Zone {
	if m != nil {
		return m.FailedZones
	}
	return nil
}

// Request message for BigtableClusterService.CreateCluster.
type CreateClusterRequest struct {
	// The unique name of the zone in which to create the cluster.
	// Values are of the form projects/<project>/zones/<zone>
	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
	// The id to be used when referring to the new cluster within its zone,
	// e.g. just the "test-cluster" section of the full name
	// "projects/<project>/zones/<zone>/clusters/test-cluster".
	ClusterId string `protobuf:"bytes,2,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"`
	// The cluster to create.
	// The "name", "delete_time", and "current_operation" fields must be left
	// blank.
	Cluster *google_bigtable_admin_cluster_v11.Cluster `protobuf:"bytes,3,opt,name=cluster" json:"cluster,omitempty"`
}

func (m *CreateClusterRequest) Reset()                    { *m = CreateClusterRequest{} }
func (m *CreateClusterRequest) String() string            { return proto.CompactTextString(m) }
func (*CreateClusterRequest) ProtoMessage()               {}
func (*CreateClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }

func (m *CreateClusterRequest) GetCluster() *google_bigtable_admin_cluster_v11.Cluster {
	if m != nil {
		return m.Cluster
	}
	return nil
}

// Metadata type for the operation returned by
// BigtableClusterService.CreateCluster.
type CreateClusterMetadata struct {
	// The request which prompted the creation of this operation.
	OriginalRequest *CreateClusterRequest `protobuf:"bytes,1,opt,name=original_request,json=originalRequest" json:"original_request,omitempty"`
	// The time at which original_request was received.
	RequestTime *google_protobuf.Timestamp `protobuf:"bytes,2,opt,name=request_time,json=requestTime" json:"request_time,omitempty"`
	// The time at which this operation failed or was completed successfully.
	FinishTime *google_protobuf.Timestamp `protobuf:"bytes,3,opt,name=finish_time,json=finishTime" json:"finish_time,omitempty"`
}

func (m *CreateClusterMetadata) Reset()                    { *m = CreateClusterMetadata{} }
func (m *CreateClusterMetadata) String() string            { return proto.CompactTextString(m) }
func (*CreateClusterMetadata) ProtoMessage()               {}
func (*CreateClusterMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }

func (m *CreateClusterMetadata) GetOriginalRequest() *CreateClusterRequest {
	if m != nil {
		return m.OriginalRequest
	}
	return nil
}

func (m *CreateClusterMetadata) GetRequestTime() *google_protobuf.Timestamp {
	if m != nil {
		return m.RequestTime
	}
	return nil
}

func (m *CreateClusterMetadata) GetFinishTime() *google_protobuf.Timestamp {
	if m != nil {
		return m.FinishTime
	}
	return nil
}

// Metadata type for the operation returned by
// BigtableClusterService.UpdateCluster.
type UpdateClusterMetadata struct {
	// The request which prompted the creation of this operation.
	OriginalRequest *google_bigtable_admin_cluster_v11.Cluster `protobuf:"bytes,1,opt,name=original_request,json=originalRequest" json:"original_request,omitempty"`
	// The time at which original_request was received.
	RequestTime *google_protobuf.Timestamp `protobuf:"bytes,2,opt,name=request_time,json=requestTime" json:"request_time,omitempty"`
	// The time at which this operation was cancelled. If set, this operation is
	// in the process of undoing itself (which is guaranteed to succeed) and
	// cannot be cancelled again.
	CancelTime *google_protobuf.Timestamp `protobuf:"bytes,3,opt,name=cancel_time,json=cancelTime" json:"cancel_time,omitempty"`
	// The time at which this operation failed or was completed successfully.
	FinishTime *google_protobuf.Timestamp `protobuf:"bytes,4,opt,name=finish_time,json=finishTime" json:"finish_time,omitempty"`
}

func (m *UpdateClusterMetadata) Reset()                    { *m = UpdateClusterMetadata{} }
func (m *UpdateClusterMetadata) String() string            { return proto.CompactTextString(m) }
func (*UpdateClusterMetadata) ProtoMessage()               {}
func (*UpdateClusterMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }

func (m *UpdateClusterMetadata) GetOriginalRequest() *google_bigtable_admin_cluster_v11.Cluster {
	if m != nil {
		return m.OriginalRequest
	}
	return nil
}

func (m *UpdateClusterMetadata) GetRequestTime() *google_protobuf.Timestamp {
	if m != nil {
		return m.RequestTime
	}
	return nil
}

func (m *UpdateClusterMetadata) GetCancelTime() *google_protobuf.Timestamp {
	if m != nil {
		return m.CancelTime
	}
	return nil
}

func (m *UpdateClusterMetadata) GetFinishTime() *google_protobuf.Timestamp {
	if m != nil {
		return m.FinishTime
	}
	return nil
}

// Request message for BigtableClusterService.DeleteCluster.
type DeleteClusterRequest struct {
	// The unique name of the cluster to be deleted.
	// Values are of the form projects/<project>/zones/<zone>/clusters/<cluster>
	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
}

func (m *DeleteClusterRequest) Reset()                    { *m = DeleteClusterRequest{} }
func (m *DeleteClusterRequest) String() string            { return proto.CompactTextString(m) }
func (*DeleteClusterRequest) ProtoMessage()               {}
func (*DeleteClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }

// Request message for BigtableClusterService.UndeleteCluster.
type UndeleteClusterRequest struct {
	// The unique name of the cluster to be un-deleted.
	// Values are of the form projects/<project>/zones/<zone>/clusters/<cluster>
	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
}

func (m *UndeleteClusterRequest) Reset()                    { *m = UndeleteClusterRequest{} }
func (m *UndeleteClusterRequest) String() string            { return proto.CompactTextString(m) }
func (*UndeleteClusterRequest) ProtoMessage()               {}
func (*UndeleteClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }

// Metadata type for the operation returned by
// BigtableClusterService.UndeleteCluster.
type UndeleteClusterMetadata struct {
	// The time at which the original request was received.
	RequestTime *google_protobuf.Timestamp `protobuf:"bytes,1,opt,name=request_time,json=requestTime" json:"request_time,omitempty"`
	// The time at which this operation failed or was completed successfully.
	FinishTime *google_protobuf.Timestamp `protobuf:"bytes,2,opt,name=finish_time,json=finishTime" json:"finish_time,omitempty"`
}

func (m *UndeleteClusterMetadata) Reset()                    { *m = UndeleteClusterMetadata{} }
func (m *UndeleteClusterMetadata) String() string            { return proto.CompactTextString(m) }
func (*UndeleteClusterMetadata) ProtoMessage()               {}
func (*UndeleteClusterMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }

func (m *UndeleteClusterMetadata) GetRequestTime() *google_protobuf.Timestamp {
	if m != nil {
		return m.RequestTime
	}
	return nil
}

func (m *UndeleteClusterMetadata) GetFinishTime() *google_protobuf.Timestamp {
	if m != nil {
		return m.FinishTime
	}
	return nil
}

func init() {
	proto.RegisterType((*ListZonesRequest)(nil), "google.bigtable.admin.cluster.v1.ListZonesRequest")
	proto.RegisterType((*ListZonesResponse)(nil), "google.bigtable.admin.cluster.v1.ListZonesResponse")
	proto.RegisterType((*GetClusterRequest)(nil), "google.bigtable.admin.cluster.v1.GetClusterRequest")
	proto.RegisterType((*ListClustersRequest)(nil), "google.bigtable.admin.cluster.v1.ListClustersRequest")
	proto.RegisterType((*ListClustersResponse)(nil), "google.bigtable.admin.cluster.v1.ListClustersResponse")
	proto.RegisterType((*CreateClusterRequest)(nil), "google.bigtable.admin.cluster.v1.CreateClusterRequest")
	proto.RegisterType((*CreateClusterMetadata)(nil), "google.bigtable.admin.cluster.v1.CreateClusterMetadata")
	proto.RegisterType((*UpdateClusterMetadata)(nil), "google.bigtable.admin.cluster.v1.UpdateClusterMetadata")
	proto.RegisterType((*DeleteClusterRequest)(nil), "google.bigtable.admin.cluster.v1.DeleteClusterRequest")
	proto.RegisterType((*UndeleteClusterRequest)(nil), "google.bigtable.admin.cluster.v1.UndeleteClusterRequest")
	proto.RegisterType((*UndeleteClusterMetadata)(nil), "google.bigtable.admin.cluster.v1.UndeleteClusterMetadata")
}

var fileDescriptor0 = []byte{
	// 519 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xb4, 0x55, 0x5d, 0x6b, 0x13, 0x41,
	0x14, 0x65, 0x92, 0xfa, 0xd1, 0xbb, 0x05, 0xdb, 0x35, 0xd5, 0x10, 0x10, 0xc3, 0x2a, 0xb5, 0x15,
	0xd9, 0xc5, 0x08, 0xbe, 0xa8, 0x2f, 0x89, 0x22, 0x05, 0x03, 0x35, 0xb6, 0x20, 0xbe, 0x2c, 0x93,
	0xdd, 0x9b, 0x75, 0x60, 0x76, 0x26, 0xee, 0x4c, 0xfa, 0xe0, 0x8f, 0xf0, 0xcd, 0xbf, 0x20, 0xfe,
	0x42, 0x9f, 0x65, 0x77, 0x66, 0x82, 0x0d, 0x69, 0x37, 0x8b, 0xf4, 0x6d, 0x77, 0xee, 0x39, 0xf7,
	0x9c, 0x73, 0xe7, 0xc2, 0x40, 0x96, 0x49, 0x99, 0x71, 0x0c, 0x33, 0xc9, 0xa9, 0xc8, 0x42, 0x59,
	0x64, 0x51, 0xc2, 0xe5, 0x22, 0x8d, 0xa6, 0x2c, 0xd3, 0x74, 0xca, 0x31, 0x62, 0x42, 0x63, 0x21,
	0x28, 0x8f, 0x12, 0xbe, 0x50, 0x1a, 0x8b, 0x58, 0x61, 0x71, 0xce, 0x12, 0x8c, 0xe7, 0x85, 0xd4,
	0x72, 0x89, 0x8b, 0x57, 0xcb, 0x39, 0x2a, 0x45, 0x33, 0x54, 0x61, 0x85, 0xf3, 0xfb, 0x56, 0xc8,
	0xe1, 0x43, 0x9a, 0xe6, 0x4c, 0x84, 0x96, 0x15, 0x9e, 0x3f, 0xef, 0x7d, 0x6e, 0x6e, 0x25, 0xa5,
	0x9a, 0x5e, 0xe6, 0xa3, 0xac, 0x19, 0xed, 0xde, 0x43, 0xd3, 0x39, 0xaa, 0xfe, 0xa6, 0x8b, 0x59,
	0xa4, 0x59, 0x8e, 0x4a, 0xd3, 0x7c, 0x6e, 0x00, 0xc1, 0x01, 0xec, 0x7e, 0x60, 0x4a, 0x7f, 0x91,
	0x02, 0xd5, 0x04, 0xbf, 0x2d, 0x50, 0x69, 0xdf, 0x87, 0x2d, 0x41, 0x73, 0xec, 0x92, 0x3e, 0x39,
	0xdc, 0x9e, 0x54, 0xdf, 0xc1, 0x47, 0xd8, 0xfb, 0x07, 0xa7, 0xe6, 0x52, 0x28, 0xf4, 0x5f, 0xc3,
	0x8d, 0xef, 0xe5, 0x41, 0x97, 0xf4, 0xdb, 0x87, 0xde, 0xe0, 0x20, 0xac, 0x4b, 0x1a, 0x96, 0xfc,
	0x89, 0x21, 0x05, 0x4f, 0x60, 0xef, 0x3d, 0xea, 0x91, 0x29, 0x5e, 0xa5, 0x7d, 0x04, 0x77, 0x4b,
	0x6d, 0x8b, 0xbc, 0xd2, 0xe6, 0x6f, 0x02, 0x9d, 0x8b, 0x58, 0x6b, 0xf5, 0x1d, 0xdc, 0xb6, 0x36,
	0x9c, 0xdb, 0xa3, 0x7a, 0xb7, 0xce, 0xdb, 0x92, 0xea, 0x1f, 0xc3, 0xce, 0x8c, 0x32, 0x8e, 0x69,
	0x6c, 0x82, 0xb7, 0x1a, 0x05, 0xf7, 0x0c, 0xb7, 0x1a, 0x62, 0xf0, 0x83, 0x40, 0x67, 0x54, 0x20,
	0xd5, 0x58, 0x3f, 0x02, 0xff, 0x01, 0x80, 0xbb, 0x5d, 0x96, 0x76, 0x5b, 0x55, 0x65, 0xdb, 0x9e,
	0x1c, 0xa7, 0xfe, 0x08, 0x6e, 0xd9, 0x9f, 0x6e, 0xbb, 0x4f, 0x9a, 0x85, 0x73, 0xcc, 0xe0, 0x0f,
	0x81, 0xfd, 0x0b, 0x86, 0xc6, 0xa8, 0x69, 0xb9, 0x4b, 0x3e, 0x85, 0x5d, 0x59, 0xb0, 0x8c, 0x09,
	0xca, 0xe3, 0xc2, 0xb8, 0xac, 0xdc, 0x79, 0x83, 0x97, 0x1b, 0xe8, 0xac, 0xc9, 0x38, 0xb9, 0xe3,
	0xfa, 0xb9, 0xd0, 0x6f, 0x60, 0xc7, 0x76, 0x8e, 0xcb, 0x15, 0xad, 0x22, 0x7a, 0x83, 0x9e, 0x6b,
	0xef, 0xf6, 0x37, 0x3c, 0x75, 0xfb, 0x3b, 0xf1, 0x2c, 0xbe, 0x3c, 0xf1, 0x5f, 0x81, 0x37, 0x63,
	0x82, 0xa9, 0xaf, 0x86, 0xdd, 0xae, 0x65, 0x83, 0x81, 0x97, 0x07, 0xc1, 0xaf, 0x16, 0xec, 0x9f,
	0xcd, 0xd3, 0x35, 0xc1, 0x4f, 0x2f, 0x0d, 0xde, 0x60, 0xc0, 0xd7, 0x90, 0x35, 0xa1, 0x22, 0x41,
	0xbe, 0x71, 0x56, 0x03, 0x5f, 0x37, 0xa8, 0xad, 0x46, 0x83, 0x7a, 0x0a, 0x9d, 0xb7, 0xc8, 0x71,
	0x93, 0x8d, 0x0d, 0x9e, 0xc1, 0xbd, 0x33, 0x91, 0x6e, 0x8a, 0xfe, 0x49, 0xe0, 0xfe, 0x0a, 0x7c,
	0x79, 0x09, 0xab, 0xe3, 0x22, 0xff, 0xb5, 0x1a, 0xad, 0x26, 0x89, 0x87, 0x63, 0x78, 0x9c, 0xc8,
	0xbc, 0xf6, 0xae, 0x87, 0x8f, 0x86, 0xb6, 0x64, 0xcd, 0x7f, 0x32, 0x4f, 0xc1, 0xd8, 0xbe, 0x04,
	0x27, 0xa5, 0xca, 0x09, 0x99, 0xde, 0xac, 0xe4, 0x5e, 0xfc, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x44,
	0xc9, 0x19, 0xcf, 0x7c, 0x06, 0x00, 0x00,
}
