//
//Сервис реализует функционал управления измерениями

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

package keyapis_telemetry_metric_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 (
	MeasurementService_PostMeasurement_FullMethodName              = "/keyapis.telemetry_metric.v1.MeasurementService/PostMeasurement"
	MeasurementService_PostMeasurementHalfDuplex_FullMethodName    = "/keyapis.telemetry_metric.v1.MeasurementService/PostMeasurementHalfDuplex"
	MeasurementService_GetMeasurementList_FullMethodName           = "/keyapis.telemetry_metric.v1.MeasurementService/GetMeasurementList"
	MeasurementService_GetMeasurementCount_FullMethodName          = "/keyapis.telemetry_metric.v1.MeasurementService/GetMeasurementCount"
	MeasurementService_GetMeasurementConvertedList_FullMethodName  = "/keyapis.telemetry_metric.v1.MeasurementService/GetMeasurementConvertedList"
	MeasurementService_GetMeasurementConvertedCount_FullMethodName = "/keyapis.telemetry_metric.v1.MeasurementService/GetMeasurementConvertedCount"
)

// MeasurementServiceClient is the client API for MeasurementService 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 MeasurementServiceClient interface {
	// Метод сохранения измерений.
	// Метод доступен для: service, application(telemetry:edit)
	PostMeasurement(ctx context.Context, in *PostMeasurementRequest, opts ...grpc.CallOption) (*PostMeasurementResponse, error)
	// Полудуплексный метод сохранения потока измерений.
	// Метод доступен для: service, application(telemetry:edit)
	PostMeasurementHalfDuplex(ctx context.Context, opts ...grpc.CallOption) (MeasurementService_PostMeasurementHalfDuplexClient, error)
	// Метод получения списка измерений.
	// Метод доступен для: service, application(telemetry:read или telemetry:edit)
	GetMeasurementList(ctx context.Context, in *GetMeasurementListRequest, opts ...grpc.CallOption) (MeasurementService_GetMeasurementListClient, error)
	// Метод получения количества измерений.
	// Метод доступен для: service, application(telemetry:read или telemetry:edit)
	GetMeasurementCount(ctx context.Context, in *GetMeasurementCountRequest, opts ...grpc.CallOption) (*GetMeasurementCountResponse, error)
	// Метод получения списка преобразованных измерений.
	// Метод доступен для: service, application(telemetry:read или telemetry:edit)
	GetMeasurementConvertedList(ctx context.Context, in *GetMeasurementConvertedListRequest, opts ...grpc.CallOption) (MeasurementService_GetMeasurementConvertedListClient, error)
	// Метод получения количества преобразованных измерений.
	// Метод доступен для: service, application(telemetry:read или telemetry:edit)
	GetMeasurementConvertedCount(ctx context.Context, in *GetMeasurementConvertedCountRequest, opts ...grpc.CallOption) (*GetMeasurementConvertedCountResponse, error)
}

type measurementServiceClient struct {
	cc grpc.ClientConnInterface
}

func NewMeasurementServiceClient(cc grpc.ClientConnInterface) MeasurementServiceClient {
	return &measurementServiceClient{cc}
}

