//
//Сервис реализует функционал регистрации в системе RFID-ключей.
//Только зарегистрированные RFID-ключи доступны для активации пользователям

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

package keyapis_rfidregistry_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 (
	RecordService_PostRecord_FullMethodName     = "/keyapis.rfidregistry.v1.RecordService/PostRecord"
	RecordService_GetRecord_FullMethodName      = "/keyapis.rfidregistry.v1.RecordService/GetRecord"
	RecordService_GetRecordList_FullMethodName  = "/keyapis.rfidregistry.v1.RecordService/GetRecordList"
	RecordService_GetRecordCount_FullMethodName = "/keyapis.rfidregistry.v1.RecordService/GetRecordCount"
	RecordService_DeleteRecord_FullMethodName   = "/keyapis.rfidregistry.v1.RecordService/DeleteRecord"
)

// RecordServiceClient is the client API for RecordService 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 RecordServiceClient interface {
	// Метод сохранения записи.
	// Нельзя отвязать ключ, который привязал кто-то другой.
	// Поддерживает создание и обновление.
	// Метод доступен для: admin, service, device_admin
	PostRecord(ctx context.Context, in *PostRecordRequest, opts ...grpc.CallOption) (*PostRecordResponse, error)
	// Метод получения записи.
	// Метод доступен для: admin, service, device_admin
	GetRecord(ctx context.Context, in *GetRecordRequest, opts ...grpc.CallOption) (*GetRecordResponse, error)
	// Метод получения списка записей.
	// Метод доступен для: admin, service, device_admin
	GetRecordList(ctx context.Context, in *GetRecordListRequest, opts ...grpc.CallOption) (RecordService_GetRecordListClient, error)
	// Метод получения количества записей.
	// Метод доступен для: admin, service, device_admin
	GetRecordCount(ctx context.Context, in *GetRecordCountRequest, opts ...grpc.CallOption) (*GetRecordCountResponse, error)
	// Метод удаления записи.
	// Можно удалять только свои записи.
	// Нельзя удалить ключ, если его использует кто-то другой.
	// Метод доступен для: admin, service, device_admin
	DeleteRecord(ctx context.Context, in *DeleteRecordRequest, opts ...grpc.CallOption) (*DeleteRecordResponse, error)
}

type recordServiceClient struct {
	cc grpc.ClientConnInterface
}

func NewRecordServiceClient(cc grpc.ClientConnInterface) RecordServiceClient {
	return &recordServiceClient{cc}
}

