// Code generated by protoc-gen-go. DO NOT EDIT.
// source: google/ads/googleads/v3/services/topic_view_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 [TopicViewService.GetTopicView][google.ads.googleads.v3.services.TopicViewService.GetTopicView].
type GetTopicViewRequest struct {
	// Required. The resource name of the topic view 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 *GetTopicViewRequest) Reset()         { *m = GetTopicViewRequest{} }
func (m *GetTopicViewRequest) String() string { return proto.CompactTextString(m) }
func (*GetTopicViewRequest) ProtoMessage()    {}
func (*GetTopicViewRequest) Descriptor() ([]byte, []int) {
	return fileDescriptor_9cc4db1367a5244f, []int{0}
}

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

var xxx_messageInfo_GetTopicViewRequest proto.InternalMessageInfo

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

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

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

var fileDescriptor_9cc4db1367a5244f = []byte{
	// 409 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xcd, 0xca, 0xd3, 0x40,
	0x14, 0x25, 0xf9, 0x40, 0x30, 0x54, 0x90, 0x88, 0x58, 0xa2, 0x60, 0x29, 0x5d, 0x94, 0x52, 0x66,
	0xa0, 0xc1, 0x85, 0x23, 0x22, 0x53, 0x84, 0xba, 0x92, 0x52, 0x25, 0x0b, 0x09, 0x84, 0x69, 0x72,
	0x8d, 0x03, 0x49, 0x26, 0x66, 0xa6, 0xe9, 0x42, 0xdc, 0xf8, 0x0a, 0xbe, 0x81, 0x4b, 0xdf, 0xc0,
	0x57, 0xe8, 0xd6, 0x9d, 0x2b, 0x17, 0xae, 0xf4, 0x15, 0x5c, 0x48, 0x3a, 0x99, 0xb4, 0x95, 0xaf,
	0x74, 0x77, 0x98, 0xf3, 0x73, 0xef, 0x3d, 0x89, 0xf3, 0x38, 0x15, 0x22, 0xcd, 0x00, 0xb3, 0x44,
	0x62, 0x0d, 0x1b, 0x54, 0xfb, 0x58, 0x42, 0x55, 0xf3, 0x18, 0x24, 0x56, 0xa2, 0xe4, 0x71, 0x54,
	0x73, 0xd8, 0x46, 0xed, 0x1b, 0x2a, 0x2b, 0xa1, 0x84, 0x3b, 0xd0, 0x7a, 0xc4, 0x12, 0x89, 0x3a,
	0x2b, 0xaa, 0x7d, 0x64, 0xac, 0xde, 0xec, 0x5c, 0x78, 0x05, 0x52, 0x6c, 0xaa, 0xd3, 0x74, 0x9d,
	0xea, 0x3d, 0x30, 0x9e, 0x92, 0x63, 0x56, 0x14, 0x42, 0x31, 0xc5, 0x45, 0x21, 0x5b, 0xf6, 0xde,
	0x11, 0x1b, 0x67, 0x1c, 0x0a, 0xd5, 0x12, 0x0f, 0x8f, 0x88, 0xb7, 0x1c, 0xb2, 0x24, 0x5a, 0xc3,
	0x3b, 0x56, 0x73, 0x51, 0x69, 0xc1, 0xf0, 0x99, 0x73, 0x67, 0x01, 0xea, 0x75, 0x33, 0x2e, 0xe0,
	0xb0, 0x5d, 0xc1, 0xfb, 0x0d, 0x48, 0xe5, 0x8e, 0x9d, 0x5b, 0x66, 0x99, 0xa8, 0x60, 0x39, 0xf4,
	0xad, 0x81, 0x35, 0xbe, 0x39, 0xbf, 0xfa, 0x49, 0xed, 0x55, 0xcf, 0x30, 0x2f, 0x59, 0x0e, 0xb3,
	0x3f, 0x96, 0x73, 0xbb, 0xb3, 0xbf, 0xd2, 0x27, 0xba, 0xdf, 0x2c, 0xa7, 0x77, 0x1c, 0xeb, 0x3e,
	0x42, 0x97, 0x5a, 0x41, 0xd7, 0xac, 0xe1, 0x4d, 0xcf, 0xda, 0xba, 0xaa, 0x50, 0x67, 0x1a, 0x3e,
	0xff, 0x41, 0x4f, 0xb7, 0xfe, 0xf4, 0xfd, 0xd7, 0x67, 0x1b, 0xb9, 0xd3, 0xa6, 0xdb, 0x0f, 0x27,
	0xcc, 0xd3, 0x78, 0x23, 0x95, 0xc8, 0xa1, 0x92, 0x78, 0xa2, 0xcb, 0x6e, 0x12, 0x24, 0x9e, 0x7c,
	0xf4, 0xee, 0xef, 0x68, 0xff, 0x30, 0xaa, 0x45, 0x25, 0x97, 0x28, 0x16, 0xf9, 0xfc, 0xaf, 0xe5,
	0x8c, 0x62, 0x91, 0x5f, 0xbc, 0x66, 0x7e, 0xf7, 0xff, 0x4e, 0x96, 0x4d, 0xdd, 0x4b, 0xeb, 0xcd,
	0x8b, 0xd6, 0x9a, 0x8a, 0x8c, 0x15, 0x29, 0x12, 0x55, 0x8a, 0x53, 0x28, 0xf6, 0x1f, 0x03, 0x1f,
	0x86, 0x9d, 0xff, 0xf1, 0x9e, 0x18, 0xf0, 0xc5, 0xbe, 0x5a, 0x50, 0xfa, 0xd5, 0x1e, 0x2c, 0x74,
	0x20, 0x4d, 0x24, 0xd2, 0xb0, 0x41, 0x81, 0x8f, 0xda, 0xc1, 0x72, 0x67, 0x24, 0x21, 0x4d, 0x64,
	0xd8, 0x49, 0xc2, 0xc0, 0x0f, 0x8d, 0xe4, 0xb7, 0x3d, 0xd2, 0xef, 0x84, 0xd0, 0x44, 0x12, 0xd2,
	0x89, 0x08, 0x09, 0x7c, 0x42, 0x8c, 0x6c, 0x7d, 0x63, 0xbf, 0xa7, 0xff, 0x2f, 0x00, 0x00, 0xff,
	0xff, 0xac, 0x59, 0x01, 0xa5, 0x1f, 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

// TopicViewServiceClient is the client API for TopicViewService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type TopicViewServiceClient interface {
	// Returns the requested topic view in full detail.
	GetTopicView(ctx context.Context, in *GetTopicViewRequest, opts ...grpc.CallOption) (*resources.TopicView, error)
}

type topicViewServiceClient struct {
	cc grpc.ClientConnInterface
}

func NewTopicViewServiceClient(cc grpc.ClientConnInterface) TopicViewServiceClient {
	return &topicViewServiceClient{cc}
}

func (c *topicViewServiceClient) GetTopicView(ctx context.Context, in *GetTopicViewRequest, opts ...grpc.CallOption) (*resources.TopicView, error) {
	out := new(resources.TopicView)
	err := c.cc.Invoke(ctx, "/google.ads.googleads.v3.services.TopicViewService/GetTopicView", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// TopicViewServiceServer is the server API for TopicViewService service.
type TopicViewServiceServer interface {
	// Returns the requested topic view in full detail.
	GetTopicView(context.Context, *GetTopicViewRequest) (*resources.TopicView, error)
}

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

func (*UnimplementedTopicViewServiceServer) GetTopicView(ctx context.Context, req *GetTopicViewRequest) (*resources.TopicView, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetTopicView not implemented")
}

func RegisterTopicViewServiceServer(s *grpc.Server, srv TopicViewServiceServer) {
	s.RegisterService(&_TopicViewService_serviceDesc, srv)
}

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

var _TopicViewService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "google.ads.googleads.v3.services.TopicViewService",
	HandlerType: (*TopicViewServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "GetTopicView",
			Handler:    _TopicViewService_GetTopicView_Handler,
		},
	},
	Streams:  []grpc.StreamDesc{},
	Metadata: "google/ads/googleads/v3/services/topic_view_service.proto",
}
