//
//Сервис реализует функционал управления приборами учёта(ПУ)

// 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_control/v1/keyapis_telemetry_control_device_v1.proto

package keyapis_telemetry_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 (
	DeviceService_PostDeviceFullDuplex_FullMethodName                = "/keyapis.telemetry_control.v1.DeviceService/PostDeviceFullDuplex"
	DeviceService_GetDevice_FullMethodName                           = "/keyapis.telemetry_control.v1.DeviceService/GetDevice"
	DeviceService_GetDeviceList_FullMethodName                       = "/keyapis.telemetry_control.v1.DeviceService/GetDeviceList"
	DeviceService_GetDeviceCount_FullMethodName                      = "/keyapis.telemetry_control.v1.DeviceService/GetDeviceCount"
	DeviceService_PostDeviceReplace_FullMethodName                   = "/keyapis.telemetry_control.v1.DeviceService/PostDeviceReplace"
	DeviceService_PostDevice_FullMethodName                          = "/keyapis.telemetry_control.v1.DeviceService/PostDevice"
	DeviceService_DeleteDevice_FullMethodName                        = "/keyapis.telemetry_control.v1.DeviceService/DeleteDevice"
	DeviceService_PostDeviceIndicator_FullMethodName                 = "/keyapis.telemetry_control.v1.DeviceService/PostDeviceIndicator"
	DeviceService_GetDeviceIndicator_FullMethodName                  = "/keyapis.telemetry_control.v1.DeviceService/GetDeviceIndicator"
	DeviceService_GetDeviceIndicatorList_FullMethodName              = "/keyapis.telemetry_control.v1.DeviceService/GetDeviceIndicatorList"
	DeviceService_GetDeviceIndicatorCount_FullMethodName             = "/keyapis.telemetry_control.v1.DeviceService/GetDeviceIndicatorCount"
	DeviceService_DeleteDeviceIndicator_FullMethodName               = "/keyapis.telemetry_control.v1.DeviceService/DeleteDeviceIndicator"
	DeviceService_GetDeviceIndicatorMetricPointList_FullMethodName   = "/keyapis.telemetry_control.v1.DeviceService/GetDeviceIndicatorMetricPointList"
	DeviceService_GetDeviceIndicatorMetricPointCount_FullMethodName  = "/keyapis.telemetry_control.v1.DeviceService/GetDeviceIndicatorMetricPointCount"
	DeviceService_PutDeviceIndicatorMetricPointAttach_FullMethodName = "/keyapis.telemetry_control.v1.DeviceService/PutDeviceIndicatorMetricPointAttach"
	DeviceService_PutDeviceIndicatorMetricPointDetach_FullMethodName = "/keyapis.telemetry_control.v1.DeviceService/PutDeviceIndicatorMetricPointDetach"
	DeviceService_GetDeviceGroupList_FullMethodName                  = "/keyapis.telemetry_control.v1.DeviceService/GetDeviceGroupList"
	DeviceService_GetDeviceGroupCount_FullMethodName                 = "/keyapis.telemetry_control.v1.DeviceService/GetDeviceGroupCount"
	DeviceService_PutDeviceGroupAttach_FullMethodName                = "/keyapis.telemetry_control.v1.DeviceService/PutDeviceGroupAttach"
	DeviceService_PutDeviceGroupDetach_FullMethodName                = "/keyapis.telemetry_control.v1.DeviceService/PutDeviceGroupDetach"
)