func (c *recordServiceClient) PostRecord(ctx context.Context, in *PostRecordRequest, opts ...grpc.CallOption) (*PostRecordResponse, error) {
	out := new(PostRecordResponse)
	err := c.cc.Invoke(ctx, RecordService_PostRecord_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *recordServiceClient) GetRecord(ctx context.Context, in *GetRecordRequest, opts ...grpc.CallOption) (*GetRecordResponse, error) {
	out := new(GetRecordResponse)
	err := c.cc.Invoke(ctx, RecordService_GetRecord_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *recordServiceClient) GetRecordList(ctx context.Context, in *GetRecordListRequest, opts ...grpc.CallOption) (RecordService_GetRecordListClient, error) {
	stream, err := c.cc.NewStream(ctx, &RecordService_ServiceDesc.Streams[0], RecordService_GetRecordList_FullMethodName, opts...)
	if err != nil {
		return nil, err
	}
	x := &recordServiceGetRecordListClient{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 RecordService_GetRecordListClient interface {
	Recv() (*GetRecordListResponse, error)
	grpc.ClientStream
}

type recordServiceGetRecordListClient struct {
	grpc.ClientStream
}

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

func (c *recordServiceClient) GetRecordCount(ctx context.Context, in *GetRecordCountRequest, opts ...grpc.CallOption) (*GetRecordCountResponse, error) {
	out := new(GetRecordCountResponse)
	err := c.cc.Invoke(ctx, RecordService_GetRecordCount_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *recordServiceClient) DeleteRecord(ctx context.Context, in *DeleteRecordRequest, opts ...grpc.CallOption) (*DeleteRecordResponse, error) {
	out := new(DeleteRecordResponse)
	err := c.cc.Invoke(ctx, RecordService_DeleteRecord_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// RecordServiceServer is the server API for RecordService service.
// All implementations should embed UnimplementedRecordServiceServer
// for forward compatibility
type RecordServiceServer interface {
	// Метод сохранения записи.
	// Нельзя отвязать ключ, который привязал кто-то другой.
	// Поддерживает создание и обновление.
	// Метод доступен для: admin, service, device_admin
	PostRecord(context.Context, *PostRecordRequest) (*PostRecordResponse, error)
	// Метод получения записи.
	// Метод доступен для: admin, service, device_admin
	GetRecord(context.Context, *GetRecordRequest) (*GetRecordResponse, error)
	// Метод получения списка записей.
	// Метод доступен для: admin, service, device_admin
	GetRecordList(*GetRecordListRequest, RecordService_GetRecordListServer) error
	// Метод получения количества записей.
	// Метод доступен для: admin, service, device_admin
	GetRecordCount(context.Context, *GetRecordCountRequest) (*GetRecordCountResponse, error)
	// Метод удаления записи.
	// Можно удалять только свои записи.
	// Нельзя удалить ключ, если его использует кто-то другой.
	// Метод доступен для: admin, service, device_admin
	DeleteRecord(context.Context, *DeleteRecordRequest) (*DeleteRecordResponse, error)
}

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

func (UnimplementedRecordServiceServer) PostRecord(context.Context, *PostRecordRequest) (*PostRecordResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method PostRecord not implemented")
}
func (UnimplementedRecordServiceServer) GetRecord(context.Context, *GetRecordRequest) (*GetRecordResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetRecord not implemented")
}
func (UnimplementedRecordServiceServer) GetRecordList(*GetRecordListRequest, RecordService_GetRecordListServer) error {
	return status.Errorf(codes.Unimplemented, "method GetRecordList not implemented")
}
func (UnimplementedRecordServiceServer) GetRecordCount(context.Context, *GetRecordCountRequest) (*GetRecordCountResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetRecordCount not implemented")
}
func (UnimplementedRecordServiceServer) DeleteRecord(context.Context, *DeleteRecordRequest) (*DeleteRecordResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method DeleteRecord not implemented")
}

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

func RegisterRecordServiceServer(s grpc.ServiceRegistrar, srv RecordServiceServer) {
	s.RegisterService(&RecordService_ServiceDesc, srv)
}

func _RecordService_PostRecord_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(PostRecordRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(RecordServiceServer).PostRecord(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: RecordService_PostRecord_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(RecordServiceServer).PostRecord(ctx, req.(*PostRecordRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _RecordService_GetRecord_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GetRecordRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(RecordServiceServer).GetRecord(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: RecordService_GetRecord_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(RecordServiceServer).GetRecord(ctx, req.(*GetRecordRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _RecordService_GetRecordList_Handler(srv interface{}, stream grpc.ServerStream) error {
	m := new(GetRecordListRequest)
	if err := stream.RecvMsg(m); err != nil {
		return err
	}
	return srv.(RecordServiceServer).GetRecordList(m, &recordServiceGetRecordListServer{stream})
}

type RecordService_GetRecordListServer interface {
	Send(*GetRecordListResponse) error
	grpc.ServerStream
}

type recordServiceGetRecordListServer struct {
	grpc.ServerStream
}

func (x *recordServiceGetRecordListServer) Send(m *GetRecordListResponse) error {
	return x.ServerStream.SendMsg(m)
}

func _RecordService_GetRecordCount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GetRecordCountRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(RecordServiceServer).GetRecordCount(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: RecordService_GetRecordCount_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(RecordServiceServer).GetRecordCount(ctx, req.(*GetRecordCountRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _RecordService_DeleteRecord_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(DeleteRecordRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(RecordServiceServer).DeleteRecord(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: RecordService_DeleteRecord_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(RecordServiceServer).DeleteRecord(ctx, req.(*DeleteRecordRequest))
	}
	return interceptor(ctx, in, info, handler)
}

// RecordService_ServiceDesc is the grpc.ServiceDesc for RecordService service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
var RecordService_ServiceDesc = grpc.ServiceDesc{
	ServiceName: "keyapis.rfidregistry.v1.RecordService",
	HandlerType: (*RecordServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "PostRecord",
			Handler:    _RecordService_PostRecord_Handler,
		},
		{
			MethodName: "GetRecord",
			Handler:    _RecordService_GetRecord_Handler,
		},
		{
			MethodName: "GetRecordCount",
			Handler:    _RecordService_GetRecordCount_Handler,
		},
		{
			MethodName: "DeleteRecord",
			Handler:    _RecordService_DeleteRecord_Handler,
		},
	},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "GetRecordList",
			Handler:       _RecordService_GetRecordList_Handler,
			ServerStreams: true,
		},
	},
	Metadata: "keyapis/rfidregistry/v1/keyapis_rfidregistry_record_v1.proto",
}
