// 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 apigateway aliases all exported identifiers in package
// "cloud.google.com/go/apigateway/apiv1/apigatewaypb".
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb.
// Please read https://github.com/googleapis/google-cloud-go/blob/main/migration.md
// for more details.
package apigateway

import (
	src "cloud.google.com/go/apigateway/apiv1/apigatewaypb"
	grpc "google.golang.org/grpc"
)

// Deprecated: Please use consts in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
const (
	ApiConfig_ACTIVATING                        = src.ApiConfig_ACTIVATING
	ApiConfig_ACTIVE                            = src.ApiConfig_ACTIVE
	ApiConfig_CREATING                          = src.ApiConfig_CREATING
	ApiConfig_DELETING                          = src.ApiConfig_DELETING
	ApiConfig_FAILED                            = src.ApiConfig_FAILED
	ApiConfig_STATE_UNSPECIFIED                 = src.ApiConfig_STATE_UNSPECIFIED
	ApiConfig_UPDATING                          = src.ApiConfig_UPDATING
	Api_ACTIVE                                  = src.Api_ACTIVE
	Api_CREATING                                = src.Api_CREATING
	Api_DELETING                                = src.Api_DELETING
	Api_FAILED                                  = src.Api_FAILED
	Api_STATE_UNSPECIFIED                       = src.Api_STATE_UNSPECIFIED
	Api_UPDATING                                = src.Api_UPDATING
	Gateway_ACTIVE                              = src.Gateway_ACTIVE
	Gateway_CREATING                            = src.Gateway_CREATING
	Gateway_DELETING                            = src.Gateway_DELETING
	Gateway_FAILED                              = src.Gateway_FAILED
	Gateway_STATE_UNSPECIFIED                   = src.Gateway_STATE_UNSPECIFIED
	Gateway_UPDATING                            = src.Gateway_UPDATING
	GetApiConfigRequest_BASIC                   = src.GetApiConfigRequest_BASIC
	GetApiConfigRequest_CONFIG_VIEW_UNSPECIFIED = src.GetApiConfigRequest_CONFIG_VIEW_UNSPECIFIED
	GetApiConfigRequest_FULL                    = src.GetApiConfigRequest_FULL
)

// Deprecated: Please use vars in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
var (
	ApiConfig_State_name                                     = src.ApiConfig_State_name
	ApiConfig_State_value                                    = src.ApiConfig_State_value
	Api_State_name                                           = src.Api_State_name
	Api_State_value                                          = src.Api_State_value
	File_google_cloud_apigateway_v1_apigateway_proto         = src.File_google_cloud_apigateway_v1_apigateway_proto
	File_google_cloud_apigateway_v1_apigateway_service_proto = src.File_google_cloud_apigateway_v1_apigateway_service_proto
	Gateway_State_name                                       = src.Gateway_State_name
	Gateway_State_value                                      = src.Gateway_State_value
	GetApiConfigRequest_ConfigView_name                      = src.GetApiConfigRequest_ConfigView_name
	GetApiConfigRequest_ConfigView_value                     = src.GetApiConfigRequest_ConfigView_value
)

// An API that can be served by one or more Gateways.
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type Api = src.Api

// An API Configuration is a combination of settings for both the Managed
// Service and Gateways serving this API Config.
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type ApiConfig = src.ApiConfig

// A lightweight description of a file.
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type ApiConfig_File = src.ApiConfig_File

// A gRPC service definition.
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type ApiConfig_GrpcServiceDefinition = src.ApiConfig_GrpcServiceDefinition

// An OpenAPI Specification Document describing an API.
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type ApiConfig_OpenApiDocument = src.ApiConfig_OpenApiDocument

// All the possible API Config states.
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type ApiConfig_State = src.ApiConfig_State

// ApiGatewayServiceClient is the client API for ApiGatewayService 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/apigateway/apiv1/apigatewaypb
type ApiGatewayServiceClient = src.ApiGatewayServiceClient

// ApiGatewayServiceServer is the server API for ApiGatewayService service.
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type ApiGatewayServiceServer = src.ApiGatewayServiceServer

// All the possible API states.
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type Api_State = src.Api_State

// Request message for ApiGatewayService.CreateApiConfig
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type CreateApiConfigRequest = src.CreateApiConfigRequest

// Request message for ApiGatewayService.CreateApi
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type CreateApiRequest = src.CreateApiRequest

// Request message for ApiGatewayService.CreateGateway
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type CreateGatewayRequest = src.CreateGatewayRequest

// Request message for ApiGatewayService.DeleteApiConfig
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type DeleteApiConfigRequest = src.DeleteApiConfigRequest

// Request message for ApiGatewayService.DeleteApi
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type DeleteApiRequest = src.DeleteApiRequest

// Request message for ApiGatewayService.DeleteGateway
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type DeleteGatewayRequest = src.DeleteGatewayRequest

// A Gateway is an API-aware HTTP proxy. It performs API-Method and/or
// API-Consumer specific actions based on an API Config such as authentication,
// policy enforcement, and backend selection.
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type Gateway = src.Gateway

// All the possible Gateway states.
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type Gateway_State = src.Gateway_State

// Request message for ApiGatewayService.GetApiConfig
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type GetApiConfigRequest = src.GetApiConfigRequest

// Enum to control which fields should be included in the response.
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type GetApiConfigRequest_ConfigView = src.GetApiConfigRequest_ConfigView

// Request message for ApiGatewayService.GetApi
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type GetApiRequest = src.GetApiRequest

// Request message for ApiGatewayService.GetGateway
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type GetGatewayRequest = src.GetGatewayRequest

// Request message for ApiGatewayService.ListApiConfigs
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type ListApiConfigsRequest = src.ListApiConfigsRequest

// Response message for ApiGatewayService.ListApiConfigs
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type ListApiConfigsResponse = src.ListApiConfigsResponse

// Request message for ApiGatewayService.ListApis
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type ListApisRequest = src.ListApisRequest

// Response message for ApiGatewayService.ListApis
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type ListApisResponse = src.ListApisResponse

// Request message for ApiGatewayService.ListGateways
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type ListGatewaysRequest = src.ListGatewaysRequest

// Response message for ApiGatewayService.ListGateways
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type ListGatewaysResponse = src.ListGatewaysResponse

// Represents the metadata of the long-running operation.
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type OperationMetadata = src.OperationMetadata

// Diagnostic information from configuration processing.
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type OperationMetadata_Diagnostic = src.OperationMetadata_Diagnostic

// UnimplementedApiGatewayServiceServer can be embedded to have forward
// compatible implementations.
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type UnimplementedApiGatewayServiceServer = src.UnimplementedApiGatewayServiceServer

// Request message for ApiGatewayService.UpdateApiConfig
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type UpdateApiConfigRequest = src.UpdateApiConfigRequest

// Request message for ApiGatewayService.UpdateApi
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type UpdateApiRequest = src.UpdateApiRequest

// Request message for ApiGatewayService.UpdateGateway
//
// Deprecated: Please use types in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
type UpdateGatewayRequest = src.UpdateGatewayRequest

// Deprecated: Please use funcs in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
func NewApiGatewayServiceClient(cc grpc.ClientConnInterface) ApiGatewayServiceClient {
	return src.NewApiGatewayServiceClient(cc)
}

// Deprecated: Please use funcs in: cloud.google.com/go/apigateway/apiv1/apigatewaypb
func RegisterApiGatewayServiceServer(s *grpc.Server, srv ApiGatewayServiceServer) {
	src.RegisterApiGatewayServiceServer(s, srv)
}
