// Generated by the gRPC C++ plugin.
// If you make any local change, they will be lost.
// source: keyapis/telemetry_control/v1/keyapis_telemetry_control_template_v1.proto
// Original file comments:
//
// Сервис предоставляет возможность управлять шаблонами приборов телеметрии
#ifndef GRPC_keyapis_2ftelemetry_5fcontrol_2fv1_2fkeyapis_5ftelemetry_5fcontrol_5ftemplate_5fv1_2eproto__INCLUDED
#define GRPC_keyapis_2ftelemetry_5fcontrol_2fv1_2fkeyapis_5ftelemetry_5fcontrol_5ftemplate_5fv1_2eproto__INCLUDED

#include "keyapis/telemetry_control/v1/keyapis_telemetry_control_template_v1.pb.h"

#include <functional>
#include <grpcpp/impl/codegen/async_generic_service.h>
#include <grpcpp/impl/codegen/async_stream.h>
#include <grpcpp/impl/codegen/async_unary_call.h>
#include <grpcpp/impl/codegen/client_callback.h>
#include <grpcpp/impl/codegen/client_context.h>
#include <grpcpp/impl/codegen/completion_queue.h>
#include <grpcpp/impl/codegen/message_allocator.h>
#include <grpcpp/impl/codegen/method_handler.h>
#include <grpcpp/impl/codegen/proto_utils.h>
#include <grpcpp/impl/codegen/rpc_method.h>
#include <grpcpp/impl/codegen/server_callback.h>
#include <grpcpp/impl/codegen/server_callback_handlers.h>
#include <grpcpp/impl/codegen/server_context.h>
#include <grpcpp/impl/codegen/service_type.h>
#include <grpcpp/impl/codegen/status.h>
#include <grpcpp/impl/codegen/stub_options.h>
#include <grpcpp/impl/codegen/sync_stream.h>

