// Generated by the gRPC C++ plugin.
// If you make any local change, they will be lost.
// source: deviceapis/device/v1/deviceapis_device_room_v1.proto
// Original file comments:
//
// Сервис управления настройками квартир
#ifndef GRPC_deviceapis_2fdevice_2fv1_2fdeviceapis_5fdevice_5froom_5fv1_2eproto__INCLUDED
#define GRPC_deviceapis_2fdevice_2fv1_2fdeviceapis_5fdevice_5froom_5fv1_2eproto__INCLUDED

#include "deviceapis/device/v1/deviceapis_device_room_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 deviceapis {
namespace device {
namespace v1 {

// Сервис управления настройками квартир
class RoomService final {
 public:
  static constexpr char const* service_full_name() {
    return "deviceapis.device.v1.RoomService";
  }
  class StubInterface {
   public:
    virtual ~StubInterface() {}
    // Метод удаления настроек квартиры
    virtual ::grpc::Status DeleteRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomRequest& request, ::deviceapis::device::v1::DeleteRoomResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::DeleteRoomResponse>> AsyncDeleteRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::DeleteRoomResponse>>(AsyncDeleteRoomRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::DeleteRoomResponse>> PrepareAsyncDeleteRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::DeleteRoomResponse>>(PrepareAsyncDeleteRoomRaw(context, request, cq));
    }
    // Метод удаления списка настроек квартиры.
    // При отсутствующем или пустом фильтре удаляются все квартиры
    virtual ::grpc::Status DeleteRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomListRequest& request, ::deviceapis::device::v1::DeleteRoomListResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::DeleteRoomListResponse>> AsyncDeleteRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::DeleteRoomListResponse>>(AsyncDeleteRoomListRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::DeleteRoomListResponse>> PrepareAsyncDeleteRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::DeleteRoomListResponse>>(PrepareAsyncDeleteRoomListRaw(context, request, cq));
    }
    // Метод получения настроек квартиры
    virtual ::grpc::Status GetRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomRequest& request, ::deviceapis::device::v1::GetRoomResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetRoomResponse>> AsyncGetRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetRoomResponse>>(AsyncGetRoomRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetRoomResponse>> PrepareAsyncGetRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetRoomResponse>>(PrepareAsyncGetRoomRaw(context, request, cq));
    }
    // Метод получения количества квартир
    virtual ::grpc::Status GetRoomCount(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomCountRequest& request, ::deviceapis::device::v1::GetRoomCountResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetRoomCountResponse>> AsyncGetRoomCount(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetRoomCountResponse>>(AsyncGetRoomCountRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetRoomCountResponse>> PrepareAsyncGetRoomCount(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetRoomCountResponse>>(PrepareAsyncGetRoomCountRaw(context, request, cq));
    }
    // Метод получения списка настроек квартир
    virtual ::grpc::Status GetRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomListRequest& request, ::deviceapis::device::v1::GetRoomListResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetRoomListResponse>> AsyncGetRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetRoomListResponse>>(AsyncGetRoomListRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetRoomListResponse>> PrepareAsyncGetRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetRoomListResponse>>(PrepareAsyncGetRoomListRaw(context, request, cq));
    }
    // Метод сохранения настроек квартиры.
    // Поддерживает создание и обновление
    virtual ::grpc::Status SaveRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomRequest& request, ::deviceapis::device::v1::SaveRoomResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveRoomResponse>> AsyncSaveRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveRoomResponse>>(AsyncSaveRoomRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveRoomResponse>> PrepareAsyncSaveRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveRoomResponse>>(PrepareAsyncSaveRoomRaw(context, request, cq));
    }
    // Метод сохранения списка настроек квартиры
    virtual ::grpc::Status SaveRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomListRequest& request, ::deviceapis::device::v1::SaveRoomListResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveRoomListResponse>> AsyncSaveRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveRoomListResponse>>(AsyncSaveRoomListRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveRoomListResponse>> PrepareAsyncSaveRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveRoomListResponse>>(PrepareAsyncSaveRoomListRaw(context, request, cq));
    }
    class async_interface {
     public:
      virtual ~async_interface() {}
      // Метод удаления настроек квартиры
      virtual void DeleteRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomRequest* request, ::deviceapis::device::v1::DeleteRoomResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void DeleteRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomRequest* request, ::deviceapis::device::v1::DeleteRoomResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод удаления списка настроек квартиры.
      // При отсутствующем или пустом фильтре удаляются все квартиры
      virtual void DeleteRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomListRequest* request, ::deviceapis::device::v1::DeleteRoomListResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void DeleteRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomListRequest* request, ::deviceapis::device::v1::DeleteRoomListResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод получения настроек квартиры
      virtual void GetRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomRequest* request, ::deviceapis::device::v1::GetRoomResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomRequest* request, ::deviceapis::device::v1::GetRoomResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод получения количества квартир
      virtual void GetRoomCount(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomCountRequest* request, ::deviceapis::device::v1::GetRoomCountResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetRoomCount(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomCountRequest* request, ::deviceapis::device::v1::GetRoomCountResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод получения списка настроек квартир
      virtual void GetRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomListRequest* request, ::deviceapis::device::v1::GetRoomListResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomListRequest* request, ::deviceapis::device::v1::GetRoomListResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод сохранения настроек квартиры.
      // Поддерживает создание и обновление
      virtual void SaveRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomRequest* request, ::deviceapis::device::v1::SaveRoomResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void SaveRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomRequest* request, ::deviceapis::device::v1::SaveRoomResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод сохранения списка настроек квартиры
      virtual void SaveRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomListRequest* request, ::deviceapis::device::v1::SaveRoomListResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void SaveRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomListRequest* request, ::deviceapis::device::v1::SaveRoomListResponse* 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< ::deviceapis::device::v1::DeleteRoomResponse>* AsyncDeleteRoomRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::DeleteRoomResponse>* PrepareAsyncDeleteRoomRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::DeleteRoomListResponse>* AsyncDeleteRoomListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomListRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::DeleteRoomListResponse>* PrepareAsyncDeleteRoomListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomListRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetRoomResponse>* AsyncGetRoomRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetRoomResponse>* PrepareAsyncGetRoomRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetRoomCountResponse>* AsyncGetRoomCountRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomCountRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetRoomCountResponse>* PrepareAsyncGetRoomCountRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomCountRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetRoomListResponse>* AsyncGetRoomListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomListRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetRoomListResponse>* PrepareAsyncGetRoomListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomListRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveRoomResponse>* AsyncSaveRoomRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveRoomResponse>* PrepareAsyncSaveRoomRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveRoomListResponse>* AsyncSaveRoomListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomListRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveRoomListResponse>* PrepareAsyncSaveRoomListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomListRequest& 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 DeleteRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomRequest& request, ::deviceapis::device::v1::DeleteRoomResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::DeleteRoomResponse>> AsyncDeleteRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::DeleteRoomResponse>>(AsyncDeleteRoomRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::DeleteRoomResponse>> PrepareAsyncDeleteRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::DeleteRoomResponse>>(PrepareAsyncDeleteRoomRaw(context, request, cq));
    }
    ::grpc::Status DeleteRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomListRequest& request, ::deviceapis::device::v1::DeleteRoomListResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::DeleteRoomListResponse>> AsyncDeleteRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::DeleteRoomListResponse>>(AsyncDeleteRoomListRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::DeleteRoomListResponse>> PrepareAsyncDeleteRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::DeleteRoomListResponse>>(PrepareAsyncDeleteRoomListRaw(context, request, cq));
    }
    ::grpc::Status GetRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomRequest& request, ::deviceapis::device::v1::GetRoomResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetRoomResponse>> AsyncGetRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetRoomResponse>>(AsyncGetRoomRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetRoomResponse>> PrepareAsyncGetRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetRoomResponse>>(PrepareAsyncGetRoomRaw(context, request, cq));
    }
    ::grpc::Status GetRoomCount(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomCountRequest& request, ::deviceapis::device::v1::GetRoomCountResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetRoomCountResponse>> AsyncGetRoomCount(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetRoomCountResponse>>(AsyncGetRoomCountRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetRoomCountResponse>> PrepareAsyncGetRoomCount(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetRoomCountResponse>>(PrepareAsyncGetRoomCountRaw(context, request, cq));
    }
    ::grpc::Status GetRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomListRequest& request, ::deviceapis::device::v1::GetRoomListResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetRoomListResponse>> AsyncGetRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetRoomListResponse>>(AsyncGetRoomListRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetRoomListResponse>> PrepareAsyncGetRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetRoomListResponse>>(PrepareAsyncGetRoomListRaw(context, request, cq));
    }
    ::grpc::Status SaveRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomRequest& request, ::deviceapis::device::v1::SaveRoomResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveRoomResponse>> AsyncSaveRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveRoomResponse>>(AsyncSaveRoomRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveRoomResponse>> PrepareAsyncSaveRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveRoomResponse>>(PrepareAsyncSaveRoomRaw(context, request, cq));
    }
    ::grpc::Status SaveRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomListRequest& request, ::deviceapis::device::v1::SaveRoomListResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveRoomListResponse>> AsyncSaveRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveRoomListResponse>>(AsyncSaveRoomListRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveRoomListResponse>> PrepareAsyncSaveRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveRoomListResponse>>(PrepareAsyncSaveRoomListRaw(context, request, cq));
    }
    class async final :
      public StubInterface::async_interface {
     public:
      void DeleteRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomRequest* request, ::deviceapis::device::v1::DeleteRoomResponse* response, std::function<void(::grpc::Status)>) override;
      void DeleteRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomRequest* request, ::deviceapis::device::v1::DeleteRoomResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void DeleteRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomListRequest* request, ::deviceapis::device::v1::DeleteRoomListResponse* response, std::function<void(::grpc::Status)>) override;
      void DeleteRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomListRequest* request, ::deviceapis::device::v1::DeleteRoomListResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomRequest* request, ::deviceapis::device::v1::GetRoomResponse* response, std::function<void(::grpc::Status)>) override;
      void GetRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomRequest* request, ::deviceapis::device::v1::GetRoomResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetRoomCount(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomCountRequest* request, ::deviceapis::device::v1::GetRoomCountResponse* response, std::function<void(::grpc::Status)>) override;
      void GetRoomCount(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomCountRequest* request, ::deviceapis::device::v1::GetRoomCountResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomListRequest* request, ::deviceapis::device::v1::GetRoomListResponse* response, std::function<void(::grpc::Status)>) override;
      void GetRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomListRequest* request, ::deviceapis::device::v1::GetRoomListResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void SaveRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomRequest* request, ::deviceapis::device::v1::SaveRoomResponse* response, std::function<void(::grpc::Status)>) override;
      void SaveRoom(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomRequest* request, ::deviceapis::device::v1::SaveRoomResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void SaveRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomListRequest* request, ::deviceapis::device::v1::SaveRoomListResponse* response, std::function<void(::grpc::Status)>) override;
      void SaveRoomList(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomListRequest* request, ::deviceapis::device::v1::SaveRoomListResponse* 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< ::deviceapis::device::v1::DeleteRoomResponse>* AsyncDeleteRoomRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::DeleteRoomResponse>* PrepareAsyncDeleteRoomRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::DeleteRoomListResponse>* AsyncDeleteRoomListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomListRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::DeleteRoomListResponse>* PrepareAsyncDeleteRoomListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteRoomListRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetRoomResponse>* AsyncGetRoomRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetRoomResponse>* PrepareAsyncGetRoomRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetRoomCountResponse>* AsyncGetRoomCountRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomCountRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetRoomCountResponse>* PrepareAsyncGetRoomCountRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomCountRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetRoomListResponse>* AsyncGetRoomListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomListRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetRoomListResponse>* PrepareAsyncGetRoomListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetRoomListRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveRoomResponse>* AsyncSaveRoomRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveRoomResponse>* PrepareAsyncSaveRoomRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveRoomListResponse>* AsyncSaveRoomListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomListRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveRoomListResponse>* PrepareAsyncSaveRoomListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveRoomListRequest& request, ::grpc::CompletionQueue* cq) override;
    const ::grpc::internal::RpcMethod rpcmethod_DeleteRoom_;
    const ::grpc::internal::RpcMethod rpcmethod_DeleteRoomList_;
    const ::grpc::internal::RpcMethod rpcmethod_GetRoom_;
    const ::grpc::internal::RpcMethod rpcmethod_GetRoomCount_;
    const ::grpc::internal::RpcMethod rpcmethod_GetRoomList_;
    const ::grpc::internal::RpcMethod rpcmethod_SaveRoom_;
    const ::grpc::internal::RpcMethod rpcmethod_SaveRoomList_;
  };
  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();
    // Метод удаления настроек квартиры
    virtual ::grpc::Status DeleteRoom(::grpc::ServerContext* context, const ::deviceapis::device::v1::DeleteRoomRequest* request, ::deviceapis::device::v1::DeleteRoomResponse* response);
    // Метод удаления списка настроек квартиры.
    // При отсутствующем или пустом фильтре удаляются все квартиры
    virtual ::grpc::Status DeleteRoomList(::grpc::ServerContext* context, const ::deviceapis::device::v1::DeleteRoomListRequest* request, ::deviceapis::device::v1::DeleteRoomListResponse* response);
    // Метод получения настроек квартиры
    virtual ::grpc::Status GetRoom(::grpc::ServerContext* context, const ::deviceapis::device::v1::GetRoomRequest* request, ::deviceapis::device::v1::GetRoomResponse* response);
    // Метод получения количества квартир
    virtual ::grpc::Status GetRoomCount(::grpc::ServerContext* context, const ::deviceapis::device::v1::GetRoomCountRequest* request, ::deviceapis::device::v1::GetRoomCountResponse* response);
    // Метод получения списка настроек квартир
    virtual ::grpc::Status GetRoomList(::grpc::ServerContext* context, const ::deviceapis::device::v1::GetRoomListRequest* request, ::deviceapis::device::v1::GetRoomListResponse* response);
    // Метод сохранения настроек квартиры.
    // Поддерживает создание и обновление
    virtual ::grpc::Status SaveRoom(::grpc::ServerContext* context, const ::deviceapis::device::v1::SaveRoomRequest* request, ::deviceapis::device::v1::SaveRoomResponse* response);
    // Метод сохранения списка настроек квартиры
    virtual ::grpc::Status SaveRoomList(::grpc::ServerContext* context, const ::deviceapis::device::v1::SaveRoomListRequest* request, ::deviceapis::device::v1::SaveRoomListResponse* response);
  };
  template <class BaseClass>
  class WithAsyncMethod_DeleteRoom : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_DeleteRoom() {
      ::grpc::Service::MarkMethodAsync(0);
    }
    ~WithAsyncMethod_DeleteRoom() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteRoom(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteRoomRequest* /*request*/, ::deviceapis::device::v1::DeleteRoomResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestDeleteRoom(::grpc::ServerContext* context, ::deviceapis::device::v1::DeleteRoomRequest* request, ::grpc::ServerAsyncResponseWriter< ::deviceapis::device::v1::DeleteRoomResponse>* 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_DeleteRoomList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_DeleteRoomList() {
      ::grpc::Service::MarkMethodAsync(1);
    }
    ~WithAsyncMethod_DeleteRoomList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteRoomList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteRoomListRequest* /*request*/, ::deviceapis::device::v1::DeleteRoomListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestDeleteRoomList(::grpc::ServerContext* context, ::deviceapis::device::v1::DeleteRoomListRequest* request, ::grpc::ServerAsyncResponseWriter< ::deviceapis::device::v1::DeleteRoomListResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(1, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_GetRoom : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetRoom() {
      ::grpc::Service::MarkMethodAsync(2);
    }
    ~WithAsyncMethod_GetRoom() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetRoom(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetRoomRequest* /*request*/, ::deviceapis::device::v1::GetRoomResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetRoom(::grpc::ServerContext* context, ::deviceapis::device::v1::GetRoomRequest* request, ::grpc::ServerAsyncResponseWriter< ::deviceapis::device::v1::GetRoomResponse>* 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_GetRoomCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetRoomCount() {
      ::grpc::Service::MarkMethodAsync(3);
    }
    ~WithAsyncMethod_GetRoomCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetRoomCount(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetRoomCountRequest* /*request*/, ::deviceapis::device::v1::GetRoomCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetRoomCount(::grpc::ServerContext* context, ::deviceapis::device::v1::GetRoomCountRequest* request, ::grpc::ServerAsyncResponseWriter< ::deviceapis::device::v1::GetRoomCountResponse>* 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_GetRoomList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetRoomList() {
      ::grpc::Service::MarkMethodAsync(4);
    }
    ~WithAsyncMethod_GetRoomList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetRoomList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetRoomListRequest* /*request*/, ::deviceapis::device::v1::GetRoomListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetRoomList(::grpc::ServerContext* context, ::deviceapis::device::v1::GetRoomListRequest* request, ::grpc::ServerAsyncResponseWriter< ::deviceapis::device::v1::GetRoomListResponse>* 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_SaveRoom : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_SaveRoom() {
      ::grpc::Service::MarkMethodAsync(5);
    }
    ~WithAsyncMethod_SaveRoom() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveRoom(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveRoomRequest* /*request*/, ::deviceapis::device::v1::SaveRoomResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSaveRoom(::grpc::ServerContext* context, ::deviceapis::device::v1::SaveRoomRequest* request, ::grpc::ServerAsyncResponseWriter< ::deviceapis::device::v1::SaveRoomResponse>* 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_SaveRoomList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_SaveRoomList() {
      ::grpc::Service::MarkMethodAsync(6);
    }
    ~WithAsyncMethod_SaveRoomList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveRoomList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveRoomListRequest* /*request*/, ::deviceapis::device::v1::SaveRoomListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSaveRoomList(::grpc::ServerContext* context, ::deviceapis::device::v1::SaveRoomListRequest* request, ::grpc::ServerAsyncResponseWriter< ::deviceapis::device::v1::SaveRoomListResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(6, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  typedef WithAsyncMethod_DeleteRoom<WithAsyncMethod_DeleteRoomList<WithAsyncMethod_GetRoom<WithAsyncMethod_GetRoomCount<WithAsyncMethod_GetRoomList<WithAsyncMethod_SaveRoom<WithAsyncMethod_SaveRoomList<Service > > > > > > > AsyncService;
  template <class BaseClass>
  class WithCallbackMethod_DeleteRoom : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_DeleteRoom() {
      ::grpc::Service::MarkMethodCallback(0,
          new ::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::DeleteRoomRequest, ::deviceapis::device::v1::DeleteRoomResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::deviceapis::device::v1::DeleteRoomRequest* request, ::deviceapis::device::v1::DeleteRoomResponse* response) { return this->DeleteRoom(context, request, response); }));}
    void SetMessageAllocatorFor_DeleteRoom(
        ::grpc::MessageAllocator< ::deviceapis::device::v1::DeleteRoomRequest, ::deviceapis::device::v1::DeleteRoomResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(0);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::DeleteRoomRequest, ::deviceapis::device::v1::DeleteRoomResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_DeleteRoom() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteRoom(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteRoomRequest* /*request*/, ::deviceapis::device::v1::DeleteRoomResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* DeleteRoom(
      ::grpc::CallbackServerContext* /*context*/, const ::deviceapis::device::v1::DeleteRoomRequest* /*request*/, ::deviceapis::device::v1::DeleteRoomResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_DeleteRoomList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_DeleteRoomList() {
      ::grpc::Service::MarkMethodCallback(1,
          new ::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::DeleteRoomListRequest, ::deviceapis::device::v1::DeleteRoomListResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::deviceapis::device::v1::DeleteRoomListRequest* request, ::deviceapis::device::v1::DeleteRoomListResponse* response) { return this->DeleteRoomList(context, request, response); }));}
    void SetMessageAllocatorFor_DeleteRoomList(
        ::grpc::MessageAllocator< ::deviceapis::device::v1::DeleteRoomListRequest, ::deviceapis::device::v1::DeleteRoomListResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(1);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::DeleteRoomListRequest, ::deviceapis::device::v1::DeleteRoomListResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_DeleteRoomList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteRoomList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteRoomListRequest* /*request*/, ::deviceapis::device::v1::DeleteRoomListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* DeleteRoomList(
      ::grpc::CallbackServerContext* /*context*/, const ::deviceapis::device::v1::DeleteRoomListRequest* /*request*/, ::deviceapis::device::v1::DeleteRoomListResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetRoom : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetRoom() {
      ::grpc::Service::MarkMethodCallback(2,
          new ::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::GetRoomRequest, ::deviceapis::device::v1::GetRoomResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::deviceapis::device::v1::GetRoomRequest* request, ::deviceapis::device::v1::GetRoomResponse* response) { return this->GetRoom(context, request, response); }));}
    void SetMessageAllocatorFor_GetRoom(
        ::grpc::MessageAllocator< ::deviceapis::device::v1::GetRoomRequest, ::deviceapis::device::v1::GetRoomResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(2);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::GetRoomRequest, ::deviceapis::device::v1::GetRoomResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetRoom() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetRoom(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetRoomRequest* /*request*/, ::deviceapis::device::v1::GetRoomResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetRoom(
      ::grpc::CallbackServerContext* /*context*/, const ::deviceapis::device::v1::GetRoomRequest* /*request*/, ::deviceapis::device::v1::GetRoomResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetRoomCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetRoomCount() {
      ::grpc::Service::MarkMethodCallback(3,
          new ::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::GetRoomCountRequest, ::deviceapis::device::v1::GetRoomCountResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::deviceapis::device::v1::GetRoomCountRequest* request, ::deviceapis::device::v1::GetRoomCountResponse* response) { return this->GetRoomCount(context, request, response); }));}
    void SetMessageAllocatorFor_GetRoomCount(
        ::grpc::MessageAllocator< ::deviceapis::device::v1::GetRoomCountRequest, ::deviceapis::device::v1::GetRoomCountResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(3);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::GetRoomCountRequest, ::deviceapis::device::v1::GetRoomCountResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetRoomCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetRoomCount(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetRoomCountRequest* /*request*/, ::deviceapis::device::v1::GetRoomCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetRoomCount(
      ::grpc::CallbackServerContext* /*context*/, const ::deviceapis::device::v1::GetRoomCountRequest* /*request*/, ::deviceapis::device::v1::GetRoomCountResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetRoomList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetRoomList() {
      ::grpc::Service::MarkMethodCallback(4,
          new ::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::GetRoomListRequest, ::deviceapis::device::v1::GetRoomListResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::deviceapis::device::v1::GetRoomListRequest* request, ::deviceapis::device::v1::GetRoomListResponse* response) { return this->GetRoomList(context, request, response); }));}
    void SetMessageAllocatorFor_GetRoomList(
        ::grpc::MessageAllocator< ::deviceapis::device::v1::GetRoomListRequest, ::deviceapis::device::v1::GetRoomListResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(4);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::GetRoomListRequest, ::deviceapis::device::v1::GetRoomListResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetRoomList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetRoomList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetRoomListRequest* /*request*/, ::deviceapis::device::v1::GetRoomListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetRoomList(
      ::grpc::CallbackServerContext* /*context*/, const ::deviceapis::device::v1::GetRoomListRequest* /*request*/, ::deviceapis::device::v1::GetRoomListResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_SaveRoom : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_SaveRoom() {
      ::grpc::Service::MarkMethodCallback(5,
          new ::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::SaveRoomRequest, ::deviceapis::device::v1::SaveRoomResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::deviceapis::device::v1::SaveRoomRequest* request, ::deviceapis::device::v1::SaveRoomResponse* response) { return this->SaveRoom(context, request, response); }));}
    void SetMessageAllocatorFor_SaveRoom(
        ::grpc::MessageAllocator< ::deviceapis::device::v1::SaveRoomRequest, ::deviceapis::device::v1::SaveRoomResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(5);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::SaveRoomRequest, ::deviceapis::device::v1::SaveRoomResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_SaveRoom() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveRoom(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveRoomRequest* /*request*/, ::deviceapis::device::v1::SaveRoomResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* SaveRoom(
      ::grpc::CallbackServerContext* /*context*/, const ::deviceapis::device::v1::SaveRoomRequest* /*request*/, ::deviceapis::device::v1::SaveRoomResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_SaveRoomList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_SaveRoomList() {
      ::grpc::Service::MarkMethodCallback(6,
          new ::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::SaveRoomListRequest, ::deviceapis::device::v1::SaveRoomListResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::deviceapis::device::v1::SaveRoomListRequest* request, ::deviceapis::device::v1::SaveRoomListResponse* response) { return this->SaveRoomList(context, request, response); }));}
    void SetMessageAllocatorFor_SaveRoomList(
        ::grpc::MessageAllocator< ::deviceapis::device::v1::SaveRoomListRequest, ::deviceapis::device::v1::SaveRoomListResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(6);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::SaveRoomListRequest, ::deviceapis::device::v1::SaveRoomListResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_SaveRoomList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveRoomList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveRoomListRequest* /*request*/, ::deviceapis::device::v1::SaveRoomListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* SaveRoomList(
      ::grpc::CallbackServerContext* /*context*/, const ::deviceapis::device::v1::SaveRoomListRequest* /*request*/, ::deviceapis::device::v1::SaveRoomListResponse* /*response*/)  { return nullptr; }
  };
  typedef WithCallbackMethod_DeleteRoom<WithCallbackMethod_DeleteRoomList<WithCallbackMethod_GetRoom<WithCallbackMethod_GetRoomCount<WithCallbackMethod_GetRoomList<WithCallbackMethod_SaveRoom<WithCallbackMethod_SaveRoomList<Service > > > > > > > CallbackService;
  typedef CallbackService ExperimentalCallbackService;
  template <class BaseClass>
  class WithGenericMethod_DeleteRoom : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_DeleteRoom() {
      ::grpc::Service::MarkMethodGeneric(0);
    }
    ~WithGenericMethod_DeleteRoom() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteRoom(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteRoomRequest* /*request*/, ::deviceapis::device::v1::DeleteRoomResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_DeleteRoomList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_DeleteRoomList() {
      ::grpc::Service::MarkMethodGeneric(1);
    }
    ~WithGenericMethod_DeleteRoomList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteRoomList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteRoomListRequest* /*request*/, ::deviceapis::device::v1::DeleteRoomListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetRoom : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetRoom() {
      ::grpc::Service::MarkMethodGeneric(2);
    }
    ~WithGenericMethod_GetRoom() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetRoom(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetRoomRequest* /*request*/, ::deviceapis::device::v1::GetRoomResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetRoomCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetRoomCount() {
      ::grpc::Service::MarkMethodGeneric(3);
    }
    ~WithGenericMethod_GetRoomCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetRoomCount(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetRoomCountRequest* /*request*/, ::deviceapis::device::v1::GetRoomCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetRoomList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetRoomList() {
      ::grpc::Service::MarkMethodGeneric(4);
    }
    ~WithGenericMethod_GetRoomList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetRoomList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetRoomListRequest* /*request*/, ::deviceapis::device::v1::GetRoomListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_SaveRoom : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_SaveRoom() {
      ::grpc::Service::MarkMethodGeneric(5);
    }
    ~WithGenericMethod_SaveRoom() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveRoom(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveRoomRequest* /*request*/, ::deviceapis::device::v1::SaveRoomResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_SaveRoomList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_SaveRoomList() {
      ::grpc::Service::MarkMethodGeneric(6);
    }
    ~WithGenericMethod_SaveRoomList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveRoomList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveRoomListRequest* /*request*/, ::deviceapis::device::v1::SaveRoomListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithRawMethod_DeleteRoom : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_DeleteRoom() {
      ::grpc::Service::MarkMethodRaw(0);
    }
    ~WithRawMethod_DeleteRoom() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteRoom(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteRoomRequest* /*request*/, ::deviceapis::device::v1::DeleteRoomResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestDeleteRoom(::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_DeleteRoomList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_DeleteRoomList() {
      ::grpc::Service::MarkMethodRaw(1);
    }
    ~WithRawMethod_DeleteRoomList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteRoomList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteRoomListRequest* /*request*/, ::deviceapis::device::v1::DeleteRoomListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestDeleteRoomList(::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(1, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetRoom : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetRoom() {
      ::grpc::Service::MarkMethodRaw(2);
    }
    ~WithRawMethod_GetRoom() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetRoom(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetRoomRequest* /*request*/, ::deviceapis::device::v1::GetRoomResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetRoom(::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_GetRoomCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetRoomCount() {
      ::grpc::Service::MarkMethodRaw(3);
    }
    ~WithRawMethod_GetRoomCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetRoomCount(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetRoomCountRequest* /*request*/, ::deviceapis::device::v1::GetRoomCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetRoomCount(::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_GetRoomList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetRoomList() {
      ::grpc::Service::MarkMethodRaw(4);
    }
    ~WithRawMethod_GetRoomList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetRoomList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetRoomListRequest* /*request*/, ::deviceapis::device::v1::GetRoomListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetRoomList(::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_SaveRoom : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_SaveRoom() {
      ::grpc::Service::MarkMethodRaw(5);
    }
    ~WithRawMethod_SaveRoom() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveRoom(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveRoomRequest* /*request*/, ::deviceapis::device::v1::SaveRoomResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSaveRoom(::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_SaveRoomList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_SaveRoomList() {
      ::grpc::Service::MarkMethodRaw(6);
    }
    ~WithRawMethod_SaveRoomList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveRoomList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveRoomListRequest* /*request*/, ::deviceapis::device::v1::SaveRoomListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSaveRoomList(::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(6, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_DeleteRoom : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_DeleteRoom() {
      ::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->DeleteRoom(context, request, response); }));
    }
    ~WithRawCallbackMethod_DeleteRoom() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteRoom(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteRoomRequest* /*request*/, ::deviceapis::device::v1::DeleteRoomResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* DeleteRoom(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_DeleteRoomList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_DeleteRoomList() {
      ::grpc::Service::MarkMethodRawCallback(1,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->DeleteRoomList(context, request, response); }));
    }
    ~WithRawCallbackMethod_DeleteRoomList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteRoomList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteRoomListRequest* /*request*/, ::deviceapis::device::v1::DeleteRoomListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* DeleteRoomList(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetRoom : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetRoom() {
      ::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->GetRoom(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetRoom() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetRoom(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetRoomRequest* /*request*/, ::deviceapis::device::v1::GetRoomResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetRoom(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetRoomCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetRoomCount() {
      ::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->GetRoomCount(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetRoomCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetRoomCount(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetRoomCountRequest* /*request*/, ::deviceapis::device::v1::GetRoomCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetRoomCount(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetRoomList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetRoomList() {
      ::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->GetRoomList(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetRoomList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetRoomList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetRoomListRequest* /*request*/, ::deviceapis::device::v1::GetRoomListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetRoomList(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_SaveRoom : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_SaveRoom() {
      ::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->SaveRoom(context, request, response); }));
    }
    ~WithRawCallbackMethod_SaveRoom() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveRoom(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveRoomRequest* /*request*/, ::deviceapis::device::v1::SaveRoomResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* SaveRoom(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_SaveRoomList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_SaveRoomList() {
      ::grpc::Service::MarkMethodRawCallback(6,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->SaveRoomList(context, request, response); }));
    }
    ~WithRawCallbackMethod_SaveRoomList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveRoomList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveRoomListRequest* /*request*/, ::deviceapis::device::v1::SaveRoomListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* SaveRoomList(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_DeleteRoom : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_DeleteRoom() {
      ::grpc::Service::MarkMethodStreamed(0,
        new ::grpc::internal::StreamedUnaryHandler<
          ::deviceapis::device::v1::DeleteRoomRequest, ::deviceapis::device::v1::DeleteRoomResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::deviceapis::device::v1::DeleteRoomRequest, ::deviceapis::device::v1::DeleteRoomResponse>* streamer) {
                       return this->StreamedDeleteRoom(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_DeleteRoom() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status DeleteRoom(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteRoomRequest* /*request*/, ::deviceapis::device::v1::DeleteRoomResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedDeleteRoom(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::deviceapis::device::v1::DeleteRoomRequest,::deviceapis::device::v1::DeleteRoomResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_DeleteRoomList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_DeleteRoomList() {
      ::grpc::Service::MarkMethodStreamed(1,
        new ::grpc::internal::StreamedUnaryHandler<
          ::deviceapis::device::v1::DeleteRoomListRequest, ::deviceapis::device::v1::DeleteRoomListResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::deviceapis::device::v1::DeleteRoomListRequest, ::deviceapis::device::v1::DeleteRoomListResponse>* streamer) {
                       return this->StreamedDeleteRoomList(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_DeleteRoomList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status DeleteRoomList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteRoomListRequest* /*request*/, ::deviceapis::device::v1::DeleteRoomListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedDeleteRoomList(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::deviceapis::device::v1::DeleteRoomListRequest,::deviceapis::device::v1::DeleteRoomListResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetRoom : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetRoom() {
      ::grpc::Service::MarkMethodStreamed(2,
        new ::grpc::internal::StreamedUnaryHandler<
          ::deviceapis::device::v1::GetRoomRequest, ::deviceapis::device::v1::GetRoomResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::deviceapis::device::v1::GetRoomRequest, ::deviceapis::device::v1::GetRoomResponse>* streamer) {
                       return this->StreamedGetRoom(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetRoom() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetRoom(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetRoomRequest* /*request*/, ::deviceapis::device::v1::GetRoomResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetRoom(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::deviceapis::device::v1::GetRoomRequest,::deviceapis::device::v1::GetRoomResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetRoomCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetRoomCount() {
      ::grpc::Service::MarkMethodStreamed(3,
        new ::grpc::internal::StreamedUnaryHandler<
          ::deviceapis::device::v1::GetRoomCountRequest, ::deviceapis::device::v1::GetRoomCountResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::deviceapis::device::v1::GetRoomCountRequest, ::deviceapis::device::v1::GetRoomCountResponse>* streamer) {
                       return this->StreamedGetRoomCount(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetRoomCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetRoomCount(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetRoomCountRequest* /*request*/, ::deviceapis::device::v1::GetRoomCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetRoomCount(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::deviceapis::device::v1::GetRoomCountRequest,::deviceapis::device::v1::GetRoomCountResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetRoomList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetRoomList() {
      ::grpc::Service::MarkMethodStreamed(4,
        new ::grpc::internal::StreamedUnaryHandler<
          ::deviceapis::device::v1::GetRoomListRequest, ::deviceapis::device::v1::GetRoomListResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::deviceapis::device::v1::GetRoomListRequest, ::deviceapis::device::v1::GetRoomListResponse>* streamer) {
                       return this->StreamedGetRoomList(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetRoomList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetRoomList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetRoomListRequest* /*request*/, ::deviceapis::device::v1::GetRoomListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetRoomList(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::deviceapis::device::v1::GetRoomListRequest,::deviceapis::device::v1::GetRoomListResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_SaveRoom : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_SaveRoom() {
      ::grpc::Service::MarkMethodStreamed(5,
        new ::grpc::internal::StreamedUnaryHandler<
          ::deviceapis::device::v1::SaveRoomRequest, ::deviceapis::device::v1::SaveRoomResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::deviceapis::device::v1::SaveRoomRequest, ::deviceapis::device::v1::SaveRoomResponse>* streamer) {
                       return this->StreamedSaveRoom(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_SaveRoom() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status SaveRoom(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveRoomRequest* /*request*/, ::deviceapis::device::v1::SaveRoomResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedSaveRoom(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::deviceapis::device::v1::SaveRoomRequest,::deviceapis::device::v1::SaveRoomResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_SaveRoomList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_SaveRoomList() {
      ::grpc::Service::MarkMethodStreamed(6,
        new ::grpc::internal::StreamedUnaryHandler<
          ::deviceapis::device::v1::SaveRoomListRequest, ::deviceapis::device::v1::SaveRoomListResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::deviceapis::device::v1::SaveRoomListRequest, ::deviceapis::device::v1::SaveRoomListResponse>* streamer) {
                       return this->StreamedSaveRoomList(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_SaveRoomList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status SaveRoomList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveRoomListRequest* /*request*/, ::deviceapis::device::v1::SaveRoomListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedSaveRoomList(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::deviceapis::device::v1::SaveRoomListRequest,::deviceapis::device::v1::SaveRoomListResponse>* server_unary_streamer) = 0;
  };
  typedef WithStreamedUnaryMethod_DeleteRoom<WithStreamedUnaryMethod_DeleteRoomList<WithStreamedUnaryMethod_GetRoom<WithStreamedUnaryMethod_GetRoomCount<WithStreamedUnaryMethod_GetRoomList<WithStreamedUnaryMethod_SaveRoom<WithStreamedUnaryMethod_SaveRoomList<Service > > > > > > > StreamedUnaryService;
  typedef Service SplitStreamedService;
  typedef WithStreamedUnaryMethod_DeleteRoom<WithStreamedUnaryMethod_DeleteRoomList<WithStreamedUnaryMethod_GetRoom<WithStreamedUnaryMethod_GetRoomCount<WithStreamedUnaryMethod_GetRoomList<WithStreamedUnaryMethod_SaveRoom<WithStreamedUnaryMethod_SaveRoomList<Service > > > > > > > StreamedService;
};

}  // namespace v1
}  // namespace device
}  // namespace deviceapis


#endif  // GRPC_deviceapis_2fdevice_2fv1_2fdeviceapis_5fdevice_5froom_5fv1_2eproto__INCLUDED
