// Code generated by protoc-gen-go. DO NOT EDIT.
// source: google/ads/googleads/v3/services/change_status_service.proto

package services

import (
	context "context"
	fmt "fmt"
	math "math"

	proto "github.com/golang/protobuf/proto"
	resources "google.golang.org/genproto/googleapis/ads/googleads/v3/resources"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
)

// 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.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Request message for '[ChangeStatusService.GetChangeStatus][google.ads.googleads.v3.services.ChangeStatusService.GetChangeStatus]'.
type GetChangeStatusRequest struct {
	// Required. The resource name of the change status to fetch.
	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

func (m *GetChangeStatusRequest) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GetChangeStatusRequest.Unmarshal(m, b)
}
func (m *GetChangeStatusRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GetChangeStatusRequest.Marshal(b, m, deterministic)
}
func (m *GetChangeStatusRequest) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GetChangeStatusRequest.Merge(m, src)
}
func (m *GetChangeStatusRequest) XXX_Size() int {
	return xxx_messageInfo_GetChangeStatusRequest.Size(m)
}
func (m *GetChangeStatusRequest) XXX_DiscardUnknown() {
	xxx_messageInfo_GetChangeStatusRequest.DiscardUnknown(m)
}

var xxx_messageInfo_GetChangeStatusRequest proto.InternalMessageInfo

func (m *GetChangeStatusRequest) GetResourceName() string {
	if m != nil {
		return m.ResourceName
	}
	return ""
}

func init() {
	proto.RegisterType((*GetChangeStatusRequest)(nil), "google.ads.googleads.v3.services.GetChangeStatusRequest")
}

func init() {
	proto.RegisterFile("google/ads/googleads/v3/services/change_status_service.proto", fileDescriptor_3052f9cea2195dd0)
}

var fileDescriptor_3052f9cea2195dd0 = []byte{
	// 412 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xcf, 0x8a, 0xd3, 0x40,
	0x18, 0x27, 0x29, 0x08, 0x06, 0x45, 0x88, 0xa0, 0x25, 0x0a, 0x96, 0xd2, 0x43, 0xe9, 0x61, 0x46,
	0x0c, 0x82, 0x8c, 0x7a, 0x98, 0x08, 0xd6, 0x93, 0x94, 0x16, 0x7a, 0x90, 0x40, 0x98, 0x26, 0x63,
	0x1a, 0x48, 0x66, 0x6a, 0x66, 0x92, 0x8b, 0x78, 0xf1, 0x15, 0x7c, 0x03, 0x8f, 0x3e, 0x87, 0xa7,
	0x5e, 0xf7, 0xb6, 0xa7, 0x3d, 0xec, 0x69, 0xdf, 0x60, 0x4f, 0xbb, 0x24, 0x93, 0x49, 0xd3, 0xdd,
	0x96, 0xde, 0x7e, 0xe4, 0xf7, 0xef, 0xfb, 0xbe, 0x89, 0xf5, 0x21, 0xe6, 0x3c, 0x4e, 0x29, 0x24,
	0x91, 0x80, 0x0a, 0x56, 0xa8, 0x74, 0xa1, 0xa0, 0x79, 0x99, 0x84, 0x54, 0xc0, 0x70, 0x4d, 0x58,
	0x4c, 0x03, 0x21, 0x89, 0x2c, 0x44, 0xd0, 0x7c, 0x06, 0x9b, 0x9c, 0x4b, 0x6e, 0x0f, 0x94, 0x05,
	0x90, 0x48, 0x80, 0xd6, 0x0d, 0x4a, 0x17, 0x68, 0xb7, 0xf3, 0xf6, 0x58, 0x7e, 0x4e, 0x05, 0x2f,
	0xf2, 0x7b, 0x05, 0x2a, 0xd8, 0x79, 0xa9, 0x6d, 0x9b, 0x04, 0x12, 0xc6, 0xb8, 0x24, 0x32, 0xe1,
	0x4c, 0xb3, 0xcf, 0x3b, 0x6c, 0x98, 0x26, 0x94, 0xc9, 0x86, 0x78, 0xd5, 0x21, 0xbe, 0x27, 0x34,
	0x8d, 0x82, 0x15, 0x5d, 0x93, 0x32, 0xe1, 0xb9, 0x12, 0x0c, 0x3d, 0xeb, 0xd9, 0x94, 0xca, 0x4f,
	0x75, 0xe3, 0xa2, 0x2e, 0x9c, 0xd3, 0x1f, 0x05, 0x15, 0xd2, 0x1e, 0x5b, 0x8f, 0xf5, 0x48, 0x01,
	0x23, 0x19, 0xed, 0x1b, 0x03, 0x63, 0xfc, 0xd0, 0xeb, 0x5d, 0x60, 0x73, 0xfe, 0x48, 0x33, 0x5f,
	0x49, 0x46, 0xdf, 0x5c, 0x1b, 0xd6, 0xd3, 0x6e, 0xc2, 0x42, 0xed, 0x6a, 0xff, 0x37, 0xac, 0x27,
	0x77, 0xc2, 0xed, 0x77, 0xe0, 0xd4, 0x85, 0xc0, 0xe1, 0x79, 0x1c, 0x78, 0xd4, 0xd9, 0x5e, 0x0e,
	0x74, 0x7d, 0xc3, 0xcf, 0xe7, 0x78, 0x7f, 0x83, 0xdf, 0x67, 0x97, 0x7f, 0xcc, 0xd7, 0x36, 0xa8,
	0xae, 0xfd, 0x73, 0x8f, 0xf9, 0x18, 0x16, 0x42, 0xf2, 0x8c, 0xe6, 0x02, 0x4e, 0x9a, 0xf3, 0xab,
	0x10, 0x38, 0xf9, 0xe5, 0xbc, 0xd8, 0xe2, 0xfe, 0xae, 0xaf, 0x41, 0x9b, 0x44, 0x80, 0x90, 0x67,
	0xde, 0x8d, 0x61, 0x8d, 0x42, 0x9e, 0x9d, 0xdc, 0xca, 0xeb, 0x1f, 0xb8, 0xd0, 0xac, 0x7a, 0x82,
	0x99, 0xf1, 0xed, 0x4b, 0xe3, 0x8e, 0x79, 0x4a, 0x58, 0x0c, 0x78, 0x1e, 0xc3, 0x98, 0xb2, 0xfa,
	0x81, 0xe0, 0xae, 0xef, 0xf8, 0x2f, 0xf9, 0x5e, 0x83, 0xbf, 0x66, 0x6f, 0x8a, 0xf1, 0x3f, 0x73,
	0x30, 0x55, 0x81, 0x38, 0x12, 0x40, 0xc1, 0x0a, 0x2d, 0x5d, 0xd0, 0x14, 0x8b, 0xad, 0x96, 0xf8,
	0x38, 0x12, 0x7e, 0x2b, 0xf1, 0x97, 0xae, 0xaf, 0x25, 0x57, 0xe6, 0x48, 0x7d, 0x47, 0x08, 0x47,
	0x02, 0xa1, 0x56, 0x84, 0xd0, 0xd2, 0x45, 0x48, 0xcb, 0x56, 0x0f, 0xea, 0x39, 0xdd, 0xdb, 0x00,
	0x00, 0x00, 0xff, 0xff, 0x61, 0x3a, 0x08, 0x1b, 0x39, 0x03, 0x00, 0x00,
}

