// Copyright 2020 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 protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.22.0
// 	protoc        v3.12.2
// source: google/cloud/gaming/v1beta/game_server_deployments_service.proto

package gaming

import (
	context "context"
	reflect "reflect"

	proto "github.com/golang/protobuf/proto"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	longrunning "google.golang.org/genproto/googleapis/longrunning"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4

var File_google_cloud_gaming_v1beta_game_server_deployments_service_proto protoreflect.FileDescriptor

var file_google_cloud_gaming_v1beta_game_server_deployments_service_proto_rawDesc = []byte{
	0x0a, 0x40, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x67,
	0x61, 0x6d, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x2f, 0x67, 0x61, 0x6d,
	0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d,
	0x65, 0x6e, 0x74, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f,
	0x74, 0x6f, 0x12, 0x1a, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64,
	0x2e, 0x67, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x1a, 0x1c,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x38, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x63, 0x6c,
	0x6f, 0x75, 0x64, 0x2f, 0x67, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74,
	0x61, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65,
	0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
	0x23, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e,
	0x69, 0x6e, 0x67, 0x2f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x32, 0xc3, 0x13, 0x0a, 0x1c, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72,
	0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x53, 0x65,
	0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xe8, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61,
	0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65,
	0x6e, 0x74, 0x73, 0x12, 0x3c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f,
	0x75, 0x64, 0x2e, 0x67, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61,
	0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44,
	0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
	0x74, 0x1a, 0x3d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64,
	0x2e, 0x67, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x2e, 0x4c,
	0x69, 0x73, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70,
	0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
	0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x12, 0x3d, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74,
	0x61, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63,
	0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a,
	0x7d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c,
	0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0xda, 0x41, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74,
	0x12, 0xd5, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76,
	0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3a, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x61, 0x6d, 0x69,
	0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x6d,
	0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e,
	0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76,
	0x31, 0x62, 0x65, 0x74, 0x61, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
	0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x4c, 0x82, 0xd3, 0xe4, 0x93,
	0x02, 0x3f, 0x12, 0x3d, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x2f, 0x7b, 0x6e, 0x61, 0x6d,
	0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72,
	0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x2a,
	0x7d, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0xa6, 0x02, 0x0a, 0x1a, 0x43, 0x72, 0x65,
	0x61, 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70,
	0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31,
	0x62, 0x65, 0x74, 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x53,
	0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52,
	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
	0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa9, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x57, 0x22, 0x3d,
	0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d,
	0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76,
	0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3a, 0x16, 0x67,
	0x61, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f,
	0x79, 0x6d, 0x65, 0x6e, 0x74, 0xda, 0x41, 0x1d, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x2c, 0x67,
	0x61, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f,
	0x79, 0x6d, 0x65, 0x6e, 0x74, 0xca, 0x41, 0x29, 0x0a, 0x14, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65,
	0x72, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x11,
	0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
	0x61, 0x12, 0xf4, 0x01, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65,
	0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74,
	0x12, 0x3d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
	0x67, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x2e, 0x44, 0x65,
	0x6c, 0x65, 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x65,
	0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
	0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e,
	0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x78,
	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x2a, 0x3d, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x2f,
	0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a,
	0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x67, 0x61, 0x6d,
	0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e,
	0x74, 0x73, 0x2f, 0x2a, 0x7d, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0xca, 0x41, 0x29, 0x0a,
	0x14, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f,
	0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x11, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0xc2, 0x02, 0x0a, 0x1a, 0x55, 0x70, 0x64,
	0x61, 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70,
	0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31,
	0x62, 0x65, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x53,
	0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52,
	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
	0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xc5, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6e, 0x32, 0x54,
	0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x2f, 0x7b, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x65,
	0x72, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e,
	0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f,
	0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x67, 0x61, 0x6d, 0x65,
	0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74,
	0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x16, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65,
	0x72, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0xda, 0x41, 0x22, 0x67,
	0x61, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f,
	0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73,
	0x6b, 0xca, 0x41, 0x29, 0x0a, 0x14, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
	0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x11, 0x4f, 0x70, 0x65, 0x72,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0xf2, 0x01,
	0x0a, 0x1e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44,
	0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74,
	0x12, 0x41, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
	0x67, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x2e, 0x47, 0x65,
	0x74, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f,
	0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75,
	0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f,
	0x75, 0x64, 0x2e, 0x67, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61,
	0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f,
	0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x22, 0x54, 0x82, 0xd3,
	0xe4, 0x93, 0x02, 0x47, 0x12, 0x45, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x2f, 0x7b, 0x6e,
	0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c,
	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x53,
	0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73,
	0x2f, 0x2a, 0x7d, 0x2f, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0xda, 0x41, 0x04, 0x6e, 0x61,
	0x6d, 0x65, 0x12, 0xab, 0x02, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x61, 0x6d,
	0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e,
	0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x12, 0x44, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76,
	0x31, 0x62, 0x65, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65,
	0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74,
	0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d,
	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e,
	0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa0, 0x01,
	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x58, 0x32, 0x4d, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x2f,
	0x7b, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72,
	0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44,
	0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x72, 0x6f,
	0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x3a, 0x07, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0xda, 0x41,
	0x13, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f,
	0x6d, 0x61, 0x73, 0x6b, 0xca, 0x41, 0x29, 0x0a, 0x14, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72,
	0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x11, 0x4f,
	0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
	0x12, 0x9b, 0x02, 0x0a, 0x22, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x47, 0x61, 0x6d, 0x65,
	0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74,
	0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x12, 0x45, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31,
	0x62, 0x65, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x47, 0x61, 0x6d, 0x65,
	0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74,
	0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x46,
	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x61,
	0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x65, 0x76,
	0x69, 0x65, 0x77, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70,
	0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65,
	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x66, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x60, 0x32, 0x55,
	0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x2f, 0x7b, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74,
	0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a,
	0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x67, 0x61, 0x6d,
	0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e,
	0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x3a, 0x70, 0x72,
	0x65, 0x76, 0x69, 0x65, 0x77, 0x3a, 0x07, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x12, 0xe8,
	0x01, 0x0a, 0x14, 0x46, 0x65, 0x74, 0x63, 0x68, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65,
	0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31,
	0x62, 0x65, 0x74, 0x61, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79,
	0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
	0x1a, 0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
	0x67, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x2e, 0x46, 0x65,
	0x74, 0x63, 0x68, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61,
	0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5d, 0x82, 0xd3, 0xe4, 0x93,
	0x02, 0x57, 0x22, 0x52, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x2f, 0x7b, 0x6e, 0x61, 0x6d,
	0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72,
	0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x2a,
	0x7d, 0x3a, 0x66, 0x65, 0x74, 0x63, 0x68, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e,
	0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x1a, 0x4f, 0xca, 0x41, 0x1b, 0x67, 0x61,
	0x6d, 0x65, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0xd2, 0x41, 0x2e, 0x68, 0x74, 0x74, 0x70,
	0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70,
	0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x63, 0x6c, 0x6f, 0x75,
	0x64, 0x2d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x64, 0x0a, 0x1e, 0x63, 0x6f,
	0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67,
	0x61, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x50, 0x01, 0x5a, 0x40,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72,
	0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x67, 0x61, 0x6d, 0x69,
	0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x3b, 0x67, 0x61, 0x6d, 0x69, 0x6e, 0x67,
	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var file_google_cloud_gaming_v1beta_game_server_deployments_service_proto_goTypes = []interface{}{
	(*ListGameServerDeploymentsRequest)(nil),           // 0: google.cloud.gaming.v1beta.ListGameServerDeploymentsRequest
	(*GetGameServerDeploymentRequest)(nil),             // 1: google.cloud.gaming.v1beta.GetGameServerDeploymentRequest
	(*CreateGameServerDeploymentRequest)(nil),          // 2: google.cloud.gaming.v1beta.CreateGameServerDeploymentRequest
	(*DeleteGameServerDeploymentRequest)(nil),          // 3: google.cloud.gaming.v1beta.DeleteGameServerDeploymentRequest
	(*UpdateGameServerDeploymentRequest)(nil),          // 4: google.cloud.gaming.v1beta.UpdateGameServerDeploymentRequest
	(*GetGameServerDeploymentRolloutRequest)(nil),      // 5: google.cloud.gaming.v1beta.GetGameServerDeploymentRolloutRequest
	(*UpdateGameServerDeploymentRolloutRequest)(nil),   // 6: google.cloud.gaming.v1beta.UpdateGameServerDeploymentRolloutRequest
	(*PreviewGameServerDeploymentRolloutRequest)(nil),  // 7: google.cloud.gaming.v1beta.PreviewGameServerDeploymentRolloutRequest
	(*FetchDeploymentStateRequest)(nil),                // 8: google.cloud.gaming.v1beta.FetchDeploymentStateRequest
	(*ListGameServerDeploymentsResponse)(nil),          // 9: google.cloud.gaming.v1beta.ListGameServerDeploymentsResponse
	(*GameServerDeployment)(nil),                       // 10: google.cloud.gaming.v1beta.GameServerDeployment
	(*longrunning.Operation)(nil),                      // 11: google.longrunning.Operation
	(*GameServerDeploymentRollout)(nil),                // 12: google.cloud.gaming.v1beta.GameServerDeploymentRollout
	(*PreviewGameServerDeploymentRolloutResponse)(nil), // 13: google.cloud.gaming.v1beta.PreviewGameServerDeploymentRolloutResponse
	(*FetchDeploymentStateResponse)(nil),               // 14: google.cloud.gaming.v1beta.FetchDeploymentStateResponse
}
var file_google_cloud_gaming_v1beta_game_server_deployments_service_proto_depIdxs = []int32{
	0,  // 0: google.cloud.gaming.v1beta.GameServerDeploymentsService.ListGameServerDeployments:input_type -> google.cloud.gaming.v1beta.ListGameServerDeploymentsRequest
	1,  // 1: google.cloud.gaming.v1beta.GameServerDeploymentsService.GetGameServerDeployment:input_type -> google.cloud.gaming.v1beta.GetGameServerDeploymentRequest
	2,  // 2: google.cloud.gaming.v1beta.GameServerDeploymentsService.CreateGameServerDeployment:input_type -> google.cloud.gaming.v1beta.CreateGameServerDeploymentRequest
	3,  // 3: google.cloud.gaming.v1beta.GameServerDeploymentsService.DeleteGameServerDeployment:input_type -> google.cloud.gaming.v1beta.DeleteGameServerDeploymentRequest
	4,  // 4: google.cloud.gaming.v1beta.GameServerDeploymentsService.UpdateGameServerDeployment:input_type -> google.cloud.gaming.v1beta.UpdateGameServerDeploymentRequest
	5,  // 5: google.cloud.gaming.v1beta.GameServerDeploymentsService.GetGameServerDeploymentRollout:input_type -> google.cloud.gaming.v1beta.GetGameServerDeploymentRolloutRequest
	6,  // 6: google.cloud.gaming.v1beta.GameServerDeploymentsService.UpdateGameServerDeploymentRollout:input_type -> google.cloud.gaming.v1beta.UpdateGameServerDeploymentRolloutRequest
	7,  // 7: google.cloud.gaming.v1beta.GameServerDeploymentsService.PreviewGameServerDeploymentRollout:input_type -> google.cloud.gaming.v1beta.PreviewGameServerDeploymentRolloutRequest
	8,  // 8: google.cloud.gaming.v1beta.GameServerDeploymentsService.FetchDeploymentState:input_type -> google.cloud.gaming.v1beta.FetchDeploymentStateRequest
	9,  // 9: google.cloud.gaming.v1beta.GameServerDeploymentsService.ListGameServerDeployments:output_type -> google.cloud.gaming.v1beta.ListGameServerDeploymentsResponse
	10, // 10: google.cloud.gaming.v1beta.GameServerDeploymentsService.GetGameServerDeployment:output_type -> google.cloud.gaming.v1beta.GameServerDeployment
	11, // 11: google.cloud.gaming.v1beta.GameServerDeploymentsService.CreateGameServerDeployment:output_type -> google.longrunning.Operation
	11, // 12: google.cloud.gaming.v1beta.GameServerDeploymentsService.DeleteGameServerDeployment:output_type -> google.longrunning.Operation
	11, // 13: google.cloud.gaming.v1beta.GameServerDeploymentsService.UpdateGameServerDeployment:output_type -> google.longrunning.Operation
	12, // 14: google.cloud.gaming.v1beta.GameServerDeploymentsService.GetGameServerDeploymentRollout:output_type -> google.cloud.gaming.v1beta.GameServerDeploymentRollout
	11, // 15: google.cloud.gaming.v1beta.GameServerDeploymentsService.UpdateGameServerDeploymentRollout:output_type -> google.longrunning.Operation
	13, // 16: google.cloud.gaming.v1beta.GameServerDeploymentsService.PreviewGameServerDeploymentRollout:output_type -> google.cloud.gaming.v1beta.PreviewGameServerDeploymentRolloutResponse
	14, // 17: google.cloud.gaming.v1beta.GameServerDeploymentsService.FetchDeploymentState:output_type -> google.cloud.gaming.v1beta.FetchDeploymentStateResponse
	9,  // [9:18] is the sub-list for method output_type
	0,  // [0:9] is the sub-list for method input_type
	0,  // [0:0] is the sub-list for extension type_name
	0,  // [0:0] is the sub-list for extension extendee
	0,  // [0:0] is the sub-list for field type_name
}

func init() { file_google_cloud_gaming_v1beta_game_server_deployments_service_proto_init() }
func file_google_cloud_gaming_v1beta_game_server_deployments_service_proto_init() {
	if File_google_cloud_gaming_v1beta_game_server_deployments_service_proto != nil {
		return
	}
	file_google_cloud_gaming_v1beta_game_server_deployments_proto_init()
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_google_cloud_gaming_v1beta_game_server_deployments_service_proto_rawDesc,
			NumEnums:      0,
			NumMessages:   0,
			NumExtensions: 0,
			NumServices:   1,
		},
		GoTypes:           file_google_cloud_gaming_v1beta_game_server_deployments_service_proto_goTypes,
		DependencyIndexes: file_google_cloud_gaming_v1beta_game_server_deployments_service_proto_depIdxs,
	}.Build()
	File_google_cloud_gaming_v1beta_game_server_deployments_service_proto = out.File
	file_google_cloud_gaming_v1beta_game_server_deployments_service_proto_rawDesc = nil
	file_google_cloud_gaming_v1beta_game_server_deployments_service_proto_goTypes = nil
	file_google_cloud_gaming_v1beta_game_server_deployments_service_proto_depIdxs = nil
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConnInterface

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

// GameServerDeploymentsServiceClient is the client API for GameServerDeploymentsService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type GameServerDeploymentsServiceClient interface {
	// Lists Game Server Deployments in a given project and Location.
	ListGameServerDeployments(ctx context.Context, in *ListGameServerDeploymentsRequest, opts ...grpc.CallOption) (*ListGameServerDeploymentsResponse, error)
	// Gets details of a single Game Server Deployment.
	GetGameServerDeployment(ctx context.Context, in *GetGameServerDeploymentRequest, opts ...grpc.CallOption) (*GameServerDeployment, error)
	// Creates a new Game Server Deployment in a given project and Location.
	CreateGameServerDeployment(ctx context.Context, in *CreateGameServerDeploymentRequest, opts ...grpc.CallOption) (*longrunning.Operation, error)
	// Deletes a single Game Server Deployment.
	DeleteGameServerDeployment(ctx context.Context, in *DeleteGameServerDeploymentRequest, opts ...grpc.CallOption) (*longrunning.Operation, error)
	// Patches a Game Server Deployment.
	UpdateGameServerDeployment(ctx context.Context, in *UpdateGameServerDeploymentRequest, opts ...grpc.CallOption) (*longrunning.Operation, error)
	// Gets details a single Game Server Deployment Rollout.
	GetGameServerDeploymentRollout(ctx context.Context, in *GetGameServerDeploymentRolloutRequest, opts ...grpc.CallOption) (*GameServerDeploymentRollout, error)
	// Patches a single Game Server Deployment Rollout.
	// The method will not return an error if the update does not affect any
	// existing realms. For example - if the default_game_server_config is changed
	// but all existing realms use the override, that is valid. Similarly, if a
	// non existing realm is explicitly called out in game_server_config_overrides
	// field, that will also not result in an error.
	UpdateGameServerDeploymentRollout(ctx context.Context, in *UpdateGameServerDeploymentRolloutRequest, opts ...grpc.CallOption) (*longrunning.Operation, error)
	// Previews the Game Server Deployment Rollout. This API does not mutate the
	// Rollout resource.
	PreviewGameServerDeploymentRollout(ctx context.Context, in *PreviewGameServerDeploymentRolloutRequest, opts ...grpc.CallOption) (*PreviewGameServerDeploymentRolloutResponse, error)
	// Retrieves information about the current state of the Game Server
	// Ddeployment. Gathers all the Agones fleets and Agones autoscalers,
	// including fleets running an older version of the Game Server Deployment.
	FetchDeploymentState(ctx context.Context, in *FetchDeploymentStateRequest, opts ...grpc.CallOption) (*FetchDeploymentStateResponse, error)
}