// DeviceServiceClient is the client API for DeviceService 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 DeviceServiceClient interface {
	// Полнодуплексный метод отправки команд на сервер и получения изменения со стороны сервера.
	// Разрешения: telemetry_control:device:list, telemetry_control:device:list:own.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. При наличии разрешений.
	// Метод доступен для: ApiKey: Без учета разрешений
	PostDeviceFullDuplex(ctx context.Context, opts ...grpc.CallOption) (DeviceService_PostDeviceFullDuplexClient, error)
	// Метод получения ПУ.
	// Разрешения: telemetry_control:device:card, telemetry_control:device:card:own.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee, master. При наличии разрешений.
	// Метод доступен для: ApiKey: При наличии разрешений
	GetDevice(ctx context.Context, in *GetDeviceRequest, opts ...grpc.CallOption) (*GetDeviceResponse, error)
	// Метод получения списка приборов учета.
	// Разрешения: telemetry_control:device:list, telemetry_control:device:list:own.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee, master. При наличии разрешений.
	// Метод доступен для: ApiKey: При наличии разрешений
	GetDeviceList(ctx context.Context, in *GetDeviceListRequest, opts ...grpc.CallOption) (DeviceService_GetDeviceListClient, error)
	// Метод получения количества приборов учета.
	// Разрешения: telemetry_control:device:list, telemetry_control:device:list:own.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee, master. При наличии разрешений.
	// Метод доступен для: ApiKey: При наличии разрешений
	GetDeviceCount(ctx context.Context, in *GetDeviceCountRequest, opts ...grpc.CallOption) (*GetDeviceCountResponse, error)
	// Метод замены прибора учета.
	// Создает ПУ и привязывает его индикаторы к ТУ исходного ПУ.
	// Разрешения: telemetry_control:device:save, telemetry_control:device:save:own.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. При наличии разрешений
	PostDeviceReplace(ctx context.Context, in *PostDeviceReplaceRequest, opts ...grpc.CallOption) (*PostDeviceReplaceResponse, error)
	// Метод сохранения прибора учета.
	// Поддерживает создание и обновление.
	// Разрешения: telemetry_control:device:save, telemetry_control:device:save:own.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. При наличии разрешений
	PostDevice(ctx context.Context, in *PostDeviceRequest, opts ...grpc.CallOption) (*PostDeviceResponse, error)
	// Метод удаления прибора учета.
	// Разрешения: telemetry_control:device:remove, telemetry_control:device:remove:own.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. При наличии разрешений
	DeleteDevice(ctx context.Context, in *DeleteDeviceRequest, opts ...grpc.CallOption) (*DeleteDeviceResponse, error)
	// Метод сохранения индикатора.
	// Поддерживает создание и обновление.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений
	PostDeviceIndicator(ctx context.Context, in *PostDeviceIndicatorRequest, opts ...grpc.CallOption) (*PostDeviceIndicatorResponse, error)
	// Метод получения индикатора.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений.
	// Метод доступен для: ApiKey: При наличии разрешений
	GetDeviceIndicator(ctx context.Context, in *GetDeviceIndicatorRequest, opts ...grpc.CallOption) (*GetDeviceIndicatorResponse, error)
	// Метод получения списка индикаторов.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений.
	// Метод доступен для: ApiKey: При наличии разрешений
	GetDeviceIndicatorList(ctx context.Context, in *GetDeviceIndicatorListRequest, opts ...grpc.CallOption) (DeviceService_GetDeviceIndicatorListClient, error)
	// Метод получения количества индикаторов.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений.
	// Метод доступен для: ApiKey: При наличии разрешений
	GetDeviceIndicatorCount(ctx context.Context, in *GetDeviceIndicatorCountRequest, opts ...grpc.CallOption) (*GetDeviceIndicatorCountResponse, error)
	// Метод удаления индикаторa.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений
	DeleteDeviceIndicator(ctx context.Context, in *DeleteDeviceIndicatorRequest, opts ...grpc.CallOption) (*DeleteDeviceIndicatorResponse, error)
	// Метод получения списка связей индикаторов и ТУ.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений.
	// Метод доступен для: ApiKey: При наличии разрешений
	GetDeviceIndicatorMetricPointList(ctx context.Context, in *GetDeviceIndicatorMetricPointListRequest, opts ...grpc.CallOption) (DeviceService_GetDeviceIndicatorMetricPointListClient, error)
	// Метод получения количества связей индикаторов и ТУ.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений.
	// Метод доступен для: ApiKey: При наличии разрешений
	GetDeviceIndicatorMetricPointCount(ctx context.Context, in *GetDeviceIndicatorMetricPointCountRequest, opts ...grpc.CallOption) (*GetDeviceIndicatorMetricPointCountResponse, error)
	// Метод сохранения связи индикаторов и ТУ.
	// Поддерживает только создание связи.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений
	PutDeviceIndicatorMetricPointAttach(ctx context.Context, in *PutDeviceIndicatorMetricPointAttachRequest, opts ...grpc.CallOption) (*PutDeviceIndicatorMetricPointAttachResponse, error)
	// Метод удаления связи индикаторов и ТУ.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений
	PutDeviceIndicatorMetricPointDetach(ctx context.Context, in *PutDeviceIndicatorMetricPointDetachRequest, opts ...grpc.CallOption) (*PutDeviceIndicatorMetricPointDetachResponse, error)
	// Метод получения списка связей ПУ и группы пользователя.
	// Метод доступен для: Token: admin, service, bti, seller. Без учета разрешений
	GetDeviceGroupList(ctx context.Context, in *GetDeviceGroupListRequest, opts ...grpc.CallOption) (DeviceService_GetDeviceGroupListClient, error)
	// Метод получения количества связей ПУ и группы пользователя.
	// Метод доступен для: Token: admin, service, bti, seller. Без учета разрешений
	GetDeviceGroupCount(ctx context.Context, in *GetDeviceGroupCountRequest, opts ...grpc.CallOption) (*GetDeviceGroupCountResponse, error)
	// Метод сохранения связей ПУ и группы пользователя.
	// Поддерживает только создание.
	// Метод доступен для: Token: admin, service, bti, seller. Без учета разрешений
	PutDeviceGroupAttach(ctx context.Context, in *PutDeviceGroupAttachRequest, opts ...grpc.CallOption) (*PutDeviceGroupAttachResponse, error)
	// Метод удаления связей ПУ и группы пользователя.
	// Метод доступен для: Token: admin, service, bti, seller. Без учета разрешений
	PutDeviceGroupDetach(ctx context.Context, in *PutDeviceGroupDetachRequest, opts ...grpc.CallOption) (*PutDeviceGroupDetachResponse, error)
}

type deviceServiceClient struct {
	cc grpc.ClientConnInterface
}

func NewDeviceServiceClient(cc grpc.ClientConnInterface) DeviceServiceClient {
	return &deviceServiceClient{cc}
}

