//
//Сервис реализует функционал управления коммерческими возможностями(КВ).
//КВ это описание доступных технологических планов(ТП) на ОРПОНе(на доме)

// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
// - protoc-gen-go-grpc v1.3.0
// - protoc             v4.23.1
// source: keyapis/subscription/v1/keyapis_subscription_offer_v1.proto

package keyapis_subscription_v1

import (
	context "context"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
)

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
// Requires gRPC-Go v1.32.0 or later.
const _ = grpc.SupportPackageIsVersion7

const (
	OfferService_GetOffer_FullMethodName      = "/keyapis.subscription.v1.OfferService/GetOffer"
	OfferService_GetOfferList_FullMethodName  = "/keyapis.subscription.v1.OfferService/GetOfferList"
	OfferService_GetOfferCount_FullMethodName = "/keyapis.subscription.v1.OfferService/GetOfferCount"
)

// OfferServiceClient is the client API for OfferService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
type OfferServiceClient interface {
	// Метод получения коммерческой возможности.
	// Метод доступен для: admin, mrf, master, ltp_first, service, application(subscription:read или subscription:edit)
	GetOffer(ctx context.Context, in *GetOfferRequest, opts ...grpc.CallOption) (*GetOfferResponse, error)
	// Метод получения списка коммерческих возможностей.
	// Метод доступен для: admin, mrf, master, external_seller, ltp_first, owner, employee, service, application(subscription:read или subscription:edit)
	GetOfferList(ctx context.Context, in *GetOfferListRequest, opts ...grpc.CallOption) (OfferService_GetOfferListClient, error)
	// Метод получения количества коммерческих возможностей.
	// Метод доступен для: admin, mrf, master, external_seller, ltp_first, owner, employee, service, application(subscription:read или subscription:edit)
	GetOfferCount(ctx context.Context, in *GetOfferCountRequest, opts ...grpc.CallOption) (*GetOfferCountResponse, error)
}

type offerServiceClient struct {
	cc grpc.ClientConnInterface
}

func NewOfferServiceClient(cc grpc.ClientConnInterface) OfferServiceClient {
	return &offerServiceClient{cc}
}

func (c *offerServiceClient) GetOffer(ctx context.Context, in *GetOfferRequest, opts ...grpc.CallOption) (*GetOfferResponse, error) {
	out := new(GetOfferResponse)
	err := c.cc.Invoke(ctx, OfferService_GetOffer_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *offerServiceClient) GetOfferList(ctx context.Context, in *GetOfferListRequest, opts ...grpc.CallOption) (OfferService_GetOfferListClient, error) {
	stream, err := c.cc.NewStream(ctx, &OfferService_ServiceDesc.Streams[0], OfferService_GetOfferList_FullMethodName, opts...)
	if err != nil {
		return nil, err
	}
	x := &offerServiceGetOfferListClient{stream}
	if err := x.ClientStream.SendMsg(in); err != nil {
		return nil, err
	}
	if err := x.ClientStream.CloseSend(); err != nil {
		return nil, err
	}
	return x, nil
}

type OfferService_GetOfferListClient interface {
	Recv() (*GetOfferListResponse, error)
	grpc.ClientStream
}

type offerServiceGetOfferListClient struct {
	grpc.ClientStream
}

func (x *offerServiceGetOfferListClient) Recv() (*GetOfferListResponse, error) {
	m := new(GetOfferListResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *offerServiceClient) GetOfferCount(ctx context.Context, in *GetOfferCountRequest, opts ...grpc.CallOption) (*GetOfferCountResponse, error) {
	out := new(GetOfferCountResponse)
	err := c.cc.Invoke(ctx, OfferService_GetOfferCount_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// OfferServiceServer is the server API for OfferService service.
// All implementations should embed UnimplementedOfferServiceServer
// for forward compatibility
type OfferServiceServer interface {
	// Метод получения коммерческой возможности.
	// Метод доступен для: admin, mrf, master, ltp_first, service, application(subscription:read или subscription:edit)
	GetOffer(context.Context, *GetOfferRequest) (*GetOfferResponse, error)
	// Метод получения списка коммерческих возможностей.
	// Метод доступен для: admin, mrf, master, external_seller, ltp_first, owner, employee, service, application(subscription:read или subscription:edit)
	GetOfferList(*GetOfferListRequest, OfferService_GetOfferListServer) error
	// Метод получения количества коммерческих возможностей.
	// Метод доступен для: admin, mrf, master, external_seller, ltp_first, owner, employee, service, application(subscription:read или subscription:edit)
	GetOfferCount(context.Context, *GetOfferCountRequest) (*GetOfferCountResponse, error)
}

// UnimplementedOfferServiceServer should be embedded to have forward compatible implementations.
type UnimplementedOfferServiceServer struct {
}

func (UnimplementedOfferServiceServer) GetOffer(context.Context, *GetOfferRequest) (*GetOfferResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetOffer not implemented")
}
func (UnimplementedOfferServiceServer) GetOfferList(*GetOfferListRequest, OfferService_GetOfferListServer) error {
	return status.Errorf(codes.Unimplemented, "method GetOfferList not implemented")
}
func (UnimplementedOfferServiceServer) GetOfferCount(context.Context, *GetOfferCountRequest) (*GetOfferCountResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetOfferCount not implemented")
}

// UnsafeOfferServiceServer may be embedded to opt out of forward compatibility for this service.
// Use of this interface is not recommended, as added methods to OfferServiceServer will
// result in compilation errors.
type UnsafeOfferServiceServer interface {
	mustEmbedUnimplementedOfferServiceServer()
}

func RegisterOfferServiceServer(s grpc.ServiceRegistrar, srv OfferServiceServer) {
	s.RegisterService(&OfferService_ServiceDesc, srv)
}

func _OfferService_GetOffer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GetOfferRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(OfferServiceServer).GetOffer(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: OfferService_GetOffer_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(OfferServiceServer).GetOffer(ctx, req.(*GetOfferRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _OfferService_GetOfferList_Handler(srv interface{}, stream grpc.ServerStream) error {
	m := new(GetOfferListRequest)
	if err := stream.RecvMsg(m); err != nil {
		return err
	}
	return srv.(OfferServiceServer).GetOfferList(m, &offerServiceGetOfferListServer{stream})
}

type OfferService_GetOfferListServer interface {
	Send(*GetOfferListResponse) error
	grpc.ServerStream
}

type offerServiceGetOfferListServer struct {
	grpc.ServerStream
}

func (x *offerServiceGetOfferListServer) Send(m *GetOfferListResponse) error {
	return x.ServerStream.SendMsg(m)
}

func _OfferService_GetOfferCount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GetOfferCountRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(OfferServiceServer).GetOfferCount(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: OfferService_GetOfferCount_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(OfferServiceServer).GetOfferCount(ctx, req.(*GetOfferCountRequest))
	}
	return interceptor(ctx, in, info, handler)
}

// OfferService_ServiceDesc is the grpc.ServiceDesc for OfferService service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
var OfferService_ServiceDesc = grpc.ServiceDesc{
	ServiceName: "keyapis.subscription.v1.OfferService",
	HandlerType: (*OfferServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "GetOffer",
			Handler:    _OfferService_GetOffer_Handler,
		},
		{
			MethodName: "GetOfferCount",
			Handler:    _OfferService_GetOfferCount_Handler,
		},
	},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "GetOfferList",
			Handler:       _OfferService_GetOfferList_Handler,
			ServerStreams: true,
		},
	},
	Metadata: "keyapis/subscription/v1/keyapis_subscription_offer_v1.proto",
}