namespace keyapis {
namespace telemetry_control {
namespace v1 {

// Сервис управления шаблонами приборов телеметрии.
// Авторизация:
//   - Authorization: Bearer token
class TemplateService final {
 public:
  static constexpr char const* service_full_name() {
    return "keyapis.telemetry_control.v1.TemplateService";
  }
  class StubInterface {
   public:
    virtual ~StubInterface() {}
    // Метод получения шаблона ПУ.
    // Метод доступен для: Token: service, application, admin, owner, employee, bti, seller. Без учета разрешений
    virtual ::grpc::Status GetTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest& request, ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse>> AsyncGetTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse>>(AsyncGetTemplateDeviceRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse>> PrepareAsyncGetTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse>>(PrepareAsyncGetTemplateDeviceRaw(context, request, cq));
    }
    // Метод получения списка шаблонов ПУ.
    // Метод доступен для: Token: service, application, admin, owner, employee, bti, seller. Без учета разрешений
    std::unique_ptr< ::grpc::ClientReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>> GetTemplateDeviceList(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest& request) {
      return std::unique_ptr< ::grpc::ClientReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>>(GetTemplateDeviceListRaw(context, request));
    }
    std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>> AsyncGetTemplateDeviceList(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest& request, ::grpc::CompletionQueue* cq, void* tag) {
      return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>>(AsyncGetTemplateDeviceListRaw(context, request, cq, tag));
    }
    std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>> PrepareAsyncGetTemplateDeviceList(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>>(PrepareAsyncGetTemplateDeviceListRaw(context, request, cq));
    }
    // Метод получения количества шаблонов ПУ.
    // Метод доступен для: Token: service, application, admin, owner, employee, bti, seller. Без учета разрешений
    virtual ::grpc::Status GetTemplateDeviceCount(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest& request, ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse>> AsyncGetTemplateDeviceCount(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse>>(AsyncGetTemplateDeviceCountRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse>> PrepareAsyncGetTemplateDeviceCount(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse>>(PrepareAsyncGetTemplateDeviceCountRaw(context, request, cq));
    }
    // Метод сохранения шаблона ПУ.
    // Поддерживает создание и обновление.
    // Метод доступен для: Token: admin, service, application. Без учета разрешений
    virtual ::grpc::Status PostTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest& request, ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse>> AsyncPostTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse>>(AsyncPostTemplateDeviceRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse>> PrepareAsyncPostTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse>>(PrepareAsyncPostTemplateDeviceRaw(context, request, cq));
    }
    // Метод удаления шаблона ПУ.
    // Метод доступен для: Token: admin, service, application. Без учета разрешений
    virtual ::grpc::Status DeleteTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest& request, ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse>> AsyncDeleteTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse>>(AsyncDeleteTemplateDeviceRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse>> PrepareAsyncDeleteTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse>>(PrepareAsyncDeleteTemplateDeviceRaw(context, request, cq));
    }
    // Метод получения шаблона индикатора.
    // Метод доступен для: Token: service, application, admin, owner, employee, bti, seller. Без учета разрешений
    virtual ::grpc::Status GetTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest& request, ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse>> AsyncGetTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse>>(AsyncGetTemplateIndicatorRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse>> PrepareAsyncGetTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse>>(PrepareAsyncGetTemplateIndicatorRaw(context, request, cq));
    }
    // Метод получения списка шаблонов индикаторов.
    // Метод доступен для: Token: service, application, admin, owner, employee, bti, seller. Без учета разрешений
    std::unique_ptr< ::grpc::ClientReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>> GetTemplateIndicatorList(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest& request) {
      return std::unique_ptr< ::grpc::ClientReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>>(GetTemplateIndicatorListRaw(context, request));
    }
    std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>> AsyncGetTemplateIndicatorList(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest& request, ::grpc::CompletionQueue* cq, void* tag) {
      return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>>(AsyncGetTemplateIndicatorListRaw(context, request, cq, tag));
    }
    std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>> PrepareAsyncGetTemplateIndicatorList(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>>(PrepareAsyncGetTemplateIndicatorListRaw(context, request, cq));
    }
    // Метод получения количества шаблонов индикаторов.
    // Метод доступен для: Token: service, application, admin, owner, employee, bti, seller. Без учета разрешений
    virtual ::grpc::Status GetTemplateIndicatorCount(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest& request, ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse>> AsyncGetTemplateIndicatorCount(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse>>(AsyncGetTemplateIndicatorCountRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse>> PrepareAsyncGetTemplateIndicatorCount(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse>>(PrepareAsyncGetTemplateIndicatorCountRaw(context, request, cq));
    }
    // Метод сохранения шаблонов индикатора.
    // Поддерживает создание и обновление.
    // Метод доступен для: Token: admin, service, application. Без учета разрешений
    virtual ::grpc::Status PostTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest& request, ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse>> AsyncPostTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse>>(AsyncPostTemplateIndicatorRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse>> PrepareAsyncPostTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse>>(PrepareAsyncPostTemplateIndicatorRaw(context, request, cq));
    }
    // Метод удаления шаблона шаблона индикатора.
    // Метод доступен для: Token: admin, service, application. Без учета разрешений
    virtual ::grpc::Status DeleteTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest& request, ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse>> AsyncDeleteTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse>>(AsyncDeleteTemplateIndicatorRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse>> PrepareAsyncDeleteTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse>>(PrepareAsyncDeleteTemplateIndicatorRaw(context, request, cq));
    }
    class async_interface {
     public:
      virtual ~async_interface() {}
      // Метод получения шаблона ПУ.
      // Метод доступен для: Token: service, application, admin, owner, employee, bti, seller. Без учета разрешений
      virtual void GetTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest* request, ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest* request, ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод получения списка шаблонов ПУ.
      // Метод доступен для: Token: service, application, admin, owner, employee, bti, seller. Без учета разрешений
      virtual void GetTemplateDeviceList(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest* request, ::grpc::ClientReadReactor< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>* reactor) = 0;
      // Метод получения количества шаблонов ПУ.
      // Метод доступен для: Token: service, application, admin, owner, employee, bti, seller. Без учета разрешений
      virtual void GetTemplateDeviceCount(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest* request, ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetTemplateDeviceCount(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest* request, ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод сохранения шаблона ПУ.
      // Поддерживает создание и обновление.
      // Метод доступен для: Token: admin, service, application. Без учета разрешений
      virtual void PostTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest* request, ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void PostTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest* request, ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод удаления шаблона ПУ.
      // Метод доступен для: Token: admin, service, application. Без учета разрешений
      virtual void DeleteTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest* request, ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void DeleteTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest* request, ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод получения шаблона индикатора.
      // Метод доступен для: Token: service, application, admin, owner, employee, bti, seller. Без учета разрешений
      virtual void GetTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest* request, ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest* request, ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод получения списка шаблонов индикаторов.
      // Метод доступен для: Token: service, application, admin, owner, employee, bti, seller. Без учета разрешений
      virtual void GetTemplateIndicatorList(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest* request, ::grpc::ClientReadReactor< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>* reactor) = 0;
      // Метод получения количества шаблонов индикаторов.
      // Метод доступен для: Token: service, application, admin, owner, employee, bti, seller. Без учета разрешений
      virtual void GetTemplateIndicatorCount(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest* request, ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetTemplateIndicatorCount(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest* request, ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод сохранения шаблонов индикатора.
      // Поддерживает создание и обновление.
      // Метод доступен для: Token: admin, service, application. Без учета разрешений
      virtual void PostTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest* request, ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void PostTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest* request, ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод удаления шаблона шаблона индикатора.
      // Метод доступен для: Token: admin, service, application. Без учета разрешений
      virtual void DeleteTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest* request, ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void DeleteTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest* request, ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
    };
    typedef class async_interface experimental_async_interface;
    virtual class async_interface* async() { return nullptr; }
    class async_interface* experimental_async() { return async(); }
   private:
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse>* AsyncGetTemplateDeviceRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse>* PrepareAsyncGetTemplateDeviceRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>* GetTemplateDeviceListRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest& request) = 0;
    virtual ::grpc::ClientAsyncReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>* AsyncGetTemplateDeviceListRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest& request, ::grpc::CompletionQueue* cq, void* tag) = 0;
    virtual ::grpc::ClientAsyncReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>* PrepareAsyncGetTemplateDeviceListRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse>* AsyncGetTemplateDeviceCountRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse>* PrepareAsyncGetTemplateDeviceCountRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse>* AsyncPostTemplateDeviceRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse>* PrepareAsyncPostTemplateDeviceRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse>* AsyncDeleteTemplateDeviceRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse>* PrepareAsyncDeleteTemplateDeviceRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse>* AsyncGetTemplateIndicatorRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse>* PrepareAsyncGetTemplateIndicatorRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>* GetTemplateIndicatorListRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest& request) = 0;
    virtual ::grpc::ClientAsyncReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>* AsyncGetTemplateIndicatorListRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest& request, ::grpc::CompletionQueue* cq, void* tag) = 0;
    virtual ::grpc::ClientAsyncReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>* PrepareAsyncGetTemplateIndicatorListRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse>* AsyncGetTemplateIndicatorCountRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse>* PrepareAsyncGetTemplateIndicatorCountRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse>* AsyncPostTemplateIndicatorRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse>* PrepareAsyncPostTemplateIndicatorRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse>* AsyncDeleteTemplateIndicatorRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse>* PrepareAsyncDeleteTemplateIndicatorRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) = 0;
  };
  class Stub final : public StubInterface {
   public:
    Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions());
    ::grpc::Status GetTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest& request, ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse>> AsyncGetTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse>>(AsyncGetTemplateDeviceRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse>> PrepareAsyncGetTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse>>(PrepareAsyncGetTemplateDeviceRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientReader< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>> GetTemplateDeviceList(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest& request) {
      return std::unique_ptr< ::grpc::ClientReader< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>>(GetTemplateDeviceListRaw(context, request));
    }
    std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>> AsyncGetTemplateDeviceList(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest& request, ::grpc::CompletionQueue* cq, void* tag) {
      return std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>>(AsyncGetTemplateDeviceListRaw(context, request, cq, tag));
    }
    std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>> PrepareAsyncGetTemplateDeviceList(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>>(PrepareAsyncGetTemplateDeviceListRaw(context, request, cq));
    }
    ::grpc::Status GetTemplateDeviceCount(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest& request, ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse>> AsyncGetTemplateDeviceCount(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse>>(AsyncGetTemplateDeviceCountRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse>> PrepareAsyncGetTemplateDeviceCount(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse>>(PrepareAsyncGetTemplateDeviceCountRaw(context, request, cq));
    }
    ::grpc::Status PostTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest& request, ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse>> AsyncPostTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse>>(AsyncPostTemplateDeviceRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse>> PrepareAsyncPostTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse>>(PrepareAsyncPostTemplateDeviceRaw(context, request, cq));
    }
    ::grpc::Status DeleteTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest& request, ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse>> AsyncDeleteTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse>>(AsyncDeleteTemplateDeviceRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse>> PrepareAsyncDeleteTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse>>(PrepareAsyncDeleteTemplateDeviceRaw(context, request, cq));
    }
    ::grpc::Status GetTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest& request, ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse>> AsyncGetTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse>>(AsyncGetTemplateIndicatorRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse>> PrepareAsyncGetTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse>>(PrepareAsyncGetTemplateIndicatorRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientReader< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>> GetTemplateIndicatorList(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest& request) {
      return std::unique_ptr< ::grpc::ClientReader< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>>(GetTemplateIndicatorListRaw(context, request));
    }
    std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>> AsyncGetTemplateIndicatorList(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest& request, ::grpc::CompletionQueue* cq, void* tag) {
      return std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>>(AsyncGetTemplateIndicatorListRaw(context, request, cq, tag));
    }
    std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>> PrepareAsyncGetTemplateIndicatorList(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>>(PrepareAsyncGetTemplateIndicatorListRaw(context, request, cq));
    }
    ::grpc::Status GetTemplateIndicatorCount(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest& request, ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse>> AsyncGetTemplateIndicatorCount(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse>>(AsyncGetTemplateIndicatorCountRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse>> PrepareAsyncGetTemplateIndicatorCount(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse>>(PrepareAsyncGetTemplateIndicatorCountRaw(context, request, cq));
    }
    ::grpc::Status PostTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest& request, ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse>> AsyncPostTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse>>(AsyncPostTemplateIndicatorRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse>> PrepareAsyncPostTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse>>(PrepareAsyncPostTemplateIndicatorRaw(context, request, cq));
    }
    ::grpc::Status DeleteTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest& request, ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse>> AsyncDeleteTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse>>(AsyncDeleteTemplateIndicatorRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse>> PrepareAsyncDeleteTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse>>(PrepareAsyncDeleteTemplateIndicatorRaw(context, request, cq));
    }
    class async final :
      public StubInterface::async_interface {
     public:
      void GetTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest* request, ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse* response, std::function<void(::grpc::Status)>) override;
      void GetTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest* request, ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetTemplateDeviceList(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest* request, ::grpc::ClientReadReactor< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>* reactor) override;
      void GetTemplateDeviceCount(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest* request, ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse* response, std::function<void(::grpc::Status)>) override;
      void GetTemplateDeviceCount(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest* request, ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void PostTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest* request, ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse* response, std::function<void(::grpc::Status)>) override;
      void PostTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest* request, ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void DeleteTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest* request, ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse* response, std::function<void(::grpc::Status)>) override;
      void DeleteTemplateDevice(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest* request, ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest* request, ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse* response, std::function<void(::grpc::Status)>) override;
      void GetTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest* request, ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetTemplateIndicatorList(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest* request, ::grpc::ClientReadReactor< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>* reactor) override;
      void GetTemplateIndicatorCount(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest* request, ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse* response, std::function<void(::grpc::Status)>) override;
      void GetTemplateIndicatorCount(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest* request, ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void PostTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest* request, ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse* response, std::function<void(::grpc::Status)>) override;
      void PostTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest* request, ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void DeleteTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest* request, ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse* response, std::function<void(::grpc::Status)>) override;
      void DeleteTemplateIndicator(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest* request, ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
     private:
      friend class Stub;
      explicit async(Stub* stub): stub_(stub) { }
      Stub* stub() { return stub_; }
      Stub* stub_;
    };
    class async* async() override { return &async_stub_; }

   private:
    std::shared_ptr< ::grpc::ChannelInterface> channel_;
    class async async_stub_{this};
    ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse>* AsyncGetTemplateDeviceRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse>* PrepareAsyncGetTemplateDeviceRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientReader< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>* GetTemplateDeviceListRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest& request) override;
    ::grpc::ClientAsyncReader< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>* AsyncGetTemplateDeviceListRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest& request, ::grpc::CompletionQueue* cq, void* tag) override;
    ::grpc::ClientAsyncReader< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>* PrepareAsyncGetTemplateDeviceListRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse>* AsyncGetTemplateDeviceCountRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse>* PrepareAsyncGetTemplateDeviceCountRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse>* AsyncPostTemplateDeviceRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse>* PrepareAsyncPostTemplateDeviceRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse>* AsyncDeleteTemplateDeviceRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse>* PrepareAsyncDeleteTemplateDeviceRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse>* AsyncGetTemplateIndicatorRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse>* PrepareAsyncGetTemplateIndicatorRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientReader< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>* GetTemplateIndicatorListRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest& request) override;
    ::grpc::ClientAsyncReader< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>* AsyncGetTemplateIndicatorListRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest& request, ::grpc::CompletionQueue* cq, void* tag) override;
    ::grpc::ClientAsyncReader< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>* PrepareAsyncGetTemplateIndicatorListRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse>* AsyncGetTemplateIndicatorCountRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse>* PrepareAsyncGetTemplateIndicatorCountRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse>* AsyncPostTemplateIndicatorRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse>* PrepareAsyncPostTemplateIndicatorRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse>* AsyncDeleteTemplateIndicatorRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse>* PrepareAsyncDeleteTemplateIndicatorRaw(::grpc::ClientContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest& request, ::grpc::CompletionQueue* cq) override;
    const ::grpc::internal::RpcMethod rpcmethod_GetTemplateDevice_;
    const ::grpc::internal::RpcMethod rpcmethod_GetTemplateDeviceList_;
    const ::grpc::internal::RpcMethod rpcmethod_GetTemplateDeviceCount_;
    const ::grpc::internal::RpcMethod rpcmethod_PostTemplateDevice_;
    const ::grpc::internal::RpcMethod rpcmethod_DeleteTemplateDevice_;
    const ::grpc::internal::RpcMethod rpcmethod_GetTemplateIndicator_;
    const ::grpc::internal::RpcMethod rpcmethod_GetTemplateIndicatorList_;
    const ::grpc::internal::RpcMethod rpcmethod_GetTemplateIndicatorCount_;
    const ::grpc::internal::RpcMethod rpcmethod_PostTemplateIndicator_;
    const ::grpc::internal::RpcMethod rpcmethod_DeleteTemplateIndicator_;
  };
  static std::unique_ptr<Stub> NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions());

  class Service : public ::grpc::Service {
   public:
    Service();
    virtual ~Service();
    // Метод получения шаблона ПУ.
    // Метод доступен для: Token: service, application, admin, owner, employee, bti, seller. Без учета разрешений
    virtual ::grpc::Status GetTemplateDevice(::grpc::ServerContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest* request, ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse* response);
    // Метод получения списка шаблонов ПУ.
    // Метод доступен для: Token: service, application, admin, owner, employee, bti, seller. Без учета разрешений
    virtual ::grpc::Status GetTemplateDeviceList(::grpc::ServerContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest* request, ::grpc::ServerWriter< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>* writer);
    // Метод получения количества шаблонов ПУ.
    // Метод доступен для: Token: service, application, admin, owner, employee, bti, seller. Без учета разрешений
    virtual ::grpc::Status GetTemplateDeviceCount(::grpc::ServerContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest* request, ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse* response);
    // Метод сохранения шаблона ПУ.
    // Поддерживает создание и обновление.
    // Метод доступен для: Token: admin, service, application. Без учета разрешений
    virtual ::grpc::Status PostTemplateDevice(::grpc::ServerContext* context, const ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest* request, ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse* response);
    // Метод удаления шаблона ПУ.
    // Метод доступен для: Token: admin, service, application. Без учета разрешений
    virtual ::grpc::Status DeleteTemplateDevice(::grpc::ServerContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest* request, ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse* response);
    // Метод получения шаблона индикатора.
    // Метод доступен для: Token: service, application, admin, owner, employee, bti, seller. Без учета разрешений
    virtual ::grpc::Status GetTemplateIndicator(::grpc::ServerContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest* request, ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse* response);
    // Метод получения списка шаблонов индикаторов.
    // Метод доступен для: Token: service, application, admin, owner, employee, bti, seller. Без учета разрешений
    virtual ::grpc::Status GetTemplateIndicatorList(::grpc::ServerContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest* request, ::grpc::ServerWriter< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>* writer);
    // Метод получения количества шаблонов индикаторов.
    // Метод доступен для: Token: service, application, admin, owner, employee, bti, seller. Без учета разрешений
    virtual ::grpc::Status GetTemplateIndicatorCount(::grpc::ServerContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest* request, ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse* response);
    // Метод сохранения шаблонов индикатора.
    // Поддерживает создание и обновление.
    // Метод доступен для: Token: admin, service, application. Без учета разрешений
    virtual ::grpc::Status PostTemplateIndicator(::grpc::ServerContext* context, const ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest* request, ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse* response);
    // Метод удаления шаблона шаблона индикатора.
    // Метод доступен для: Token: admin, service, application. Без учета разрешений
    virtual ::grpc::Status DeleteTemplateIndicator(::grpc::ServerContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest* request, ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse* response);
  };
  template <class BaseClass>
  class WithAsyncMethod_GetTemplateDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetTemplateDevice() {
      ::grpc::Service::MarkMethodAsync(0);
    }
    ~WithAsyncMethod_GetTemplateDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateDevice(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetTemplateDevice(::grpc::ServerContext* context, ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(0, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_GetTemplateDeviceList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetTemplateDeviceList() {
      ::grpc::Service::MarkMethodAsync(1);
    }
    ~WithAsyncMethod_GetTemplateDeviceList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateDeviceList(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetTemplateDeviceList(::grpc::ServerContext* context, ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest* request, ::grpc::ServerAsyncWriter< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>* writer, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncServerStreaming(1, context, request, writer, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_GetTemplateDeviceCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetTemplateDeviceCount() {
      ::grpc::Service::MarkMethodAsync(2);
    }
    ~WithAsyncMethod_GetTemplateDeviceCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateDeviceCount(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetTemplateDeviceCount(::grpc::ServerContext* context, ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(2, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_PostTemplateDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_PostTemplateDevice() {
      ::grpc::Service::MarkMethodAsync(3);
    }
    ~WithAsyncMethod_PostTemplateDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostTemplateDevice(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest* /*request*/, ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestPostTemplateDevice(::grpc::ServerContext* context, ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(3, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_DeleteTemplateDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_DeleteTemplateDevice() {
      ::grpc::Service::MarkMethodAsync(4);
    }
    ~WithAsyncMethod_DeleteTemplateDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteTemplateDevice(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest* /*request*/, ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestDeleteTemplateDevice(::grpc::ServerContext* context, ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(4, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_GetTemplateIndicator : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetTemplateIndicator() {
      ::grpc::Service::MarkMethodAsync(5);
    }
    ~WithAsyncMethod_GetTemplateIndicator() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateIndicator(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetTemplateIndicator(::grpc::ServerContext* context, ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(5, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_GetTemplateIndicatorList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetTemplateIndicatorList() {
      ::grpc::Service::MarkMethodAsync(6);
    }
    ~WithAsyncMethod_GetTemplateIndicatorList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateIndicatorList(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetTemplateIndicatorList(::grpc::ServerContext* context, ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest* request, ::grpc::ServerAsyncWriter< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>* writer, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncServerStreaming(6, context, request, writer, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_GetTemplateIndicatorCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetTemplateIndicatorCount() {
      ::grpc::Service::MarkMethodAsync(7);
    }
    ~WithAsyncMethod_GetTemplateIndicatorCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateIndicatorCount(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetTemplateIndicatorCount(::grpc::ServerContext* context, ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(7, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_PostTemplateIndicator : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_PostTemplateIndicator() {
      ::grpc::Service::MarkMethodAsync(8);
    }
    ~WithAsyncMethod_PostTemplateIndicator() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostTemplateIndicator(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest* /*request*/, ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestPostTemplateIndicator(::grpc::ServerContext* context, ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(8, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_DeleteTemplateIndicator : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_DeleteTemplateIndicator() {
      ::grpc::Service::MarkMethodAsync(9);
    }
    ~WithAsyncMethod_DeleteTemplateIndicator() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteTemplateIndicator(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest* /*request*/, ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestDeleteTemplateIndicator(::grpc::ServerContext* context, ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(9, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  typedef WithAsyncMethod_GetTemplateDevice<WithAsyncMethod_GetTemplateDeviceList<WithAsyncMethod_GetTemplateDeviceCount<WithAsyncMethod_PostTemplateDevice<WithAsyncMethod_DeleteTemplateDevice<WithAsyncMethod_GetTemplateIndicator<WithAsyncMethod_GetTemplateIndicatorList<WithAsyncMethod_GetTemplateIndicatorCount<WithAsyncMethod_PostTemplateIndicator<WithAsyncMethod_DeleteTemplateIndicator<Service > > > > > > > > > > AsyncService;
  template <class BaseClass>
  class WithCallbackMethod_GetTemplateDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetTemplateDevice() {
      ::grpc::Service::MarkMethodCallback(0,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest, ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest* request, ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse* response) { return this->GetTemplateDevice(context, request, response); }));}
    void SetMessageAllocatorFor_GetTemplateDevice(
        ::grpc::MessageAllocator< ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest, ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(0);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest, ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetTemplateDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateDevice(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetTemplateDevice(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetTemplateDeviceList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetTemplateDeviceList() {
      ::grpc::Service::MarkMethodCallback(1,
          new ::grpc::internal::CallbackServerStreamingHandler< ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest, ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest* request) { return this->GetTemplateDeviceList(context, request); }));
    }
    ~WithCallbackMethod_GetTemplateDeviceList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateDeviceList(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerWriteReactor< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>* GetTemplateDeviceList(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest* /*request*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetTemplateDeviceCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetTemplateDeviceCount() {
      ::grpc::Service::MarkMethodCallback(2,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest, ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest* request, ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse* response) { return this->GetTemplateDeviceCount(context, request, response); }));}
    void SetMessageAllocatorFor_GetTemplateDeviceCount(
        ::grpc::MessageAllocator< ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest, ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(2);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest, ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetTemplateDeviceCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateDeviceCount(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetTemplateDeviceCount(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_PostTemplateDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_PostTemplateDevice() {
      ::grpc::Service::MarkMethodCallback(3,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest, ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest* request, ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse* response) { return this->PostTemplateDevice(context, request, response); }));}
    void SetMessageAllocatorFor_PostTemplateDevice(
        ::grpc::MessageAllocator< ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest, ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(3);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest, ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_PostTemplateDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostTemplateDevice(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest* /*request*/, ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* PostTemplateDevice(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest* /*request*/, ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_DeleteTemplateDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_DeleteTemplateDevice() {
      ::grpc::Service::MarkMethodCallback(4,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest, ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest* request, ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse* response) { return this->DeleteTemplateDevice(context, request, response); }));}
    void SetMessageAllocatorFor_DeleteTemplateDevice(
        ::grpc::MessageAllocator< ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest, ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(4);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest, ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_DeleteTemplateDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteTemplateDevice(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest* /*request*/, ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* DeleteTemplateDevice(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest* /*request*/, ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetTemplateIndicator : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetTemplateIndicator() {
      ::grpc::Service::MarkMethodCallback(5,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest, ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest* request, ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse* response) { return this->GetTemplateIndicator(context, request, response); }));}
    void SetMessageAllocatorFor_GetTemplateIndicator(
        ::grpc::MessageAllocator< ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest, ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(5);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest, ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetTemplateIndicator() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateIndicator(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetTemplateIndicator(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetTemplateIndicatorList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetTemplateIndicatorList() {
      ::grpc::Service::MarkMethodCallback(6,
          new ::grpc::internal::CallbackServerStreamingHandler< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest, ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest* request) { return this->GetTemplateIndicatorList(context, request); }));
    }
    ~WithCallbackMethod_GetTemplateIndicatorList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateIndicatorList(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerWriteReactor< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>* GetTemplateIndicatorList(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest* /*request*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetTemplateIndicatorCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetTemplateIndicatorCount() {
      ::grpc::Service::MarkMethodCallback(7,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest, ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest* request, ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse* response) { return this->GetTemplateIndicatorCount(context, request, response); }));}
    void SetMessageAllocatorFor_GetTemplateIndicatorCount(
        ::grpc::MessageAllocator< ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest, ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(7);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest, ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetTemplateIndicatorCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateIndicatorCount(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetTemplateIndicatorCount(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_PostTemplateIndicator : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_PostTemplateIndicator() {
      ::grpc::Service::MarkMethodCallback(8,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest, ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest* request, ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse* response) { return this->PostTemplateIndicator(context, request, response); }));}
    void SetMessageAllocatorFor_PostTemplateIndicator(
        ::grpc::MessageAllocator< ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest, ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(8);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest, ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_PostTemplateIndicator() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostTemplateIndicator(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest* /*request*/, ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* PostTemplateIndicator(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest* /*request*/, ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_DeleteTemplateIndicator : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_DeleteTemplateIndicator() {
      ::grpc::Service::MarkMethodCallback(9,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest, ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest* request, ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse* response) { return this->DeleteTemplateIndicator(context, request, response); }));}
    void SetMessageAllocatorFor_DeleteTemplateIndicator(
        ::grpc::MessageAllocator< ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest, ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(9);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest, ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_DeleteTemplateIndicator() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteTemplateIndicator(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest* /*request*/, ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* DeleteTemplateIndicator(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest* /*request*/, ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse* /*response*/)  { return nullptr; }
  };
  typedef WithCallbackMethod_GetTemplateDevice<WithCallbackMethod_GetTemplateDeviceList<WithCallbackMethod_GetTemplateDeviceCount<WithCallbackMethod_PostTemplateDevice<WithCallbackMethod_DeleteTemplateDevice<WithCallbackMethod_GetTemplateIndicator<WithCallbackMethod_GetTemplateIndicatorList<WithCallbackMethod_GetTemplateIndicatorCount<WithCallbackMethod_PostTemplateIndicator<WithCallbackMethod_DeleteTemplateIndicator<Service > > > > > > > > > > CallbackService;
  typedef CallbackService ExperimentalCallbackService;
  template <class BaseClass>
  class WithGenericMethod_GetTemplateDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetTemplateDevice() {
      ::grpc::Service::MarkMethodGeneric(0);
    }
    ~WithGenericMethod_GetTemplateDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateDevice(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetTemplateDeviceList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetTemplateDeviceList() {
      ::grpc::Service::MarkMethodGeneric(1);
    }
    ~WithGenericMethod_GetTemplateDeviceList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateDeviceList(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetTemplateDeviceCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetTemplateDeviceCount() {
      ::grpc::Service::MarkMethodGeneric(2);
    }
    ~WithGenericMethod_GetTemplateDeviceCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateDeviceCount(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_PostTemplateDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_PostTemplateDevice() {
      ::grpc::Service::MarkMethodGeneric(3);
    }
    ~WithGenericMethod_PostTemplateDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostTemplateDevice(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest* /*request*/, ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_DeleteTemplateDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_DeleteTemplateDevice() {
      ::grpc::Service::MarkMethodGeneric(4);
    }
    ~WithGenericMethod_DeleteTemplateDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteTemplateDevice(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest* /*request*/, ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetTemplateIndicator : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetTemplateIndicator() {
      ::grpc::Service::MarkMethodGeneric(5);
    }
    ~WithGenericMethod_GetTemplateIndicator() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateIndicator(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetTemplateIndicatorList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetTemplateIndicatorList() {
      ::grpc::Service::MarkMethodGeneric(6);
    }
    ~WithGenericMethod_GetTemplateIndicatorList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateIndicatorList(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetTemplateIndicatorCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetTemplateIndicatorCount() {
      ::grpc::Service::MarkMethodGeneric(7);
    }
    ~WithGenericMethod_GetTemplateIndicatorCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateIndicatorCount(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_PostTemplateIndicator : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_PostTemplateIndicator() {
      ::grpc::Service::MarkMethodGeneric(8);
    }
    ~WithGenericMethod_PostTemplateIndicator() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostTemplateIndicator(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest* /*request*/, ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_DeleteTemplateIndicator : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_DeleteTemplateIndicator() {
      ::grpc::Service::MarkMethodGeneric(9);
    }
    ~WithGenericMethod_DeleteTemplateIndicator() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteTemplateIndicator(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest* /*request*/, ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetTemplateDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetTemplateDevice() {
      ::grpc::Service::MarkMethodRaw(0);
    }
    ~WithRawMethod_GetTemplateDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateDevice(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetTemplateDevice(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(0, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetTemplateDeviceList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetTemplateDeviceList() {
      ::grpc::Service::MarkMethodRaw(1);
    }
    ~WithRawMethod_GetTemplateDeviceList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateDeviceList(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetTemplateDeviceList(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncWriter< ::grpc::ByteBuffer>* writer, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncServerStreaming(1, context, request, writer, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetTemplateDeviceCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetTemplateDeviceCount() {
      ::grpc::Service::MarkMethodRaw(2);
    }
    ~WithRawMethod_GetTemplateDeviceCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateDeviceCount(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetTemplateDeviceCount(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(2, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_PostTemplateDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_PostTemplateDevice() {
      ::grpc::Service::MarkMethodRaw(3);
    }
    ~WithRawMethod_PostTemplateDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostTemplateDevice(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest* /*request*/, ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestPostTemplateDevice(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(3, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_DeleteTemplateDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_DeleteTemplateDevice() {
      ::grpc::Service::MarkMethodRaw(4);
    }
    ~WithRawMethod_DeleteTemplateDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteTemplateDevice(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest* /*request*/, ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestDeleteTemplateDevice(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(4, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetTemplateIndicator : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetTemplateIndicator() {
      ::grpc::Service::MarkMethodRaw(5);
    }
    ~WithRawMethod_GetTemplateIndicator() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateIndicator(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetTemplateIndicator(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(5, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetTemplateIndicatorList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetTemplateIndicatorList() {
      ::grpc::Service::MarkMethodRaw(6);
    }
    ~WithRawMethod_GetTemplateIndicatorList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateIndicatorList(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetTemplateIndicatorList(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncWriter< ::grpc::ByteBuffer>* writer, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncServerStreaming(6, context, request, writer, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetTemplateIndicatorCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetTemplateIndicatorCount() {
      ::grpc::Service::MarkMethodRaw(7);
    }
    ~WithRawMethod_GetTemplateIndicatorCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateIndicatorCount(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetTemplateIndicatorCount(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(7, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_PostTemplateIndicator : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_PostTemplateIndicator() {
      ::grpc::Service::MarkMethodRaw(8);
    }
    ~WithRawMethod_PostTemplateIndicator() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostTemplateIndicator(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest* /*request*/, ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestPostTemplateIndicator(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(8, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_DeleteTemplateIndicator : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_DeleteTemplateIndicator() {
      ::grpc::Service::MarkMethodRaw(9);
    }
    ~WithRawMethod_DeleteTemplateIndicator() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteTemplateIndicator(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest* /*request*/, ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestDeleteTemplateIndicator(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(9, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetTemplateDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetTemplateDevice() {
      ::grpc::Service::MarkMethodRawCallback(0,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->GetTemplateDevice(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetTemplateDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateDevice(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetTemplateDevice(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetTemplateDeviceList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetTemplateDeviceList() {
      ::grpc::Service::MarkMethodRawCallback(1,
          new ::grpc::internal::CallbackServerStreamingHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const::grpc::ByteBuffer* request) { return this->GetTemplateDeviceList(context, request); }));
    }
    ~WithRawCallbackMethod_GetTemplateDeviceList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateDeviceList(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerWriteReactor< ::grpc::ByteBuffer>* GetTemplateDeviceList(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetTemplateDeviceCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetTemplateDeviceCount() {
      ::grpc::Service::MarkMethodRawCallback(2,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->GetTemplateDeviceCount(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetTemplateDeviceCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateDeviceCount(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetTemplateDeviceCount(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_PostTemplateDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_PostTemplateDevice() {
      ::grpc::Service::MarkMethodRawCallback(3,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->PostTemplateDevice(context, request, response); }));
    }
    ~WithRawCallbackMethod_PostTemplateDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostTemplateDevice(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest* /*request*/, ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* PostTemplateDevice(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_DeleteTemplateDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_DeleteTemplateDevice() {
      ::grpc::Service::MarkMethodRawCallback(4,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->DeleteTemplateDevice(context, request, response); }));
    }
    ~WithRawCallbackMethod_DeleteTemplateDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteTemplateDevice(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest* /*request*/, ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* DeleteTemplateDevice(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetTemplateIndicator : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetTemplateIndicator() {
      ::grpc::Service::MarkMethodRawCallback(5,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->GetTemplateIndicator(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetTemplateIndicator() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateIndicator(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetTemplateIndicator(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetTemplateIndicatorList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetTemplateIndicatorList() {
      ::grpc::Service::MarkMethodRawCallback(6,
          new ::grpc::internal::CallbackServerStreamingHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const::grpc::ByteBuffer* request) { return this->GetTemplateIndicatorList(context, request); }));
    }
    ~WithRawCallbackMethod_GetTemplateIndicatorList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateIndicatorList(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerWriteReactor< ::grpc::ByteBuffer>* GetTemplateIndicatorList(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetTemplateIndicatorCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetTemplateIndicatorCount() {
      ::grpc::Service::MarkMethodRawCallback(7,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->GetTemplateIndicatorCount(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetTemplateIndicatorCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetTemplateIndicatorCount(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetTemplateIndicatorCount(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_PostTemplateIndicator : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_PostTemplateIndicator() {
      ::grpc::Service::MarkMethodRawCallback(8,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->PostTemplateIndicator(context, request, response); }));
    }
    ~WithRawCallbackMethod_PostTemplateIndicator() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostTemplateIndicator(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest* /*request*/, ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* PostTemplateIndicator(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_DeleteTemplateIndicator : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_DeleteTemplateIndicator() {
      ::grpc::Service::MarkMethodRawCallback(9,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->DeleteTemplateIndicator(context, request, response); }));
    }
    ~WithRawCallbackMethod_DeleteTemplateIndicator() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteTemplateIndicator(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest* /*request*/, ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* DeleteTemplateIndicator(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetTemplateDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetTemplateDevice() {
      ::grpc::Service::MarkMethodStreamed(0,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest, ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest, ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse>* streamer) {
                       return this->StreamedGetTemplateDevice(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetTemplateDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetTemplateDevice(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateDeviceResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetTemplateDevice(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::telemetry_control::v1::GetTemplateDeviceRequest,::keyapis::telemetry_control::v1::GetTemplateDeviceResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetTemplateDeviceCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetTemplateDeviceCount() {
      ::grpc::Service::MarkMethodStreamed(2,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest, ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest, ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse>* streamer) {
                       return this->StreamedGetTemplateDeviceCount(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetTemplateDeviceCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetTemplateDeviceCount(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetTemplateDeviceCount(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::telemetry_control::v1::GetTemplateDeviceCountRequest,::keyapis::telemetry_control::v1::GetTemplateDeviceCountResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_PostTemplateDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_PostTemplateDevice() {
      ::grpc::Service::MarkMethodStreamed(3,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest, ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest, ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse>* streamer) {
                       return this->StreamedPostTemplateDevice(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_PostTemplateDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status PostTemplateDevice(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest* /*request*/, ::keyapis::telemetry_control::v1::PostTemplateDeviceResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedPostTemplateDevice(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::telemetry_control::v1::PostTemplateDeviceRequest,::keyapis::telemetry_control::v1::PostTemplateDeviceResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_DeleteTemplateDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_DeleteTemplateDevice() {
      ::grpc::Service::MarkMethodStreamed(4,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest, ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest, ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse>* streamer) {
                       return this->StreamedDeleteTemplateDevice(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_DeleteTemplateDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status DeleteTemplateDevice(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest* /*request*/, ::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedDeleteTemplateDevice(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::telemetry_control::v1::DeleteTemplateDeviceRequest,::keyapis::telemetry_control::v1::DeleteTemplateDeviceResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetTemplateIndicator : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetTemplateIndicator() {
      ::grpc::Service::MarkMethodStreamed(5,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest, ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest, ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse>* streamer) {
                       return this->StreamedGetTemplateIndicator(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetTemplateIndicator() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetTemplateIndicator(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetTemplateIndicator(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::telemetry_control::v1::GetTemplateIndicatorRequest,::keyapis::telemetry_control::v1::GetTemplateIndicatorResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetTemplateIndicatorCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetTemplateIndicatorCount() {
      ::grpc::Service::MarkMethodStreamed(7,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest, ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest, ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse>* streamer) {
                       return this->StreamedGetTemplateIndicatorCount(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetTemplateIndicatorCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetTemplateIndicatorCount(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest* /*request*/, ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetTemplateIndicatorCount(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::telemetry_control::v1::GetTemplateIndicatorCountRequest,::keyapis::telemetry_control::v1::GetTemplateIndicatorCountResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_PostTemplateIndicator : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_PostTemplateIndicator() {
      ::grpc::Service::MarkMethodStreamed(8,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest, ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest, ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse>* streamer) {
                       return this->StreamedPostTemplateIndicator(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_PostTemplateIndicator() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status PostTemplateIndicator(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest* /*request*/, ::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedPostTemplateIndicator(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::telemetry_control::v1::PostTemplateIndicatorRequest,::keyapis::telemetry_control::v1::PostTemplateIndicatorResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_DeleteTemplateIndicator : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_DeleteTemplateIndicator() {
      ::grpc::Service::MarkMethodStreamed(9,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest, ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest, ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse>* streamer) {
                       return this->StreamedDeleteTemplateIndicator(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_DeleteTemplateIndicator() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status DeleteTemplateIndicator(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest* /*request*/, ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedDeleteTemplateIndicator(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::telemetry_control::v1::DeleteTemplateIndicatorRequest,::keyapis::telemetry_control::v1::DeleteTemplateIndicatorResponse>* server_unary_streamer) = 0;
  };
  typedef WithStreamedUnaryMethod_GetTemplateDevice<WithStreamedUnaryMethod_GetTemplateDeviceCount<WithStreamedUnaryMethod_PostTemplateDevice<WithStreamedUnaryMethod_DeleteTemplateDevice<WithStreamedUnaryMethod_GetTemplateIndicator<WithStreamedUnaryMethod_GetTemplateIndicatorCount<WithStreamedUnaryMethod_PostTemplateIndicator<WithStreamedUnaryMethod_DeleteTemplateIndicator<Service > > > > > > > > StreamedUnaryService;
  template <class BaseClass>
  class WithSplitStreamingMethod_GetTemplateDeviceList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithSplitStreamingMethod_GetTemplateDeviceList() {
      ::grpc::Service::MarkMethodStreamed(1,
        new ::grpc::internal::SplitServerStreamingHandler<
          ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest, ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerSplitStreamer<
                     ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest, ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>* streamer) {
                       return this->StreamedGetTemplateDeviceList(context,
                         streamer);
                  }));
    }
    ~WithSplitStreamingMethod_GetTemplateDeviceList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetTemplateDeviceList(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with split streamed
    virtual ::grpc::Status StreamedGetTemplateDeviceList(::grpc::ServerContext* context, ::grpc::ServerSplitStreamer< ::keyapis::telemetry_control::v1::GetTemplateDeviceListRequest,::keyapis::telemetry_control::v1::GetTemplateDeviceListResponse>* server_split_streamer) = 0;
  };
  template <class BaseClass>
  class WithSplitStreamingMethod_GetTemplateIndicatorList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithSplitStreamingMethod_GetTemplateIndicatorList() {
      ::grpc::Service::MarkMethodStreamed(6,
        new ::grpc::internal::SplitServerStreamingHandler<
          ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest, ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerSplitStreamer<
                     ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest, ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>* streamer) {
                       return this->StreamedGetTemplateIndicatorList(context,
                         streamer);
                  }));
    }
    ~WithSplitStreamingMethod_GetTemplateIndicatorList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetTemplateIndicatorList(::grpc::ServerContext* /*context*/, const ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with split streamed
    virtual ::grpc::Status StreamedGetTemplateIndicatorList(::grpc::ServerContext* context, ::grpc::ServerSplitStreamer< ::keyapis::telemetry_control::v1::GetTemplateIndicatorListRequest,::keyapis::telemetry_control::v1::GetTemplateIndicatorListResponse>* server_split_streamer) = 0;
  };
  typedef WithSplitStreamingMethod_GetTemplateDeviceList<WithSplitStreamingMethod_GetTemplateIndicatorList<Service > > SplitStreamedService;
  typedef WithStreamedUnaryMethod_GetTemplateDevice<WithSplitStreamingMethod_GetTemplateDeviceList<WithStreamedUnaryMethod_GetTemplateDeviceCount<WithStreamedUnaryMethod_PostTemplateDevice<WithStreamedUnaryMethod_DeleteTemplateDevice<WithStreamedUnaryMethod_GetTemplateIndicator<WithSplitStreamingMethod_GetTemplateIndicatorList<WithStreamedUnaryMethod_GetTemplateIndicatorCount<WithStreamedUnaryMethod_PostTemplateIndicator<WithStreamedUnaryMethod_DeleteTemplateIndicator<Service > > > > > > > > > > StreamedService;
};

}  // namespace v1
}  // namespace telemetry_control
}  // namespace keyapis


#endif  // GRPC_keyapis_2ftelemetry_5fcontrol_2fv1_2fkeyapis_5ftelemetry_5fcontrol_5ftemplate_5fv1_2eproto__INCLUDED