func (c *deviceServiceClient) PostDeviceFullDuplex(ctx context.Context, opts ...grpc.CallOption) (DeviceService_PostDeviceFullDuplexClient, error) {
	stream, err := c.cc.NewStream(ctx, &DeviceService_ServiceDesc.Streams[0], DeviceService_PostDeviceFullDuplex_FullMethodName, opts...)
	if err != nil {
		return nil, err
	}
	x := &deviceServicePostDeviceFullDuplexClient{stream}
	return x, nil
}

type DeviceService_PostDeviceFullDuplexClient interface {
	Send(*PostDeviceFullDuplexRequest) error
	Recv() (*PostDeviceFullDuplexResponse, error)
	grpc.ClientStream
}

type deviceServicePostDeviceFullDuplexClient struct {
	grpc.ClientStream
}

func (x *deviceServicePostDeviceFullDuplexClient) Send(m *PostDeviceFullDuplexRequest) error {
	return x.ClientStream.SendMsg(m)
}

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

func (c *deviceServiceClient) GetDevice(ctx context.Context, in *GetDeviceRequest, opts ...grpc.CallOption) (*GetDeviceResponse, error) {
	out := new(GetDeviceResponse)
	err := c.cc.Invoke(ctx, DeviceService_GetDevice_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *deviceServiceClient) GetDeviceList(ctx context.Context, in *GetDeviceListRequest, opts ...grpc.CallOption) (DeviceService_GetDeviceListClient, error) {
	stream, err := c.cc.NewStream(ctx, &DeviceService_ServiceDesc.Streams[1], DeviceService_GetDeviceList_FullMethodName, opts...)
	if err != nil {
		return nil, err
	}
	x := &deviceServiceGetDeviceListClient{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 DeviceService_GetDeviceListClient interface {
	Recv() (*GetDeviceListResponse, error)
	grpc.ClientStream
}

type deviceServiceGetDeviceListClient struct {
	grpc.ClientStream
}

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

func (c *deviceServiceClient) GetDeviceCount(ctx context.Context, in *GetDeviceCountRequest, opts ...grpc.CallOption) (*GetDeviceCountResponse, error) {
	out := new(GetDeviceCountResponse)
	err := c.cc.Invoke(ctx, DeviceService_GetDeviceCount_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *deviceServiceClient) PostDeviceReplace(ctx context.Context, in *PostDeviceReplaceRequest, opts ...grpc.CallOption) (*PostDeviceReplaceResponse, error) {
	out := new(PostDeviceReplaceResponse)
	err := c.cc.Invoke(ctx, DeviceService_PostDeviceReplace_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *deviceServiceClient) PostDevice(ctx context.Context, in *PostDeviceRequest, opts ...grpc.CallOption) (*PostDeviceResponse, error) {
	out := new(PostDeviceResponse)
	err := c.cc.Invoke(ctx, DeviceService_PostDevice_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *deviceServiceClient) DeleteDevice(ctx context.Context, in *DeleteDeviceRequest, opts ...grpc.CallOption) (*DeleteDeviceResponse, error) {
	out := new(DeleteDeviceResponse)
	err := c.cc.Invoke(ctx, DeviceService_DeleteDevice_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *deviceServiceClient) PostDeviceIndicator(ctx context.Context, in *PostDeviceIndicatorRequest, opts ...grpc.CallOption) (*PostDeviceIndicatorResponse, error) {
	out := new(PostDeviceIndicatorResponse)
	err := c.cc.Invoke(ctx, DeviceService_PostDeviceIndicator_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *deviceServiceClient) GetDeviceIndicator(ctx context.Context, in *GetDeviceIndicatorRequest, opts ...grpc.CallOption) (*GetDeviceIndicatorResponse, error) {
	out := new(GetDeviceIndicatorResponse)
	err := c.cc.Invoke(ctx, DeviceService_GetDeviceIndicator_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *deviceServiceClient) GetDeviceIndicatorList(ctx context.Context, in *GetDeviceIndicatorListRequest, opts ...grpc.CallOption) (DeviceService_GetDeviceIndicatorListClient, error) {
	stream, err := c.cc.NewStream(ctx, &DeviceService_ServiceDesc.Streams[2], DeviceService_GetDeviceIndicatorList_FullMethodName, opts...)
	if err != nil {
		return nil, err
	}
	x := &deviceServiceGetDeviceIndicatorListClient{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 DeviceService_GetDeviceIndicatorListClient interface {
	Recv() (*GetDeviceIndicatorListResponse, error)
	grpc.ClientStream
}

type deviceServiceGetDeviceIndicatorListClient struct {
	grpc.ClientStream
}

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

func (c *deviceServiceClient) GetDeviceIndicatorCount(ctx context.Context, in *GetDeviceIndicatorCountRequest, opts ...grpc.CallOption) (*GetDeviceIndicatorCountResponse, error) {
	out := new(GetDeviceIndicatorCountResponse)
	err := c.cc.Invoke(ctx, DeviceService_GetDeviceIndicatorCount_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *deviceServiceClient) DeleteDeviceIndicator(ctx context.Context, in *DeleteDeviceIndicatorRequest, opts ...grpc.CallOption) (*DeleteDeviceIndicatorResponse, error) {
	out := new(DeleteDeviceIndicatorResponse)
	err := c.cc.Invoke(ctx, DeviceService_DeleteDeviceIndicator_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *deviceServiceClient) GetDeviceIndicatorMetricPointList(ctx context.Context, in *GetDeviceIndicatorMetricPointListRequest, opts ...grpc.CallOption) (DeviceService_GetDeviceIndicatorMetricPointListClient, error) {
	stream, err := c.cc.NewStream(ctx, &DeviceService_ServiceDesc.Streams[3], DeviceService_GetDeviceIndicatorMetricPointList_FullMethodName, opts...)
	if err != nil {
		return nil, err
	}
	x := &deviceServiceGetDeviceIndicatorMetricPointListClient{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 DeviceService_GetDeviceIndicatorMetricPointListClient interface {
	Recv() (*GetDeviceIndicatorMetricPointListResponse, error)
	grpc.ClientStream
}

type deviceServiceGetDeviceIndicatorMetricPointListClient struct {
	grpc.ClientStream
}

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

func (c *deviceServiceClient) GetDeviceIndicatorMetricPointCount(ctx context.Context, in *GetDeviceIndicatorMetricPointCountRequest, opts ...grpc.CallOption) (*GetDeviceIndicatorMetricPointCountResponse, error) {
	out := new(GetDeviceIndicatorMetricPointCountResponse)
	err := c.cc.Invoke(ctx, DeviceService_GetDeviceIndicatorMetricPointCount_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *deviceServiceClient) PutDeviceIndicatorMetricPointAttach(ctx context.Context, in *PutDeviceIndicatorMetricPointAttachRequest, opts ...grpc.CallOption) (*PutDeviceIndicatorMetricPointAttachResponse, error) {
	out := new(PutDeviceIndicatorMetricPointAttachResponse)
	err := c.cc.Invoke(ctx, DeviceService_PutDeviceIndicatorMetricPointAttach_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *deviceServiceClient) PutDeviceIndicatorMetricPointDetach(ctx context.Context, in *PutDeviceIndicatorMetricPointDetachRequest, opts ...grpc.CallOption) (*PutDeviceIndicatorMetricPointDetachResponse, error) {
	out := new(PutDeviceIndicatorMetricPointDetachResponse)
	err := c.cc.Invoke(ctx, DeviceService_PutDeviceIndicatorMetricPointDetach_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *deviceServiceClient) GetDeviceGroupList(ctx context.Context, in *GetDeviceGroupListRequest, opts ...grpc.CallOption) (DeviceService_GetDeviceGroupListClient, error) {
	stream, err := c.cc.NewStream(ctx, &DeviceService_ServiceDesc.Streams[4], DeviceService_GetDeviceGroupList_FullMethodName, opts...)
	if err != nil {
		return nil, err
	}
	x := &deviceServiceGetDeviceGroupListClient{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 DeviceService_GetDeviceGroupListClient interface {
	Recv() (*GetDeviceGroupListResponse, error)
	grpc.ClientStream
}

type deviceServiceGetDeviceGroupListClient struct {
	grpc.ClientStream
}

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

func (c *deviceServiceClient) GetDeviceGroupCount(ctx context.Context, in *GetDeviceGroupCountRequest, opts ...grpc.CallOption) (*GetDeviceGroupCountResponse, error) {
	out := new(GetDeviceGroupCountResponse)
	err := c.cc.Invoke(ctx, DeviceService_GetDeviceGroupCount_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *deviceServiceClient) PutDeviceGroupAttach(ctx context.Context, in *PutDeviceGroupAttachRequest, opts ...grpc.CallOption) (*PutDeviceGroupAttachResponse, error) {
	out := new(PutDeviceGroupAttachResponse)
	err := c.cc.Invoke(ctx, DeviceService_PutDeviceGroupAttach_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *deviceServiceClient) PutDeviceGroupDetach(ctx context.Context, in *PutDeviceGroupDetachRequest, opts ...grpc.CallOption) (*PutDeviceGroupDetachResponse, error) {
	out := new(PutDeviceGroupDetachResponse)
	err := c.cc.Invoke(ctx, DeviceService_PutDeviceGroupDetach_FullMethodName, in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// DeviceServiceServer is the server API for DeviceService service.
// All implementations should embed UnimplementedDeviceServiceServer
// for forward compatibility
type DeviceServiceServer interface {
	// Полнодуплексный метод отправки команд на сервер и получения изменения со стороны сервера.
	// Разрешения: telemetry_control:device:list, telemetry_control:device:list:own.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. При наличии разрешений.
	// Метод доступен для: ApiKey: Без учета разрешений
	PostDeviceFullDuplex(DeviceService_PostDeviceFullDuplexServer) error
	// Метод получения ПУ.
	// Разрешения: telemetry_control:device:card, telemetry_control:device:card:own.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee, master. При наличии разрешений.
	// Метод доступен для: ApiKey: При наличии разрешений
	GetDevice(context.Context, *GetDeviceRequest) (*GetDeviceResponse, error)
	// Метод получения списка приборов учета.
	// Разрешения: telemetry_control:device:list, telemetry_control:device:list:own.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee, master. При наличии разрешений.
	// Метод доступен для: ApiKey: При наличии разрешений
	GetDeviceList(*GetDeviceListRequest, DeviceService_GetDeviceListServer) error
	// Метод получения количества приборов учета.
	// Разрешения: telemetry_control:device:list, telemetry_control:device:list:own.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee, master. При наличии разрешений.
	// Метод доступен для: ApiKey: При наличии разрешений
	GetDeviceCount(context.Context, *GetDeviceCountRequest) (*GetDeviceCountResponse, error)
	// Метод замены прибора учета.
	// Создает ПУ и привязывает его индикаторы к ТУ исходного ПУ.
	// Разрешения: telemetry_control:device:save, telemetry_control:device:save:own.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. При наличии разрешений
	PostDeviceReplace(context.Context, *PostDeviceReplaceRequest) (*PostDeviceReplaceResponse, error)
	// Метод сохранения прибора учета.
	// Поддерживает создание и обновление.
	// Разрешения: telemetry_control:device:save, telemetry_control:device:save:own.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. При наличии разрешений
	PostDevice(context.Context, *PostDeviceRequest) (*PostDeviceResponse, error)
	// Метод удаления прибора учета.
	// Разрешения: telemetry_control:device:remove, telemetry_control:device:remove:own.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. При наличии разрешений
	DeleteDevice(context.Context, *DeleteDeviceRequest) (*DeleteDeviceResponse, error)
	// Метод сохранения индикатора.
	// Поддерживает создание и обновление.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений
	PostDeviceIndicator(context.Context, *PostDeviceIndicatorRequest) (*PostDeviceIndicatorResponse, error)
	// Метод получения индикатора.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений.
	// Метод доступен для: ApiKey: При наличии разрешений
	GetDeviceIndicator(context.Context, *GetDeviceIndicatorRequest) (*GetDeviceIndicatorResponse, error)
	// Метод получения списка индикаторов.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений.
	// Метод доступен для: ApiKey: При наличии разрешений
	GetDeviceIndicatorList(*GetDeviceIndicatorListRequest, DeviceService_GetDeviceIndicatorListServer) error
	// Метод получения количества индикаторов.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений.
	// Метод доступен для: ApiKey: При наличии разрешений
	GetDeviceIndicatorCount(context.Context, *GetDeviceIndicatorCountRequest) (*GetDeviceIndicatorCountResponse, error)
	// Метод удаления индикаторa.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений
	DeleteDeviceIndicator(context.Context, *DeleteDeviceIndicatorRequest) (*DeleteDeviceIndicatorResponse, error)
	// Метод получения списка связей индикаторов и ТУ.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений.
	// Метод доступен для: ApiKey: При наличии разрешений
	GetDeviceIndicatorMetricPointList(*GetDeviceIndicatorMetricPointListRequest, DeviceService_GetDeviceIndicatorMetricPointListServer) error
	// Метод получения количества связей индикаторов и ТУ.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений.
	// Метод доступен для: ApiKey: При наличии разрешений
	GetDeviceIndicatorMetricPointCount(context.Context, *GetDeviceIndicatorMetricPointCountRequest) (*GetDeviceIndicatorMetricPointCountResponse, error)
	// Метод сохранения связи индикаторов и ТУ.
	// Поддерживает только создание связи.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений
	PutDeviceIndicatorMetricPointAttach(context.Context, *PutDeviceIndicatorMetricPointAttachRequest) (*PutDeviceIndicatorMetricPointAttachResponse, error)
	// Метод удаления связи индикаторов и ТУ.
	// Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений
	PutDeviceIndicatorMetricPointDetach(context.Context, *PutDeviceIndicatorMetricPointDetachRequest) (*PutDeviceIndicatorMetricPointDetachResponse, error)
	// Метод получения списка связей ПУ и группы пользователя.
	// Метод доступен для: Token: admin, service, bti, seller. Без учета разрешений
	GetDeviceGroupList(*GetDeviceGroupListRequest, DeviceService_GetDeviceGroupListServer) error
	// Метод получения количества связей ПУ и группы пользователя.
	// Метод доступен для: Token: admin, service, bti, seller. Без учета разрешений
	GetDeviceGroupCount(context.Context, *GetDeviceGroupCountRequest) (*GetDeviceGroupCountResponse, error)
	// Метод сохранения связей ПУ и группы пользователя.
	// Поддерживает только создание.
	// Метод доступен для: Token: admin, service, bti, seller. Без учета разрешений
	PutDeviceGroupAttach(context.Context, *PutDeviceGroupAttachRequest) (*PutDeviceGroupAttachResponse, error)
	// Метод удаления связей ПУ и группы пользователя.
	// Метод доступен для: Token: admin, service, bti, seller. Без учета разрешений
	PutDeviceGroupDetach(context.Context, *PutDeviceGroupDetachRequest) (*PutDeviceGroupDetachResponse, error)
}

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

func (UnimplementedDeviceServiceServer) PostDeviceFullDuplex(DeviceService_PostDeviceFullDuplexServer) error {
	return status.Errorf(codes.Unimplemented, "method PostDeviceFullDuplex not implemented")
}
func (UnimplementedDeviceServiceServer) GetDevice(context.Context, *GetDeviceRequest) (*GetDeviceResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetDevice not implemented")
}
func (UnimplementedDeviceServiceServer) GetDeviceList(*GetDeviceListRequest, DeviceService_GetDeviceListServer) error {
	return status.Errorf(codes.Unimplemented, "method GetDeviceList not implemented")
}
func (UnimplementedDeviceServiceServer) GetDeviceCount(context.Context, *GetDeviceCountRequest) (*GetDeviceCountResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetDeviceCount not implemented")
}
func (UnimplementedDeviceServiceServer) PostDeviceReplace(context.Context, *PostDeviceReplaceRequest) (*PostDeviceReplaceResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method PostDeviceReplace not implemented")
}
func (UnimplementedDeviceServiceServer) PostDevice(context.Context, *PostDeviceRequest) (*PostDeviceResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method PostDevice not implemented")
}
func (UnimplementedDeviceServiceServer) DeleteDevice(context.Context, *DeleteDeviceRequest) (*DeleteDeviceResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method DeleteDevice not implemented")
}
func (UnimplementedDeviceServiceServer) PostDeviceIndicator(context.Context, *PostDeviceIndicatorRequest) (*PostDeviceIndicatorResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method PostDeviceIndicator not implemented")
}
func (UnimplementedDeviceServiceServer) GetDeviceIndicator(context.Context, *GetDeviceIndicatorRequest) (*GetDeviceIndicatorResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetDeviceIndicator not implemented")
}
func (UnimplementedDeviceServiceServer) GetDeviceIndicatorList(*GetDeviceIndicatorListRequest, DeviceService_GetDeviceIndicatorListServer) error {
	return status.Errorf(codes.Unimplemented, "method GetDeviceIndicatorList not implemented")
}
func (UnimplementedDeviceServiceServer) GetDeviceIndicatorCount(context.Context, *GetDeviceIndicatorCountRequest) (*GetDeviceIndicatorCountResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetDeviceIndicatorCount not implemented")
}
func (UnimplementedDeviceServiceServer) DeleteDeviceIndicator(context.Context, *DeleteDeviceIndicatorRequest) (*DeleteDeviceIndicatorResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method DeleteDeviceIndicator not implemented")
}
func (UnimplementedDeviceServiceServer) GetDeviceIndicatorMetricPointList(*GetDeviceIndicatorMetricPointListRequest, DeviceService_GetDeviceIndicatorMetricPointListServer) error {
	return status.Errorf(codes.Unimplemented, "method GetDeviceIndicatorMetricPointList not implemented")
}
func (UnimplementedDeviceServiceServer) GetDeviceIndicatorMetricPointCount(context.Context, *GetDeviceIndicatorMetricPointCountRequest) (*GetDeviceIndicatorMetricPointCountResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetDeviceIndicatorMetricPointCount not implemented")
}
func (UnimplementedDeviceServiceServer) PutDeviceIndicatorMetricPointAttach(context.Context, *PutDeviceIndicatorMetricPointAttachRequest) (*PutDeviceIndicatorMetricPointAttachResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method PutDeviceIndicatorMetricPointAttach not implemented")
}
func (UnimplementedDeviceServiceServer) PutDeviceIndicatorMetricPointDetach(context.Context, *PutDeviceIndicatorMetricPointDetachRequest) (*PutDeviceIndicatorMetricPointDetachResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method PutDeviceIndicatorMetricPointDetach not implemented")
}
func (UnimplementedDeviceServiceServer) GetDeviceGroupList(*GetDeviceGroupListRequest, DeviceService_GetDeviceGroupListServer) error {
	return status.Errorf(codes.Unimplemented, "method GetDeviceGroupList not implemented")
}
func (UnimplementedDeviceServiceServer) GetDeviceGroupCount(context.Context, *GetDeviceGroupCountRequest) (*GetDeviceGroupCountResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetDeviceGroupCount not implemented")
}
func (UnimplementedDeviceServiceServer) PutDeviceGroupAttach(context.Context, *PutDeviceGroupAttachRequest) (*PutDeviceGroupAttachResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method PutDeviceGroupAttach not implemented")
}
func (UnimplementedDeviceServiceServer) PutDeviceGroupDetach(context.Context, *PutDeviceGroupDetachRequest) (*PutDeviceGroupDetachResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method PutDeviceGroupDetach not implemented")
}

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

func RegisterDeviceServiceServer(s grpc.ServiceRegistrar, srv DeviceServiceServer) {
	s.RegisterService(&DeviceService_ServiceDesc, srv)
}

func _DeviceService_PostDeviceFullDuplex_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(DeviceServiceServer).PostDeviceFullDuplex(&deviceServicePostDeviceFullDuplexServer{stream})
}

type DeviceService_PostDeviceFullDuplexServer interface {
	Send(*PostDeviceFullDuplexResponse) error
	Recv() (*PostDeviceFullDuplexRequest, error)
	grpc.ServerStream
}

type deviceServicePostDeviceFullDuplexServer struct {
	grpc.ServerStream
}

func (x *deviceServicePostDeviceFullDuplexServer) Send(m *PostDeviceFullDuplexResponse) error {
	return x.ServerStream.SendMsg(m)
}

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

func _DeviceService_GetDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GetDeviceRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DeviceServiceServer).GetDevice(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: DeviceService_GetDevice_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DeviceServiceServer).GetDevice(ctx, req.(*GetDeviceRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DeviceService_GetDeviceList_Handler(srv interface{}, stream grpc.ServerStream) error {
	m := new(GetDeviceListRequest)
	if err := stream.RecvMsg(m); err != nil {
		return err
	}
	return srv.(DeviceServiceServer).GetDeviceList(m, &deviceServiceGetDeviceListServer{stream})
}

type DeviceService_GetDeviceListServer interface {
	Send(*GetDeviceListResponse) error
	grpc.ServerStream
}

type deviceServiceGetDeviceListServer struct {
	grpc.ServerStream
}

func (x *deviceServiceGetDeviceListServer) Send(m *GetDeviceListResponse) error {
	return x.ServerStream.SendMsg(m)
}

func _DeviceService_GetDeviceCount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GetDeviceCountRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DeviceServiceServer).GetDeviceCount(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: DeviceService_GetDeviceCount_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DeviceServiceServer).GetDeviceCount(ctx, req.(*GetDeviceCountRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DeviceService_PostDeviceReplace_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(PostDeviceReplaceRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DeviceServiceServer).PostDeviceReplace(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: DeviceService_PostDeviceReplace_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DeviceServiceServer).PostDeviceReplace(ctx, req.(*PostDeviceReplaceRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DeviceService_PostDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(PostDeviceRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DeviceServiceServer).PostDevice(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: DeviceService_PostDevice_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DeviceServiceServer).PostDevice(ctx, req.(*PostDeviceRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DeviceService_DeleteDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(DeleteDeviceRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DeviceServiceServer).DeleteDevice(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: DeviceService_DeleteDevice_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DeviceServiceServer).DeleteDevice(ctx, req.(*DeleteDeviceRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DeviceService_PostDeviceIndicator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(PostDeviceIndicatorRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DeviceServiceServer).PostDeviceIndicator(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: DeviceService_PostDeviceIndicator_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DeviceServiceServer).PostDeviceIndicator(ctx, req.(*PostDeviceIndicatorRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DeviceService_GetDeviceIndicator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GetDeviceIndicatorRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DeviceServiceServer).GetDeviceIndicator(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: DeviceService_GetDeviceIndicator_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DeviceServiceServer).GetDeviceIndicator(ctx, req.(*GetDeviceIndicatorRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DeviceService_GetDeviceIndicatorList_Handler(srv interface{}, stream grpc.ServerStream) error {
	m := new(GetDeviceIndicatorListRequest)
	if err := stream.RecvMsg(m); err != nil {
		return err
	}
	return srv.(DeviceServiceServer).GetDeviceIndicatorList(m, &deviceServiceGetDeviceIndicatorListServer{stream})
}

type DeviceService_GetDeviceIndicatorListServer interface {
	Send(*GetDeviceIndicatorListResponse) error
	grpc.ServerStream
}

type deviceServiceGetDeviceIndicatorListServer struct {
	grpc.ServerStream
}

func (x *deviceServiceGetDeviceIndicatorListServer) Send(m *GetDeviceIndicatorListResponse) error {
	return x.ServerStream.SendMsg(m)
}

func _DeviceService_GetDeviceIndicatorCount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GetDeviceIndicatorCountRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DeviceServiceServer).GetDeviceIndicatorCount(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: DeviceService_GetDeviceIndicatorCount_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DeviceServiceServer).GetDeviceIndicatorCount(ctx, req.(*GetDeviceIndicatorCountRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DeviceService_DeleteDeviceIndicator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(DeleteDeviceIndicatorRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DeviceServiceServer).DeleteDeviceIndicator(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: DeviceService_DeleteDeviceIndicator_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DeviceServiceServer).DeleteDeviceIndicator(ctx, req.(*DeleteDeviceIndicatorRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DeviceService_GetDeviceIndicatorMetricPointList_Handler(srv interface{}, stream grpc.ServerStream) error {
	m := new(GetDeviceIndicatorMetricPointListRequest)
	if err := stream.RecvMsg(m); err != nil {
		return err
	}
	return srv.(DeviceServiceServer).GetDeviceIndicatorMetricPointList(m, &deviceServiceGetDeviceIndicatorMetricPointListServer{stream})
}

type DeviceService_GetDeviceIndicatorMetricPointListServer interface {
	Send(*GetDeviceIndicatorMetricPointListResponse) error
	grpc.ServerStream
}

type deviceServiceGetDeviceIndicatorMetricPointListServer struct {
	grpc.ServerStream
}

func (x *deviceServiceGetDeviceIndicatorMetricPointListServer) Send(m *GetDeviceIndicatorMetricPointListResponse) error {
	return x.ServerStream.SendMsg(m)
}

func _DeviceService_GetDeviceIndicatorMetricPointCount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GetDeviceIndicatorMetricPointCountRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DeviceServiceServer).GetDeviceIndicatorMetricPointCount(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: DeviceService_GetDeviceIndicatorMetricPointCount_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DeviceServiceServer).GetDeviceIndicatorMetricPointCount(ctx, req.(*GetDeviceIndicatorMetricPointCountRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DeviceService_PutDeviceIndicatorMetricPointAttach_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(PutDeviceIndicatorMetricPointAttachRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DeviceServiceServer).PutDeviceIndicatorMetricPointAttach(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: DeviceService_PutDeviceIndicatorMetricPointAttach_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DeviceServiceServer).PutDeviceIndicatorMetricPointAttach(ctx, req.(*PutDeviceIndicatorMetricPointAttachRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DeviceService_PutDeviceIndicatorMetricPointDetach_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(PutDeviceIndicatorMetricPointDetachRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DeviceServiceServer).PutDeviceIndicatorMetricPointDetach(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: DeviceService_PutDeviceIndicatorMetricPointDetach_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DeviceServiceServer).PutDeviceIndicatorMetricPointDetach(ctx, req.(*PutDeviceIndicatorMetricPointDetachRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DeviceService_GetDeviceGroupList_Handler(srv interface{}, stream grpc.ServerStream) error {
	m := new(GetDeviceGroupListRequest)
	if err := stream.RecvMsg(m); err != nil {
		return err
	}
	return srv.(DeviceServiceServer).GetDeviceGroupList(m, &deviceServiceGetDeviceGroupListServer{stream})
}

type DeviceService_GetDeviceGroupListServer interface {
	Send(*GetDeviceGroupListResponse) error
	grpc.ServerStream
}

type deviceServiceGetDeviceGroupListServer struct {
	grpc.ServerStream
}

func (x *deviceServiceGetDeviceGroupListServer) Send(m *GetDeviceGroupListResponse) error {
	return x.ServerStream.SendMsg(m)
}

func _DeviceService_GetDeviceGroupCount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GetDeviceGroupCountRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DeviceServiceServer).GetDeviceGroupCount(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: DeviceService_GetDeviceGroupCount_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DeviceServiceServer).GetDeviceGroupCount(ctx, req.(*GetDeviceGroupCountRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DeviceService_PutDeviceGroupAttach_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(PutDeviceGroupAttachRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DeviceServiceServer).PutDeviceGroupAttach(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: DeviceService_PutDeviceGroupAttach_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DeviceServiceServer).PutDeviceGroupAttach(ctx, req.(*PutDeviceGroupAttachRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _DeviceService_PutDeviceGroupDetach_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(PutDeviceGroupDetachRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(DeviceServiceServer).PutDeviceGroupDetach(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: DeviceService_PutDeviceGroupDetach_FullMethodName,
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(DeviceServiceServer).PutDeviceGroupDetach(ctx, req.(*PutDeviceGroupDetachRequest))
	}
	return interceptor(ctx, in, info, handler)
}

// DeviceService_ServiceDesc is the grpc.ServiceDesc for DeviceService service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
var DeviceService_ServiceDesc = grpc.ServiceDesc{
	ServiceName: "keyapis.telemetry_control.v1.DeviceService",
	HandlerType: (*DeviceServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "GetDevice",
			Handler:    _DeviceService_GetDevice_Handler,
		},
		{
			MethodName: "GetDeviceCount",
			Handler:    _DeviceService_GetDeviceCount_Handler,
		},
		{
			MethodName: "PostDeviceReplace",
			Handler:    _DeviceService_PostDeviceReplace_Handler,
		},
		{
			MethodName: "PostDevice",
			Handler:    _DeviceService_PostDevice_Handler,
		},
		{
			MethodName: "DeleteDevice",
			Handler:    _DeviceService_DeleteDevice_Handler,
		},
		{
			MethodName: "PostDeviceIndicator",
			Handler:    _DeviceService_PostDeviceIndicator_Handler,
		},
		{
			MethodName: "GetDeviceIndicator",
			Handler:    _DeviceService_GetDeviceIndicator_Handler,
		},
		{
			MethodName: "GetDeviceIndicatorCount",
			Handler:    _DeviceService_GetDeviceIndicatorCount_Handler,
		},
		{
			MethodName: "DeleteDeviceIndicator",
			Handler:    _DeviceService_DeleteDeviceIndicator_Handler,
		},
		{
			MethodName: "GetDeviceIndicatorMetricPointCount",
			Handler:    _DeviceService_GetDeviceIndicatorMetricPointCount_Handler,
		},
		{
			MethodName: "PutDeviceIndicatorMetricPointAttach",
			Handler:    _DeviceService_PutDeviceIndicatorMetricPointAttach_Handler,
		},
		{
			MethodName: "PutDeviceIndicatorMetricPointDetach",
			Handler:    _DeviceService_PutDeviceIndicatorMetricPointDetach_Handler,
		},
		{
			MethodName: "GetDeviceGroupCount",
			Handler:    _DeviceService_GetDeviceGroupCount_Handler,
		},
		{
			MethodName: "PutDeviceGroupAttach",
			Handler:    _DeviceService_PutDeviceGroupAttach_Handler,
		},
		{
			MethodName: "PutDeviceGroupDetach",
			Handler:    _DeviceService_PutDeviceGroupDetach_Handler,
		},
	},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "PostDeviceFullDuplex",
			Handler:       _DeviceService_PostDeviceFullDuplex_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
		{
			StreamName:    "GetDeviceList",
			Handler:       _DeviceService_GetDeviceList_Handler,
			ServerStreams: true,
		},
		{
			StreamName:    "GetDeviceIndicatorList",
			Handler:       _DeviceService_GetDeviceIndicatorList_Handler,
			ServerStreams: true,
		},
		{
			StreamName:    "GetDeviceIndicatorMetricPointList",
			Handler:       _DeviceService_GetDeviceIndicatorMetricPointList_Handler,
			ServerStreams: true,
		},
		{
			StreamName:    "GetDeviceGroupList",
			Handler:       _DeviceService_GetDeviceGroupList_Handler,
			ServerStreams: true,
		},
	},
	Metadata: "keyapis/telemetry_control/v1/keyapis_telemetry_control_device_v1.proto",
}