type gameServerDeploymentsServiceClient struct {
	cc grpc.ClientConnInterface
}

func NewGameServerDeploymentsServiceClient(cc grpc.ClientConnInterface) GameServerDeploymentsServiceClient {
	return &gameServerDeploymentsServiceClient{cc}
}

func (c *gameServerDeploymentsServiceClient) ListGameServerDeployments(ctx context.Context, in *ListGameServerDeploymentsRequest, opts ...grpc.CallOption) (*ListGameServerDeploymentsResponse, error) {
	out := new(ListGameServerDeploymentsResponse)
	err := c.cc.Invoke(ctx, "/google.cloud.gaming.v1beta.GameServerDeploymentsService/ListGameServerDeployments", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *gameServerDeploymentsServiceClient) GetGameServerDeployment(ctx context.Context, in *GetGameServerDeploymentRequest, opts ...grpc.CallOption) (*GameServerDeployment, error) {
	out := new(GameServerDeployment)
	err := c.cc.Invoke(ctx, "/google.cloud.gaming.v1beta.GameServerDeploymentsService/GetGameServerDeployment", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *gameServerDeploymentsServiceClient) CreateGameServerDeployment(ctx context.Context, in *CreateGameServerDeploymentRequest, opts ...grpc.CallOption) (*longrunning.Operation, error) {
	out := new(longrunning.Operation)
	err := c.cc.Invoke(ctx, "/google.cloud.gaming.v1beta.GameServerDeploymentsService/CreateGameServerDeployment", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *gameServerDeploymentsServiceClient) DeleteGameServerDeployment(ctx context.Context, in *DeleteGameServerDeploymentRequest, opts ...grpc.CallOption) (*longrunning.Operation, error) {
	out := new(longrunning.Operation)
	err := c.cc.Invoke(ctx, "/google.cloud.gaming.v1beta.GameServerDeploymentsService/DeleteGameServerDeployment", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *gameServerDeploymentsServiceClient) UpdateGameServerDeployment(ctx context.Context, in *UpdateGameServerDeploymentRequest, opts ...grpc.CallOption) (*longrunning.Operation, error) {
	out := new(longrunning.Operation)
	err := c.cc.Invoke(ctx, "/google.cloud.gaming.v1beta.GameServerDeploymentsService/UpdateGameServerDeployment", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *gameServerDeploymentsServiceClient) GetGameServerDeploymentRollout(ctx context.Context, in *GetGameServerDeploymentRolloutRequest, opts ...grpc.CallOption) (*GameServerDeploymentRollout, error) {
	out := new(GameServerDeploymentRollout)
	err := c.cc.Invoke(ctx, "/google.cloud.gaming.v1beta.GameServerDeploymentsService/GetGameServerDeploymentRollout", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *gameServerDeploymentsServiceClient) UpdateGameServerDeploymentRollout(ctx context.Context, in *UpdateGameServerDeploymentRolloutRequest, opts ...grpc.CallOption) (*longrunning.Operation, error) {
	out := new(longrunning.Operation)
	err := c.cc.Invoke(ctx, "/google.cloud.gaming.v1beta.GameServerDeploymentsService/UpdateGameServerDeploymentRollout", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *gameServerDeploymentsServiceClient) PreviewGameServerDeploymentRollout(ctx context.Context, in *PreviewGameServerDeploymentRolloutRequest, opts ...grpc.CallOption) (*PreviewGameServerDeploymentRolloutResponse, error) {
	out := new(PreviewGameServerDeploymentRolloutResponse)
	err := c.cc.Invoke(ctx, "/google.cloud.gaming.v1beta.GameServerDeploymentsService/PreviewGameServerDeploymentRollout", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *gameServerDeploymentsServiceClient) FetchDeploymentState(ctx context.Context, in *FetchDeploymentStateRequest, opts ...grpc.CallOption) (*FetchDeploymentStateResponse, error) {
	out := new(FetchDeploymentStateResponse)
	err := c.cc.Invoke(ctx, "/google.cloud.gaming.v1beta.GameServerDeploymentsService/FetchDeploymentState", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// GameServerDeploymentsServiceServer is the server API for GameServerDeploymentsService service.
type GameServerDeploymentsServiceServer interface {
	// Lists Game Server Deployments in a given project and Location.
	ListGameServerDeployments(context.Context, *ListGameServerDeploymentsRequest) (*ListGameServerDeploymentsResponse, error)
	// Gets details of a single Game Server Deployment.
	GetGameServerDeployment(context.Context, *GetGameServerDeploymentRequest) (*GameServerDeployment, error)
	// Creates a new Game Server Deployment in a given project and Location.
	CreateGameServerDeployment(context.Context, *CreateGameServerDeploymentRequest) (*longrunning.Operation, error)
	// Deletes a single Game Server Deployment.
	DeleteGameServerDeployment(context.Context, *DeleteGameServerDeploymentRequest) (*longrunning.Operation, error)
	// Patches a Game Server Deployment.
	UpdateGameServerDeployment(context.Context, *UpdateGameServerDeploymentRequest) (*longrunning.Operation, error)
	// Gets details a single Game Server Deployment Rollout.
	GetGameServerDeploymentRollout(context.Context, *GetGameServerDeploymentRolloutRequest) (*GameServerDeploymentRollout, error)
	// Patches a single Game Server Deployment Rollout.
	// The method will not return an error if the update does not affect any
	// existing realms. For example - if the default_game_server_config is changed
	// but all existing realms use the override, that is valid. Similarly, if a
	// non existing realm is explicitly called out in game_server_config_overrides
	// field, that will also not result in an error.
	UpdateGameServerDeploymentRollout(context.Context, *UpdateGameServerDeploymentRolloutRequest) (*longrunning.Operation, error)
	// Previews the Game Server Deployment Rollout. This API does not mutate the
	// Rollout resource.
	PreviewGameServerDeploymentRollout(context.Context, *PreviewGameServerDeploymentRolloutRequest) (*PreviewGameServerDeploymentRolloutResponse, error)
	// Retrieves information about the current state of the Game Server
	// Ddeployment. Gathers all the Agones fleets and Agones autoscalers,
	// including fleets running an older version of the Game Server Deployment.
	FetchDeploymentState(context.Context, *FetchDeploymentStateRequest) (*FetchDeploymentStateResponse, error)
}

// UnimplementedGameServerDeploymentsServiceServer can be embedded to have forward compatible implementations.
type UnimplementedGameServerDeploymentsServiceServer struct {
}

func (*UnimplementedGameServerDeploymentsServiceServer) ListGameServerDeployments(context.Context, *ListGameServerDeploymentsRequest) (*ListGameServerDeploymentsResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method ListGameServerDeployments not implemented")
}
func (*UnimplementedGameServerDeploymentsServiceServer) GetGameServerDeployment(context.Context, *GetGameServerDeploymentRequest) (*GameServerDeployment, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetGameServerDeployment not implemented")
}
func (*UnimplementedGameServerDeploymentsServiceServer) CreateGameServerDeployment(context.Context, *CreateGameServerDeploymentRequest) (*longrunning.Operation, error) {
	return nil, status.Errorf(codes.Unimplemented, "method CreateGameServerDeployment not implemented")
}
func (*UnimplementedGameServerDeploymentsServiceServer) DeleteGameServerDeployment(context.Context, *DeleteGameServerDeploymentRequest) (*longrunning.Operation, error) {
	return nil, status.Errorf(codes.Unimplemented, "method DeleteGameServerDeployment not implemented")
}
func (*UnimplementedGameServerDeploymentsServiceServer) UpdateGameServerDeployment(context.Context, *UpdateGameServerDeploymentRequest) (*longrunning.Operation, error) {
	return nil, status.Errorf(codes.Unimplemented, "method UpdateGameServerDeployment not implemented")
}
func (*UnimplementedGameServerDeploymentsServiceServer) GetGameServerDeploymentRollout(context.Context, *GetGameServerDeploymentRolloutRequest) (*GameServerDeploymentRollout, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetGameServerDeploymentRollout not implemented")
}
func (*UnimplementedGameServerDeploymentsServiceServer) UpdateGameServerDeploymentRollout(context.Context, *UpdateGameServerDeploymentRolloutRequest) (*longrunning.Operation, error) {
	return nil, status.Errorf(codes.Unimplemented, "method UpdateGameServerDeploymentRollout not implemented")
}
func (*UnimplementedGameServerDeploymentsServiceServer) PreviewGameServerDeploymentRollout(context.Context, *PreviewGameServerDeploymentRolloutRequest) (*PreviewGameServerDeploymentRolloutResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method PreviewGameServerDeploymentRollout not implemented")
}
func (*UnimplementedGameServerDeploymentsServiceServer) FetchDeploymentState(context.Context, *FetchDeploymentStateRequest) (*FetchDeploymentStateResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method FetchDeploymentState not implemented")
}

func RegisterGameServerDeploymentsServiceServer(s *grpc.Server, srv GameServerDeploymentsServiceServer) {
	s.RegisterService(&_GameServerDeploymentsService_serviceDesc, srv)
}

func _GameServerDeploymentsService_ListGameServerDeployments_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(ListGameServerDeploymentsRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(GameServerDeploymentsServiceServer).ListGameServerDeployments(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.cloud.gaming.v1beta.GameServerDeploymentsService/ListGameServerDeployments",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(GameServerDeploymentsServiceServer).ListGameServerDeployments(ctx, req.(*ListGameServerDeploymentsRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _GameServerDeploymentsService_GetGameServerDeployment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GetGameServerDeploymentRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(GameServerDeploymentsServiceServer).GetGameServerDeployment(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.cloud.gaming.v1beta.GameServerDeploymentsService/GetGameServerDeployment",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(GameServerDeploymentsServiceServer).GetGameServerDeployment(ctx, req.(*GetGameServerDeploymentRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _GameServerDeploymentsService_CreateGameServerDeployment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(CreateGameServerDeploymentRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(GameServerDeploymentsServiceServer).CreateGameServerDeployment(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.cloud.gaming.v1beta.GameServerDeploymentsService/CreateGameServerDeployment",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(GameServerDeploymentsServiceServer).CreateGameServerDeployment(ctx, req.(*CreateGameServerDeploymentRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _GameServerDeploymentsService_DeleteGameServerDeployment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(DeleteGameServerDeploymentRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(GameServerDeploymentsServiceServer).DeleteGameServerDeployment(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.cloud.gaming.v1beta.GameServerDeploymentsService/DeleteGameServerDeployment",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(GameServerDeploymentsServiceServer).DeleteGameServerDeployment(ctx, req.(*DeleteGameServerDeploymentRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _GameServerDeploymentsService_UpdateGameServerDeployment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(UpdateGameServerDeploymentRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(GameServerDeploymentsServiceServer).UpdateGameServerDeployment(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.cloud.gaming.v1beta.GameServerDeploymentsService/UpdateGameServerDeployment",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(GameServerDeploymentsServiceServer).UpdateGameServerDeployment(ctx, req.(*UpdateGameServerDeploymentRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _GameServerDeploymentsService_GetGameServerDeploymentRollout_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GetGameServerDeploymentRolloutRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(GameServerDeploymentsServiceServer).GetGameServerDeploymentRollout(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.cloud.gaming.v1beta.GameServerDeploymentsService/GetGameServerDeploymentRollout",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(GameServerDeploymentsServiceServer).GetGameServerDeploymentRollout(ctx, req.(*GetGameServerDeploymentRolloutRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _GameServerDeploymentsService_UpdateGameServerDeploymentRollout_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(UpdateGameServerDeploymentRolloutRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(GameServerDeploymentsServiceServer).UpdateGameServerDeploymentRollout(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.cloud.gaming.v1beta.GameServerDeploymentsService/UpdateGameServerDeploymentRollout",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(GameServerDeploymentsServiceServer).UpdateGameServerDeploymentRollout(ctx, req.(*UpdateGameServerDeploymentRolloutRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _GameServerDeploymentsService_PreviewGameServerDeploymentRollout_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(PreviewGameServerDeploymentRolloutRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(GameServerDeploymentsServiceServer).PreviewGameServerDeploymentRollout(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.cloud.gaming.v1beta.GameServerDeploymentsService/PreviewGameServerDeploymentRollout",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(GameServerDeploymentsServiceServer).PreviewGameServerDeploymentRollout(ctx, req.(*PreviewGameServerDeploymentRolloutRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _GameServerDeploymentsService_FetchDeploymentState_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(FetchDeploymentStateRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(GameServerDeploymentsServiceServer).FetchDeploymentState(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.cloud.gaming.v1beta.GameServerDeploymentsService/FetchDeploymentState",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(GameServerDeploymentsServiceServer).FetchDeploymentState(ctx, req.(*FetchDeploymentStateRequest))
	}
	return interceptor(ctx, in, info, handler)
}

var _GameServerDeploymentsService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "google.cloud.gaming.v1beta.GameServerDeploymentsService",
	HandlerType: (*GameServerDeploymentsServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "ListGameServerDeployments",
			Handler:    _GameServerDeploymentsService_ListGameServerDeployments_Handler,
		},
		{
			MethodName: "GetGameServerDeployment",
			Handler:    _GameServerDeploymentsService_GetGameServerDeployment_Handler,
		},
		{
			MethodName: "CreateGameServerDeployment",
			Handler:    _GameServerDeploymentsService_CreateGameServerDeployment_Handler,
		},
		{
			MethodName: "DeleteGameServerDeployment",
			Handler:    _GameServerDeploymentsService_DeleteGameServerDeployment_Handler,
		},
		{
			MethodName: "UpdateGameServerDeployment",
			Handler:    _GameServerDeploymentsService_UpdateGameServerDeployment_Handler,
		},
		{
			MethodName: "GetGameServerDeploymentRollout",
			Handler:    _GameServerDeploymentsService_GetGameServerDeploymentRollout_Handler,
		},
		{
			MethodName: "UpdateGameServerDeploymentRollout",
			Handler:    _GameServerDeploymentsService_UpdateGameServerDeploymentRollout_Handler,
		},
		{
			MethodName: "PreviewGameServerDeploymentRollout",
			Handler:    _GameServerDeploymentsService_PreviewGameServerDeploymentRollout_Handler,
		},
		{
			MethodName: "FetchDeploymentState",
			Handler:    _GameServerDeploymentsService_FetchDeploymentState_Handler,
		},
	},
	Streams:  []grpc.StreamDesc{},
	Metadata: "google/cloud/gaming/v1beta/game_server_deployments_service.proto",
}
