//
//Сервис подъездов

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

package keyapis_access_control_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 (
	EntranceService_PostEntrance_FullMethodName            = "/keyapis.access_control.v1.EntranceService/PostEntrance"
	EntranceService_DeleteEntrance_FullMethodName          = "/keyapis.access_control.v1.EntranceService/DeleteEntrance"
	EntranceService_GetEntranceList_FullMethodName         = "/keyapis.access_control.v1.EntranceService/GetEntranceList"
	EntranceService_PutEntranceDeviceAttach_FullMethodName = "/keyapis.access_control.v1.EntranceService/PutEntranceDeviceAttach"
	EntranceService_PutEntranceDeviceDetach_FullMethodName = "/keyapis.access_control.v1.EntranceService/PutEntranceDeviceDetach"
	EntranceService_GetEntranceDeviceList_FullMethodName   = "/keyapis.access_control.v1.EntranceService/GetEntranceDeviceList"
)

// EntranceServiceClient is the client API for EntranceService 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 EntranceServiceClient interface {
	// Метод создания подъезда.
	// Для ролей employee, owner можно сохранять только подъезды квартирограмм, привязанные к домофонной компании пользователя (привязка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE).
	// Метод доступен для: admin, service, owner, employee
	PostEntrance(ctx context.Context, in *PostEntranceRequest, opts ...grpc.CallOption) (*PostEntranceResponse, error)
	// Метод удаления подъезда.
	// Реализуется как удаление квартир по указанному дому и номеру подъезда.
	// Для ролей employee, owner можно удалять только подъезды квартирограмм, привязанные к домофонной компании пользователя (привязка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE).
	// Метод доступен для: admin, service, owner, employee
	DeleteEntrance(ctx context.Context, in *DeleteEntranceRequest, opts ...grpc.CallOption) (*DeleteEntranceResponse, error)
	// Метод получения списка подъездов.
	// При переданном company_ids учитывается тип связи компании и квартирограммы.
	// Если EntranceFilter.CompanyRelationType = DEVICE_SERVICE, то проверяется связка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE.
	// Если EntranceFilter.CompanyRelationType = MANAGEMENT, то проверяется связка в flatgramm_companies.
	// Если EntranceFilter.CompanyRelationType = DEFAULT, то проверяется связка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE.
	// Если EntranceFilter.CompanyRelationType = COMPANY_RELATION_TYPE_UNKNOWN, вернется ошибка валидации.
	// При не переданном company_ids поле EntranceFilter.CompanyRelationType вызовет ошибку валидации.
	// Для ролей employee, owner можно получать только подъезды квартирограмм, привязанные к домофонной компании пользователя (привязка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE).
	// Метод доступен для: admin, service, owner, employee
	GetEntranceList(ctx context.Context, in *GetEntranceListRequest, opts ...grpc.CallOption) (EntranceService_GetEntranceListClient, error)
	// Метод создания связи подъезда и устройства.
	// Для ролей employee, owner можно сохранять только связи с подъездами квартирограмм, привязанным к домофонной компании пользователя (привязка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE).
	// EntranceDevice.RelationType в данном методе не используется.
	// Метод доступен для: admin, service, owner, employee
	PutEntranceDeviceAttach(ctx context.Context, in *PutEntranceDeviceAttachRequest, opts ...grpc.CallOption) (*PutEntranceDeviceAttachResponse, error)
	// Метод удаления связи подъезда и устройства.
	// Для ролей employee, owner можно удалять только связи с подъездами квартирограмм, привязанным к домофонной компании пользователя (привязка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE).
	// EntranceDevice.RelationType в данном методе не используется.
	// Метод доступен для: admin, service, owner, employee
	PutEntranceDeviceDetach(ctx context.Context, in *PutEntranceDeviceDetachRequest, opts ...grpc.CallOption) (*PutEntranceDeviceDetachResponse, error)
	// Метод получения списка связок подъезд-устройство.
	// Для ролей employee, owner можно получать только связи с подъездами квартирограмм, привязанным к домофонной компании пользователя (привязка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE).
	// Метод доступен для: admin, service, owner, employee
	GetEntranceDeviceList(ctx context.Context, in *GetEntranceDeviceListRequest, opts ...grpc.CallOption) (EntranceService_GetEntranceDeviceListClient, error)
}