// 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

// ChangeStatusServiceClient is the client API for ChangeStatusService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type ChangeStatusServiceClient interface {
	// Returns the requested change status in full detail.
	GetChangeStatus(ctx context.Context, in *GetChangeStatusRequest, opts ...grpc.CallOption) (*resources.ChangeStatus, error)
}

type changeStatusServiceClient struct {
	cc grpc.ClientConnInterface
}

func NewChangeStatusServiceClient(cc grpc.ClientConnInterface) ChangeStatusServiceClient {
	return &changeStatusServiceClient{cc}
}

func (c *changeStatusServiceClient) GetChangeStatus(ctx context.Context, in *GetChangeStatusRequest, opts ...grpc.CallOption) (*resources.ChangeStatus, error) {
	out := new(resources.ChangeStatus)
	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.ChangeStatusService/GetChangeStatus", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// ChangeStatusServiceServer is the server API for ChangeStatusService service.
type ChangeStatusServiceServer interface {
	// Returns the requested change status in full detail.
	GetChangeStatus(context.Context, *GetChangeStatusRequest) (*resources.ChangeStatus, error)
}

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

func (*UnimplementedChangeStatusServiceServer) GetChangeStatus(ctx context.Context, req *GetChangeStatusRequest) (*resources.ChangeStatus, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetChangeStatus not implemented")
}

func RegisterChangeStatusServiceServer(s *grpc.Server, srv ChangeStatusServiceServer) {
	s.RegisterService(&_ChangeStatusService_serviceDesc, srv)
}

func _ChangeStatusService_GetChangeStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GetChangeStatusRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(ChangeStatusServiceServer).GetChangeStatus(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.ads.googleads.v3.services.ChangeStatusService/GetChangeStatus",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(ChangeStatusServiceServer).GetChangeStatus(ctx, req.(*GetChangeStatusRequest))
	}
	return interceptor(ctx, in, info, handler)
}

var _ChangeStatusService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "google.ads.googleads.v3.services.ChangeStatusService",
	HandlerType: (*ChangeStatusServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "GetChangeStatus",
			Handler:    _ChangeStatusService_GetChangeStatus_Handler,
		},
	},
	Streams:  []grpc.StreamDesc{},
	Metadata: "google/ads/googleads/v3/services/change_status_service.proto",
}