func (c *measurementServiceClient) PostMeasurement(ctx context.Context, in *PostMeasurementRequest, opts ...grpc.CallOption) (*PostMeasurementResponse, error) {
	out := new(PostMeasurementResponse)
	err := c.cc.Invoke(ctx, MeasurementService_PostMeasurement_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *measurementServiceClient) PostMeasurementHalfDuplex(ctx context.Context, opts ...grpc.CallOption) (MeasurementService_PostMeasurementHalfDuplexClient, error) {
	stream, err := c.cc.NewStream(ctx, &MeasurementService_ServiceDesc.Streams[0], MeasurementService_PostMeasurementHalfDuplex_FullMethodName, opts...)
	if err != nil {
		return nil, err
	}
	x := &measurementServicePostMeasurementHalfDuplexClient{stream}
	return x, nil
}

type MeasurementService_PostMeasurementHalfDuplexClient interface {
	Send(*PostMeasurementHalfDuplexRequest) error
	CloseAndRecv() (*PostMeasurementHalfDuplexResponse, error)
	grpc.ClientStream
}

type measurementServicePostMeasurementHalfDuplexClient struct {
	grpc.ClientStream
}

func (x *measurementServicePostMeasurementHalfDuplexClient) Send(m *PostMeasurementHalfDuplexRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *measurementServicePostMeasurementHalfDuplexClient) CloseAndRecv() (*PostMeasurementHalfDuplexResponse, error) {
	if err := x.ClientStream.CloseSend(); err != nil {
		return nil, err
	}
	m := new(PostMeasurementHalfDuplexResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *measurementServiceClient) GetMeasurementList(ctx context.Context, in *GetMeasurementListRequest, opts ...grpc.CallOption) (MeasurementService_GetMeasurementListClient, error) {
	stream, err := c.cc.NewStream(ctx, &MeasurementService_ServiceDesc.Streams[1], MeasurementService_GetMeasurementList_FullMethodName, opts...)
	if err != nil {
		return nil, err
	}
	x := &measurementServiceGetMeasurementListClient{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 MeasurementService_GetMeasurementListClient interface {
	Recv() (*GetMeasurementListResponse, error)
	grpc.ClientStream
}

type measurementServiceGetMeasurementListClient struct {
	grpc.ClientStream
}

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

func (c *measurementServiceClient) GetMeasurementCount(ctx context.Context, in *GetMeasurementCountRequest, opts ...grpc.CallOption) (*GetMeasurementCountResponse, error) {
	out := new(GetMeasurementCountResponse)
	err := c.cc.Invoke(ctx, MeasurementService_GetMeasurementCount_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *measurementServiceClient) GetMeasurementConvertedList(ctx context.Context, in *GetMeasurementConvertedListRequest, opts ...grpc.CallOption) (MeasurementService_GetMeasurementConvertedListClient, error) {
	stream, err := c.cc.NewStream(ctx, &MeasurementService_ServiceDesc.Streams[2], MeasurementService_GetMeasurementConvertedList_FullMethodName, opts...)
	if err != nil {
		return nil, err
	}
	x := &measurementServiceGetMeasurementConvertedListClient{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 MeasurementService_GetMeasurementConvertedListClient interface {
	Recv() (*GetMeasurementConvertedListResponse, error)
	grpc.ClientStream
}

type measurementServiceGetMeasurementConvertedListClient struct {
	grpc.ClientStream
}

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

func (c *measurementServiceClient) GetMeasurementConvertedCount(ctx context.Context, in *GetMeasurementConvertedCountRequest, opts ...grpc.CallOption) (*GetMeasurementConvertedCountResponse, error) {
	out := new(GetMeasurementConvertedCountResponse)
	err := c.cc.Invoke(ctx, MeasurementService_GetMeasurementConvertedCount_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// MeasurementServiceServer is the server API for MeasurementService service.
// All implementations should embed UnimplementedMeasurementServiceServer
// for forward compatibility
type MeasurementServiceServer interface {
	// Метод сохранения измерений.
	// Метод доступен для: service, application(telemetry:edit)
	PostMeasurement(context.Context, *PostMeasurementRequest) (*PostMeasurementResponse, error)
	// Полудуплексный метод сохранения потока измерений.
	// Метод доступен для: service, application(telemetry:edit)
	PostMeasurementHalfDuplex(MeasurementService_PostMeasurementHalfDuplexServer) error
	// Метод получения списка измерений.
	// Метод доступен для: service, application(telemetry:read или telemetry:edit)
	GetMeasurementList(*GetMeasurementListRequest, MeasurementService_GetMeasurementListServer) error
	// Метод получения количества измерений.
	// Метод доступен для: service, application(telemetry:read или telemetry:edit)
	GetMeasurementCount(context.Context, *GetMeasurementCountRequest) (*GetMeasurementCountResponse, error)
	// Метод получения списка преобразованных измерений.
	// Метод доступен для: service, application(telemetry:read или telemetry:edit)
	GetMeasurementConvertedList(*GetMeasurementConvertedListRequest, MeasurementService_GetMeasurementConvertedListServer) error
	// Метод получения количества преобразованных измерений.
	// Метод доступен для: service, application(telemetry:read или telemetry:edit)
	GetMeasurementConvertedCount(context.Context, *GetMeasurementConvertedCountRequest) (*GetMeasurementConvertedCountResponse, error)
}

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

func (UnimplementedMeasurementServiceServer) PostMeasurement(context.Context, *PostMeasurementRequest) (*PostMeasurementResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method PostMeasurement not implemented")
}
func (UnimplementedMeasurementServiceServer) PostMeasurementHalfDuplex(MeasurementService_PostMeasurementHalfDuplexServer) error {
	return status.Errorf(codes.Unimplemented, "method PostMeasurementHalfDuplex not implemented")
}
func (UnimplementedMeasurementServiceServer) GetMeasurementList(*GetMeasurementListRequest, MeasurementService_GetMeasurementListServer) error {
	return status.Errorf(codes.Unimplemented, "method GetMeasurementList not implemented")
}
func (UnimplementedMeasurementServiceServer) GetMeasurementCount(context.Context, *GetMeasurementCountRequest) (*GetMeasurementCountResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetMeasurementCount not implemented")
}
func (UnimplementedMeasurementServiceServer) GetMeasurementConvertedList(*GetMeasurementConvertedListRequest, MeasurementService_GetMeasurementConvertedListServer) error {
	return status.Errorf(codes.Unimplemented, "method GetMeasurementConvertedList not implemented")
}
func (UnimplementedMeasurementServiceServer) GetMeasurementConvertedCount(context.Context, *GetMeasurementConvertedCountRequest) (*GetMeasurementConvertedCountResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetMeasurementConvertedCount not implemented")
}

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

func RegisterMeasurementServiceServer(s grpc.ServiceRegistrar, srv MeasurementServiceServer) {
	s.RegisterService(&MeasurementService_ServiceDesc, srv)
}

func _MeasurementService_PostMeasurement_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(PostMeasurementRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(MeasurementServiceServer).PostMeasurement(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: MeasurementService_PostMeasurement_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(MeasurementServiceServer).PostMeasurement(ctx, req.(*PostMeasurementRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _MeasurementService_PostMeasurementHalfDuplex_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(MeasurementServiceServer).PostMeasurementHalfDuplex(&measurementServicePostMeasurementHalfDuplexServer{stream})
}

type MeasurementService_PostMeasurementHalfDuplexServer interface {
	SendAndClose(*PostMeasurementHalfDuplexResponse) error
	Recv() (*PostMeasurementHalfDuplexRequest, error)
	grpc.ServerStream
}

type measurementServicePostMeasurementHalfDuplexServer struct {
	grpc.ServerStream
}

func (x *measurementServicePostMeasurementHalfDuplexServer) SendAndClose(m *PostMeasurementHalfDuplexResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *measurementServicePostMeasurementHalfDuplexServer) Recv() (*PostMeasurementHalfDuplexRequest, error) {
	m := new(PostMeasurementHalfDuplexRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func _MeasurementService_GetMeasurementList_Handler(srv interface{}, stream grpc.ServerStream) error {
	m := new(GetMeasurementListRequest)
	if err := stream.RecvMsg(m); err != nil {
		return err
	}
	return srv.(MeasurementServiceServer).GetMeasurementList(m, &measurementServiceGetMeasurementListServer{stream})
}

type MeasurementService_GetMeasurementListServer interface {
	Send(*GetMeasurementListResponse) error
	grpc.ServerStream
}

type measurementServiceGetMeasurementListServer struct {
	grpc.ServerStream
}

func (x *measurementServiceGetMeasurementListServer) Send(m *GetMeasurementListResponse) error {
	return x.ServerStream.SendMsg(m)
}

func _MeasurementService_GetMeasurementCount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GetMeasurementCountRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(MeasurementServiceServer).GetMeasurementCount(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: MeasurementService_GetMeasurementCount_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(MeasurementServiceServer).GetMeasurementCount(ctx, req.(*GetMeasurementCountRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _MeasurementService_GetMeasurementConvertedList_Handler(srv interface{}, stream grpc.ServerStream) error {
	m := new(GetMeasurementConvertedListRequest)
	if err := stream.RecvMsg(m); err != nil {
		return err
	}
	return srv.(MeasurementServiceServer).GetMeasurementConvertedList(m, &measurementServiceGetMeasurementConvertedListServer{stream})
}

type MeasurementService_GetMeasurementConvertedListServer interface {
	Send(*GetMeasurementConvertedListResponse) error
	grpc.ServerStream
}

type measurementServiceGetMeasurementConvertedListServer struct {
	grpc.ServerStream
}

func (x *measurementServiceGetMeasurementConvertedListServer) Send(m *GetMeasurementConvertedListResponse) error {
	return x.ServerStream.SendMsg(m)
}

func _MeasurementService_GetMeasurementConvertedCount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GetMeasurementConvertedCountRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(MeasurementServiceServer).GetMeasurementConvertedCount(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: MeasurementService_GetMeasurementConvertedCount_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(MeasurementServiceServer).GetMeasurementConvertedCount(ctx, req.(*GetMeasurementConvertedCountRequest))
	}
	return interceptor(ctx, in, info, handler)
}

// MeasurementService_ServiceDesc is the grpc.ServiceDesc for MeasurementService service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
var MeasurementService_ServiceDesc = grpc.ServiceDesc{
	ServiceName: "keyapis.telemetry_metric.v1.MeasurementService",
	HandlerType: (*MeasurementServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "PostMeasurement",
			Handler:    _MeasurementService_PostMeasurement_Handler,
		},
		{
			MethodName: "GetMeasurementCount",
			Handler:    _MeasurementService_GetMeasurementCount_Handler,
		},
		{
			MethodName: "GetMeasurementConvertedCount",
			Handler:    _MeasurementService_GetMeasurementConvertedCount_Handler,
		},
	},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "PostMeasurementHalfDuplex",
			Handler:       _MeasurementService_PostMeasurementHalfDuplex_Handler,
			ClientStreams: true,
		},
		{
			StreamName:    "GetMeasurementList",
			Handler:       _MeasurementService_GetMeasurementList_Handler,
			ServerStreams: true,
		},
		{
			StreamName:    "GetMeasurementConvertedList",
			Handler:       _MeasurementService_GetMeasurementConvertedList_Handler,
			ServerStreams: true,
		},
	},
	Metadata: "keyapis/telemetry_metric/v1/keyapis_telemetry_metric_measurement_v1.proto",
}