type entranceServiceClient struct {
	cc grpc.ClientConnInterface
}

func NewEntranceServiceClient(cc grpc.ClientConnInterface) EntranceServiceClient {
	return &entranceServiceClient{cc}
}

func (c *entranceServiceClient) PostEntrance(ctx context.Context, in *PostEntranceRequest, opts ...grpc.CallOption) (*PostEntranceResponse, error) {
	out := new(PostEntranceResponse)
	err := c.cc.Invoke(ctx, EntranceService_PostEntrance_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *entranceServiceClient) DeleteEntrance(ctx context.Context, in *DeleteEntranceRequest, opts ...grpc.CallOption) (*DeleteEntranceResponse, error) {
	out := new(DeleteEntranceResponse)
	err := c.cc.Invoke(ctx, EntranceService_DeleteEntrance_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *entranceServiceClient) GetEntranceList(ctx context.Context, in *GetEntranceListRequest, opts ...grpc.CallOption) (EntranceService_GetEntranceListClient, error) {
	stream, err := c.cc.NewStream(ctx, &EntranceService_ServiceDesc.Streams[0], EntranceService_GetEntranceList_FullMethodName, opts...)
	if err != nil {
		return nil, err
	}
	x := &entranceServiceGetEntranceListClient{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 EntranceService_GetEntranceListClient interface {
	Recv() (*GetEntranceListResponse, error)
	grpc.ClientStream
}

type entranceServiceGetEntranceListClient struct {
	grpc.ClientStream
}

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

func (c *entranceServiceClient) PutEntranceDeviceAttach(ctx context.Context, in *PutEntranceDeviceAttachRequest, opts ...grpc.CallOption) (*PutEntranceDeviceAttachResponse, error) {
	out := new(PutEntranceDeviceAttachResponse)
	err := c.cc.Invoke(ctx, EntranceService_PutEntranceDeviceAttach_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *entranceServiceClient) PutEntranceDeviceDetach(ctx context.Context, in *PutEntranceDeviceDetachRequest, opts ...grpc.CallOption) (*PutEntranceDeviceDetachResponse, error) {
	out := new(PutEntranceDeviceDetachResponse)
	err := c.cc.Invoke(ctx, EntranceService_PutEntranceDeviceDetach_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *entranceServiceClient) GetEntranceDeviceList(ctx context.Context, in *GetEntranceDeviceListRequest, opts ...grpc.CallOption) (EntranceService_GetEntranceDeviceListClient, error) {
	stream, err := c.cc.NewStream(ctx, &EntranceService_ServiceDesc.Streams[1], EntranceService_GetEntranceDeviceList_FullMethodName, opts...)
	if err != nil {
		return nil, err
	}
	x := &entranceServiceGetEntranceDeviceListClient{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 EntranceService_GetEntranceDeviceListClient interface {
	Recv() (*GetEntranceDeviceListResponse, error)
	grpc.ClientStream
}

type entranceServiceGetEntranceDeviceListClient struct {
	grpc.ClientStream
}

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

// EntranceServiceServer is the server API for EntranceService service.
// All implementations should embed UnimplementedEntranceServiceServer
// for forward compatibility
type EntranceServiceServer interface {
	// Метод создания подъезда.
	// Для ролей employee, owner можно сохранять только подъезды квартирограмм, привязанные к домофонной компании пользователя (привязка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE).
	// Метод доступен для: admin, service, owner, employee
	PostEntrance(context.Context, *PostEntranceRequest) (*PostEntranceResponse, error)
	// Метод удаления подъезда.
	// Реализуется как удаление квартир по указанному дому и номеру подъезда.
	// Для ролей employee, owner можно удалять только подъезды квартирограмм, привязанные к домофонной компании пользователя (привязка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE).
	// Метод доступен для: admin, service, owner, employee
	DeleteEntrance(context.Context, *DeleteEntranceRequest) (*DeleteEntranceResponse, error)
	// Метод получения списка подъездов.
	// При переданном company_ids учитывается тип связи компании и квартирограммы.
	// Если EntranceFilter.CompanyRelationType = DEVICE_SERVICE, то проверяется связка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE.
	// Если EntranceFilter.CompanyRelationType = MANAGEMENT, то проверяется связка в flatgramm_companies.
	// Если EntranceFilter.CompanyRelationType = DEFAULT, то проверяется связка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE.
	// Если EntranceFilter.CompanyRelationType = COMPANY_RELATION_TYPE_UNKNOWN, вернется ошибка валидации.
	// При не переданном company_ids поле EntranceFilter.CompanyRelationType вызовет ошибку валидации.
	// Для ролей employee, owner можно получать только подъезды квартирограмм, привязанные к домофонной компании пользователя (привязка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE).
	// Метод доступен для: admin, service, owner, employee
	GetEntranceList(*GetEntranceListRequest, EntranceService_GetEntranceListServer) error
	// Метод создания связи подъезда и устройства.
	// Для ролей employee, owner можно сохранять только связи с подъездами квартирограмм, привязанным к домофонной компании пользователя (привязка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE).
	// EntranceDevice.RelationType в данном методе не используется.
	// Метод доступен для: admin, service, owner, employee
	PutEntranceDeviceAttach(context.Context, *PutEntranceDeviceAttachRequest) (*PutEntranceDeviceAttachResponse, error)
	// Метод удаления связи подъезда и устройства.
	// Для ролей employee, owner можно удалять только связи с подъездами квартирограмм, привязанным к домофонной компании пользователя (привязка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE).
	// EntranceDevice.RelationType в данном методе не используется.
	// Метод доступен для: admin, service, owner, employee
	PutEntranceDeviceDetach(context.Context, *PutEntranceDeviceDetachRequest) (*PutEntranceDeviceDetachResponse, error)
	// Метод получения списка связок подъезд-устройство.
	// Для ролей employee, owner можно получать только связи с подъездами квартирограмм, привязанным к домофонной компании пользователя (привязка компании с типом dc_company_flatgramm.type = DEVICE_SERVICE).
	// Метод доступен для: admin, service, owner, employee
	GetEntranceDeviceList(*GetEntranceDeviceListRequest, EntranceService_GetEntranceDeviceListServer) error
}

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

func (UnimplementedEntranceServiceServer) PostEntrance(context.Context, *PostEntranceRequest) (*PostEntranceResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method PostEntrance not implemented")
}
func (UnimplementedEntranceServiceServer) DeleteEntrance(context.Context, *DeleteEntranceRequest) (*DeleteEntranceResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method DeleteEntrance not implemented")
}
func (UnimplementedEntranceServiceServer) GetEntranceList(*GetEntranceListRequest, EntranceService_GetEntranceListServer) error {
	return status.Errorf(codes.Unimplemented, "method GetEntranceList not implemented")
}
func (UnimplementedEntranceServiceServer) PutEntranceDeviceAttach(context.Context, *PutEntranceDeviceAttachRequest) (*PutEntranceDeviceAttachResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method PutEntranceDeviceAttach not implemented")
}
func (UnimplementedEntranceServiceServer) PutEntranceDeviceDetach(context.Context, *PutEntranceDeviceDetachRequest) (*PutEntranceDeviceDetachResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method PutEntranceDeviceDetach not implemented")
}
func (UnimplementedEntranceServiceServer) GetEntranceDeviceList(*GetEntranceDeviceListRequest, EntranceService_GetEntranceDeviceListServer) error {
	return status.Errorf(codes.Unimplemented, "method GetEntranceDeviceList not implemented")
}

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

func RegisterEntranceServiceServer(s grpc.ServiceRegistrar, srv EntranceServiceServer) {
	s.RegisterService(&EntranceService_ServiceDesc, srv)
}

func _EntranceService_PostEntrance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(PostEntranceRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(EntranceServiceServer).PostEntrance(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: EntranceService_PostEntrance_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(EntranceServiceServer).PostEntrance(ctx, req.(*PostEntranceRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _EntranceService_DeleteEntrance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(DeleteEntranceRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(EntranceServiceServer).DeleteEntrance(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: EntranceService_DeleteEntrance_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(EntranceServiceServer).DeleteEntrance(ctx, req.(*DeleteEntranceRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _EntranceService_GetEntranceList_Handler(srv interface{}, stream grpc.ServerStream) error {
	m := new(GetEntranceListRequest)
	if err := stream.RecvMsg(m); err != nil {
		return err
	}
	return srv.(EntranceServiceServer).GetEntranceList(m, &entranceServiceGetEntranceListServer{stream})
}

type EntranceService_GetEntranceListServer interface {
	Send(*GetEntranceListResponse) error
	grpc.ServerStream
}

type entranceServiceGetEntranceListServer struct {
	grpc.ServerStream
}

func (x *entranceServiceGetEntranceListServer) Send(m *GetEntranceListResponse) error {
	return x.ServerStream.SendMsg(m)
}

func _EntranceService_PutEntranceDeviceAttach_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(PutEntranceDeviceAttachRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(EntranceServiceServer).PutEntranceDeviceAttach(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: EntranceService_PutEntranceDeviceAttach_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(EntranceServiceServer).PutEntranceDeviceAttach(ctx, req.(*PutEntranceDeviceAttachRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _EntranceService_PutEntranceDeviceDetach_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(PutEntranceDeviceDetachRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(EntranceServiceServer).PutEntranceDeviceDetach(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: EntranceService_PutEntranceDeviceDetach_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(EntranceServiceServer).PutEntranceDeviceDetach(ctx, req.(*PutEntranceDeviceDetachRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _EntranceService_GetEntranceDeviceList_Handler(srv interface{}, stream grpc.ServerStream) error {
	m := new(GetEntranceDeviceListRequest)
	if err := stream.RecvMsg(m); err != nil {
		return err
	}
	return srv.(EntranceServiceServer).GetEntranceDeviceList(m, &entranceServiceGetEntranceDeviceListServer{stream})
}

type EntranceService_GetEntranceDeviceListServer interface {
	Send(*GetEntranceDeviceListResponse) error
	grpc.ServerStream
}

type entranceServiceGetEntranceDeviceListServer struct {
	grpc.ServerStream
}

func (x *entranceServiceGetEntranceDeviceListServer) Send(m *GetEntranceDeviceListResponse) error {
	return x.ServerStream.SendMsg(m)
}

// EntranceService_ServiceDesc is the grpc.ServiceDesc for EntranceService service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
var EntranceService_ServiceDesc = grpc.ServiceDesc{
	ServiceName: "keyapis.access_control.v1.EntranceService",
	HandlerType: (*EntranceServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "PostEntrance",
			Handler:    _EntranceService_PostEntrance_Handler,
		},
		{
			MethodName: "DeleteEntrance",
			Handler:    _EntranceService_DeleteEntrance_Handler,
		},
		{
			MethodName: "PutEntranceDeviceAttach",
			Handler:    _EntranceService_PutEntranceDeviceAttach_Handler,
		},
		{
			MethodName: "PutEntranceDeviceDetach",
			Handler:    _EntranceService_PutEntranceDeviceDetach_Handler,
		},
	},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "GetEntranceList",
			Handler:       _EntranceService_GetEntranceList_Handler,
			ServerStreams: true,
		},
		{
			StreamName:    "GetEntranceDeviceList",
			Handler:       _EntranceService_GetEntranceDeviceList_Handler,
			ServerStreams: true,
		},
	},
	Metadata: "keyapis/access_control/v1/keyapis_access_control_entrance_v1.proto",
}
