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

#include "deviceapis/device/v1/deviceapis_device_code_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 CodeService final {
 public:
  static constexpr char const* service_full_name() {
    return "deviceapis.device.v1.CodeService";
  }
  class StubInterface {
   public:
    virtual ~StubInterface() {}
    // Метод удаления одного кода доступа
    virtual ::grpc::Status DeleteCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeRequest& request, ::deviceapis::device::v1::DeleteCodeResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::DeleteCodeResponse>> AsyncDeleteCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::DeleteCodeResponse>>(AsyncDeleteCodeRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::DeleteCodeResponse>> PrepareAsyncDeleteCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::DeleteCodeResponse>>(PrepareAsyncDeleteCodeRaw(context, request, cq));
    }
    // Метод удаления списка кодов доступа
    virtual ::grpc::Status DeleteCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeListRequest& request, ::deviceapis::device::v1::DeleteCodeListResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::DeleteCodeListResponse>> AsyncDeleteCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::DeleteCodeListResponse>>(AsyncDeleteCodeListRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::DeleteCodeListResponse>> PrepareAsyncDeleteCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::DeleteCodeListResponse>>(PrepareAsyncDeleteCodeListRaw(context, request, cq));
    }
    // Метод получения кода доступа
    virtual ::grpc::Status GetCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeRequest& request, ::deviceapis::device::v1::GetCodeResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetCodeResponse>> AsyncGetCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetCodeResponse>>(AsyncGetCodeRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetCodeResponse>> PrepareAsyncGetCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetCodeResponse>>(PrepareAsyncGetCodeRaw(context, request, cq));
    }
    // Метод получения количества кодов доступа
    virtual ::grpc::Status GetCodeCount(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeCountRequest& request, ::deviceapis::device::v1::GetCodeCountResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetCodeCountResponse>> AsyncGetCodeCount(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetCodeCountResponse>>(AsyncGetCodeCountRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetCodeCountResponse>> PrepareAsyncGetCodeCount(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetCodeCountResponse>>(PrepareAsyncGetCodeCountRaw(context, request, cq));
    }
    // Метод получения списка кодов доступа
    virtual ::grpc::Status GetCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeListRequest& request, ::deviceapis::device::v1::GetCodeListResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetCodeListResponse>> AsyncGetCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetCodeListResponse>>(AsyncGetCodeListRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetCodeListResponse>> PrepareAsyncGetCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetCodeListResponse>>(PrepareAsyncGetCodeListRaw(context, request, cq));
    }
    // Метод создания кода доступа
    virtual ::grpc::Status SaveCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeRequest& request, ::deviceapis::device::v1::SaveCodeResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveCodeResponse>> AsyncSaveCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveCodeResponse>>(AsyncSaveCodeRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveCodeResponse>> PrepareAsyncSaveCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveCodeResponse>>(PrepareAsyncSaveCodeRaw(context, request, cq));
    }
    // Метод создания списка кодов доступа
    virtual ::grpc::Status SaveCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeListRequest& request, ::deviceapis::device::v1::SaveCodeListResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveCodeListResponse>> AsyncSaveCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveCodeListResponse>>(AsyncSaveCodeListRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveCodeListResponse>> PrepareAsyncSaveCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveCodeListResponse>>(PrepareAsyncSaveCodeListRaw(context, request, cq));
    }
    class async_interface {
     public:
      virtual ~async_interface() {}
      // Метод удаления одного кода доступа
      virtual void DeleteCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeRequest* request, ::deviceapis::device::v1::DeleteCodeResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void DeleteCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeRequest* request, ::deviceapis::device::v1::DeleteCodeResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод удаления списка кодов доступа
      virtual void DeleteCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeListRequest* request, ::deviceapis::device::v1::DeleteCodeListResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void DeleteCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeListRequest* request, ::deviceapis::device::v1::DeleteCodeListResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод получения кода доступа
      virtual void GetCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeRequest* request, ::deviceapis::device::v1::GetCodeResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeRequest* request, ::deviceapis::device::v1::GetCodeResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод получения количества кодов доступа
      virtual void GetCodeCount(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeCountRequest* request, ::deviceapis::device::v1::GetCodeCountResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetCodeCount(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeCountRequest* request, ::deviceapis::device::v1::GetCodeCountResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод получения списка кодов доступа
      virtual void GetCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeListRequest* request, ::deviceapis::device::v1::GetCodeListResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeListRequest* request, ::deviceapis::device::v1::GetCodeListResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод создания кода доступа
      virtual void SaveCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeRequest* request, ::deviceapis::device::v1::SaveCodeResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void SaveCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeRequest* request, ::deviceapis::device::v1::SaveCodeResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод создания списка кодов доступа
      virtual void SaveCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeListRequest* request, ::deviceapis::device::v1::SaveCodeListResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void SaveCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeListRequest* request, ::deviceapis::device::v1::SaveCodeListResponse* 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::DeleteCodeResponse>* AsyncDeleteCodeRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::DeleteCodeResponse>* PrepareAsyncDeleteCodeRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::DeleteCodeListResponse>* AsyncDeleteCodeListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeListRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::DeleteCodeListResponse>* PrepareAsyncDeleteCodeListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeListRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetCodeResponse>* AsyncGetCodeRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetCodeResponse>* PrepareAsyncGetCodeRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetCodeCountResponse>* AsyncGetCodeCountRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeCountRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetCodeCountResponse>* PrepareAsyncGetCodeCountRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeCountRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetCodeListResponse>* AsyncGetCodeListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeListRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::GetCodeListResponse>* PrepareAsyncGetCodeListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeListRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveCodeResponse>* AsyncSaveCodeRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveCodeResponse>* PrepareAsyncSaveCodeRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveCodeListResponse>* AsyncSaveCodeListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeListRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::deviceapis::device::v1::SaveCodeListResponse>* PrepareAsyncSaveCodeListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeListRequest& 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 DeleteCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeRequest& request, ::deviceapis::device::v1::DeleteCodeResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::DeleteCodeResponse>> AsyncDeleteCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::DeleteCodeResponse>>(AsyncDeleteCodeRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::DeleteCodeResponse>> PrepareAsyncDeleteCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::DeleteCodeResponse>>(PrepareAsyncDeleteCodeRaw(context, request, cq));
    }
    ::grpc::Status DeleteCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeListRequest& request, ::deviceapis::device::v1::DeleteCodeListResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::DeleteCodeListResponse>> AsyncDeleteCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::DeleteCodeListResponse>>(AsyncDeleteCodeListRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::DeleteCodeListResponse>> PrepareAsyncDeleteCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::DeleteCodeListResponse>>(PrepareAsyncDeleteCodeListRaw(context, request, cq));
    }
    ::grpc::Status GetCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeRequest& request, ::deviceapis::device::v1::GetCodeResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetCodeResponse>> AsyncGetCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetCodeResponse>>(AsyncGetCodeRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetCodeResponse>> PrepareAsyncGetCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetCodeResponse>>(PrepareAsyncGetCodeRaw(context, request, cq));
    }
    ::grpc::Status GetCodeCount(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeCountRequest& request, ::deviceapis::device::v1::GetCodeCountResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetCodeCountResponse>> AsyncGetCodeCount(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetCodeCountResponse>>(AsyncGetCodeCountRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetCodeCountResponse>> PrepareAsyncGetCodeCount(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetCodeCountResponse>>(PrepareAsyncGetCodeCountRaw(context, request, cq));
    }
    ::grpc::Status GetCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeListRequest& request, ::deviceapis::device::v1::GetCodeListResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetCodeListResponse>> AsyncGetCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetCodeListResponse>>(AsyncGetCodeListRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetCodeListResponse>> PrepareAsyncGetCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetCodeListResponse>>(PrepareAsyncGetCodeListRaw(context, request, cq));
    }
    ::grpc::Status SaveCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeRequest& request, ::deviceapis::device::v1::SaveCodeResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveCodeResponse>> AsyncSaveCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveCodeResponse>>(AsyncSaveCodeRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveCodeResponse>> PrepareAsyncSaveCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveCodeResponse>>(PrepareAsyncSaveCodeRaw(context, request, cq));
    }
    ::grpc::Status SaveCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeListRequest& request, ::deviceapis::device::v1::SaveCodeListResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveCodeListResponse>> AsyncSaveCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveCodeListResponse>>(AsyncSaveCodeListRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveCodeListResponse>> PrepareAsyncSaveCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveCodeListResponse>>(PrepareAsyncSaveCodeListRaw(context, request, cq));
    }
    class async final :
      public StubInterface::async_interface {
     public:
      void DeleteCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeRequest* request, ::deviceapis::device::v1::DeleteCodeResponse* response, std::function<void(::grpc::Status)>) override;
      void DeleteCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeRequest* request, ::deviceapis::device::v1::DeleteCodeResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void DeleteCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeListRequest* request, ::deviceapis::device::v1::DeleteCodeListResponse* response, std::function<void(::grpc::Status)>) override;
      void DeleteCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeListRequest* request, ::deviceapis::device::v1::DeleteCodeListResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeRequest* request, ::deviceapis::device::v1::GetCodeResponse* response, std::function<void(::grpc::Status)>) override;
      void GetCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeRequest* request, ::deviceapis::device::v1::GetCodeResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetCodeCount(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeCountRequest* request, ::deviceapis::device::v1::GetCodeCountResponse* response, std::function<void(::grpc::Status)>) override;
      void GetCodeCount(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeCountRequest* request, ::deviceapis::device::v1::GetCodeCountResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeListRequest* request, ::deviceapis::device::v1::GetCodeListResponse* response, std::function<void(::grpc::Status)>) override;
      void GetCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeListRequest* request, ::deviceapis::device::v1::GetCodeListResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void SaveCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeRequest* request, ::deviceapis::device::v1::SaveCodeResponse* response, std::function<void(::grpc::Status)>) override;
      void SaveCode(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeRequest* request, ::deviceapis::device::v1::SaveCodeResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void SaveCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeListRequest* request, ::deviceapis::device::v1::SaveCodeListResponse* response, std::function<void(::grpc::Status)>) override;
      void SaveCodeList(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeListRequest* request, ::deviceapis::device::v1::SaveCodeListResponse* 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::DeleteCodeResponse>* AsyncDeleteCodeRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::DeleteCodeResponse>* PrepareAsyncDeleteCodeRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::DeleteCodeListResponse>* AsyncDeleteCodeListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeListRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::DeleteCodeListResponse>* PrepareAsyncDeleteCodeListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::DeleteCodeListRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetCodeResponse>* AsyncGetCodeRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetCodeResponse>* PrepareAsyncGetCodeRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetCodeCountResponse>* AsyncGetCodeCountRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeCountRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetCodeCountResponse>* PrepareAsyncGetCodeCountRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeCountRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetCodeListResponse>* AsyncGetCodeListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeListRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::GetCodeListResponse>* PrepareAsyncGetCodeListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::GetCodeListRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveCodeResponse>* AsyncSaveCodeRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveCodeResponse>* PrepareAsyncSaveCodeRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveCodeListResponse>* AsyncSaveCodeListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeListRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::deviceapis::device::v1::SaveCodeListResponse>* PrepareAsyncSaveCodeListRaw(::grpc::ClientContext* context, const ::deviceapis::device::v1::SaveCodeListRequest& request, ::grpc::CompletionQueue* cq) override;
    const ::grpc::internal::RpcMethod rpcmethod_DeleteCode_;
    const ::grpc::internal::RpcMethod rpcmethod_DeleteCodeList_;
    const ::grpc::internal::RpcMethod rpcmethod_GetCode_;
    const ::grpc::internal::RpcMethod rpcmethod_GetCodeCount_;
    const ::grpc::internal::RpcMethod rpcmethod_GetCodeList_;
    const ::grpc::internal::RpcMethod rpcmethod_SaveCode_;
    const ::grpc::internal::RpcMethod rpcmethod_SaveCodeList_;
  };
  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 DeleteCode(::grpc::ServerContext* context, const ::deviceapis::device::v1::DeleteCodeRequest* request, ::deviceapis::device::v1::DeleteCodeResponse* response);
    // Метод удаления списка кодов доступа
    virtual ::grpc::Status DeleteCodeList(::grpc::ServerContext* context, const ::deviceapis::device::v1::DeleteCodeListRequest* request, ::deviceapis::device::v1::DeleteCodeListResponse* response);
    // Метод получения кода доступа
    virtual ::grpc::Status GetCode(::grpc::ServerContext* context, const ::deviceapis::device::v1::GetCodeRequest* request, ::deviceapis::device::v1::GetCodeResponse* response);
    // Метод получения количества кодов доступа
    virtual ::grpc::Status GetCodeCount(::grpc::ServerContext* context, const ::deviceapis::device::v1::GetCodeCountRequest* request, ::deviceapis::device::v1::GetCodeCountResponse* response);
    // Метод получения списка кодов доступа
    virtual ::grpc::Status GetCodeList(::grpc::ServerContext* context, const ::deviceapis::device::v1::GetCodeListRequest* request, ::deviceapis::device::v1::GetCodeListResponse* response);
    // Метод создания кода доступа
    virtual ::grpc::Status SaveCode(::grpc::ServerContext* context, const ::deviceapis::device::v1::SaveCodeRequest* request, ::deviceapis::device::v1::SaveCodeResponse* response);
    // Метод создания списка кодов доступа
    virtual ::grpc::Status SaveCodeList(::grpc::ServerContext* context, const ::deviceapis::device::v1::SaveCodeListRequest* request, ::deviceapis::device::v1::SaveCodeListResponse* response);
  };
  template <class BaseClass>
  class WithAsyncMethod_DeleteCode : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_DeleteCode() {
      ::grpc::Service::MarkMethodAsync(0);
    }
    ~WithAsyncMethod_DeleteCode() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteCode(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteCodeRequest* /*request*/, ::deviceapis::device::v1::DeleteCodeResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestDeleteCode(::grpc::ServerContext* context, ::deviceapis::device::v1::DeleteCodeRequest* request, ::grpc::ServerAsyncResponseWriter< ::deviceapis::device::v1::DeleteCodeResponse>* 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_DeleteCodeList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_DeleteCodeList() {
      ::grpc::Service::MarkMethodAsync(1);
    }
    ~WithAsyncMethod_DeleteCodeList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteCodeList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteCodeListRequest* /*request*/, ::deviceapis::device::v1::DeleteCodeListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestDeleteCodeList(::grpc::ServerContext* context, ::deviceapis::device::v1::DeleteCodeListRequest* request, ::grpc::ServerAsyncResponseWriter< ::deviceapis::device::v1::DeleteCodeListResponse>* 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_GetCode : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetCode() {
      ::grpc::Service::MarkMethodAsync(2);
    }
    ~WithAsyncMethod_GetCode() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCode(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetCodeRequest* /*request*/, ::deviceapis::device::v1::GetCodeResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetCode(::grpc::ServerContext* context, ::deviceapis::device::v1::GetCodeRequest* request, ::grpc::ServerAsyncResponseWriter< ::deviceapis::device::v1::GetCodeResponse>* 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_GetCodeCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetCodeCount() {
      ::grpc::Service::MarkMethodAsync(3);
    }
    ~WithAsyncMethod_GetCodeCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCodeCount(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetCodeCountRequest* /*request*/, ::deviceapis::device::v1::GetCodeCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetCodeCount(::grpc::ServerContext* context, ::deviceapis::device::v1::GetCodeCountRequest* request, ::grpc::ServerAsyncResponseWriter< ::deviceapis::device::v1::GetCodeCountResponse>* 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_GetCodeList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetCodeList() {
      ::grpc::Service::MarkMethodAsync(4);
    }
    ~WithAsyncMethod_GetCodeList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCodeList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetCodeListRequest* /*request*/, ::deviceapis::device::v1::GetCodeListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetCodeList(::grpc::ServerContext* context, ::deviceapis::device::v1::GetCodeListRequest* request, ::grpc::ServerAsyncResponseWriter< ::deviceapis::device::v1::GetCodeListResponse>* 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_SaveCode : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_SaveCode() {
      ::grpc::Service::MarkMethodAsync(5);
    }
    ~WithAsyncMethod_SaveCode() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveCode(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveCodeRequest* /*request*/, ::deviceapis::device::v1::SaveCodeResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSaveCode(::grpc::ServerContext* context, ::deviceapis::device::v1::SaveCodeRequest* request, ::grpc::ServerAsyncResponseWriter< ::deviceapis::device::v1::SaveCodeResponse>* 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_SaveCodeList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_SaveCodeList() {
      ::grpc::Service::MarkMethodAsync(6);
    }
    ~WithAsyncMethod_SaveCodeList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveCodeList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveCodeListRequest* /*request*/, ::deviceapis::device::v1::SaveCodeListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSaveCodeList(::grpc::ServerContext* context, ::deviceapis::device::v1::SaveCodeListRequest* request, ::grpc::ServerAsyncResponseWriter< ::deviceapis::device::v1::SaveCodeListResponse>* 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_DeleteCode<WithAsyncMethod_DeleteCodeList<WithAsyncMethod_GetCode<WithAsyncMethod_GetCodeCount<WithAsyncMethod_GetCodeList<WithAsyncMethod_SaveCode<WithAsyncMethod_SaveCodeList<Service > > > > > > > AsyncService;
  template <class BaseClass>
  class WithCallbackMethod_DeleteCode : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_DeleteCode() {
      ::grpc::Service::MarkMethodCallback(0,
          new ::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::DeleteCodeRequest, ::deviceapis::device::v1::DeleteCodeResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::deviceapis::device::v1::DeleteCodeRequest* request, ::deviceapis::device::v1::DeleteCodeResponse* response) { return this->DeleteCode(context, request, response); }));}
    void SetMessageAllocatorFor_DeleteCode(
        ::grpc::MessageAllocator< ::deviceapis::device::v1::DeleteCodeRequest, ::deviceapis::device::v1::DeleteCodeResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(0);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::DeleteCodeRequest, ::deviceapis::device::v1::DeleteCodeResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_DeleteCode() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteCode(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteCodeRequest* /*request*/, ::deviceapis::device::v1::DeleteCodeResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* DeleteCode(
      ::grpc::CallbackServerContext* /*context*/, const ::deviceapis::device::v1::DeleteCodeRequest* /*request*/, ::deviceapis::device::v1::DeleteCodeResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_DeleteCodeList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_DeleteCodeList() {
      ::grpc::Service::MarkMethodCallback(1,
          new ::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::DeleteCodeListRequest, ::deviceapis::device::v1::DeleteCodeListResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::deviceapis::device::v1::DeleteCodeListRequest* request, ::deviceapis::device::v1::DeleteCodeListResponse* response) { return this->DeleteCodeList(context, request, response); }));}
    void SetMessageAllocatorFor_DeleteCodeList(
        ::grpc::MessageAllocator< ::deviceapis::device::v1::DeleteCodeListRequest, ::deviceapis::device::v1::DeleteCodeListResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(1);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::DeleteCodeListRequest, ::deviceapis::device::v1::DeleteCodeListResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_DeleteCodeList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteCodeList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteCodeListRequest* /*request*/, ::deviceapis::device::v1::DeleteCodeListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* DeleteCodeList(
      ::grpc::CallbackServerContext* /*context*/, const ::deviceapis::device::v1::DeleteCodeListRequest* /*request*/, ::deviceapis::device::v1::DeleteCodeListResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetCode : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetCode() {
      ::grpc::Service::MarkMethodCallback(2,
          new ::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::GetCodeRequest, ::deviceapis::device::v1::GetCodeResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::deviceapis::device::v1::GetCodeRequest* request, ::deviceapis::device::v1::GetCodeResponse* response) { return this->GetCode(context, request, response); }));}
    void SetMessageAllocatorFor_GetCode(
        ::grpc::MessageAllocator< ::deviceapis::device::v1::GetCodeRequest, ::deviceapis::device::v1::GetCodeResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(2);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::GetCodeRequest, ::deviceapis::device::v1::GetCodeResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetCode() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCode(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetCodeRequest* /*request*/, ::deviceapis::device::v1::GetCodeResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetCode(
      ::grpc::CallbackServerContext* /*context*/, const ::deviceapis::device::v1::GetCodeRequest* /*request*/, ::deviceapis::device::v1::GetCodeResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetCodeCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetCodeCount() {
      ::grpc::Service::MarkMethodCallback(3,
          new ::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::GetCodeCountRequest, ::deviceapis::device::v1::GetCodeCountResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::deviceapis::device::v1::GetCodeCountRequest* request, ::deviceapis::device::v1::GetCodeCountResponse* response) { return this->GetCodeCount(context, request, response); }));}
    void SetMessageAllocatorFor_GetCodeCount(
        ::grpc::MessageAllocator< ::deviceapis::device::v1::GetCodeCountRequest, ::deviceapis::device::v1::GetCodeCountResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(3);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::GetCodeCountRequest, ::deviceapis::device::v1::GetCodeCountResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetCodeCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCodeCount(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetCodeCountRequest* /*request*/, ::deviceapis::device::v1::GetCodeCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetCodeCount(
      ::grpc::CallbackServerContext* /*context*/, const ::deviceapis::device::v1::GetCodeCountRequest* /*request*/, ::deviceapis::device::v1::GetCodeCountResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetCodeList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetCodeList() {
      ::grpc::Service::MarkMethodCallback(4,
          new ::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::GetCodeListRequest, ::deviceapis::device::v1::GetCodeListResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::deviceapis::device::v1::GetCodeListRequest* request, ::deviceapis::device::v1::GetCodeListResponse* response) { return this->GetCodeList(context, request, response); }));}
    void SetMessageAllocatorFor_GetCodeList(
        ::grpc::MessageAllocator< ::deviceapis::device::v1::GetCodeListRequest, ::deviceapis::device::v1::GetCodeListResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(4);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::GetCodeListRequest, ::deviceapis::device::v1::GetCodeListResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetCodeList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCodeList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetCodeListRequest* /*request*/, ::deviceapis::device::v1::GetCodeListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetCodeList(
      ::grpc::CallbackServerContext* /*context*/, const ::deviceapis::device::v1::GetCodeListRequest* /*request*/, ::deviceapis::device::v1::GetCodeListResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_SaveCode : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_SaveCode() {
      ::grpc::Service::MarkMethodCallback(5,
          new ::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::SaveCodeRequest, ::deviceapis::device::v1::SaveCodeResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::deviceapis::device::v1::SaveCodeRequest* request, ::deviceapis::device::v1::SaveCodeResponse* response) { return this->SaveCode(context, request, response); }));}
    void SetMessageAllocatorFor_SaveCode(
        ::grpc::MessageAllocator< ::deviceapis::device::v1::SaveCodeRequest, ::deviceapis::device::v1::SaveCodeResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(5);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::SaveCodeRequest, ::deviceapis::device::v1::SaveCodeResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_SaveCode() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveCode(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveCodeRequest* /*request*/, ::deviceapis::device::v1::SaveCodeResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* SaveCode(
      ::grpc::CallbackServerContext* /*context*/, const ::deviceapis::device::v1::SaveCodeRequest* /*request*/, ::deviceapis::device::v1::SaveCodeResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_SaveCodeList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_SaveCodeList() {
      ::grpc::Service::MarkMethodCallback(6,
          new ::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::SaveCodeListRequest, ::deviceapis::device::v1::SaveCodeListResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::deviceapis::device::v1::SaveCodeListRequest* request, ::deviceapis::device::v1::SaveCodeListResponse* response) { return this->SaveCodeList(context, request, response); }));}
    void SetMessageAllocatorFor_SaveCodeList(
        ::grpc::MessageAllocator< ::deviceapis::device::v1::SaveCodeListRequest, ::deviceapis::device::v1::SaveCodeListResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(6);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::deviceapis::device::v1::SaveCodeListRequest, ::deviceapis::device::v1::SaveCodeListResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_SaveCodeList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveCodeList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveCodeListRequest* /*request*/, ::deviceapis::device::v1::SaveCodeListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* SaveCodeList(
      ::grpc::CallbackServerContext* /*context*/, const ::deviceapis::device::v1::SaveCodeListRequest* /*request*/, ::deviceapis::device::v1::SaveCodeListResponse* /*response*/)  { return nullptr; }
  };
  typedef WithCallbackMethod_DeleteCode<WithCallbackMethod_DeleteCodeList<WithCallbackMethod_GetCode<WithCallbackMethod_GetCodeCount<WithCallbackMethod_GetCodeList<WithCallbackMethod_SaveCode<WithCallbackMethod_SaveCodeList<Service > > > > > > > CallbackService;
  typedef CallbackService ExperimentalCallbackService;
  template <class BaseClass>
  class WithGenericMethod_DeleteCode : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_DeleteCode() {
      ::grpc::Service::MarkMethodGeneric(0);
    }
    ~WithGenericMethod_DeleteCode() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteCode(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteCodeRequest* /*request*/, ::deviceapis::device::v1::DeleteCodeResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_DeleteCodeList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_DeleteCodeList() {
      ::grpc::Service::MarkMethodGeneric(1);
    }
    ~WithGenericMethod_DeleteCodeList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteCodeList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteCodeListRequest* /*request*/, ::deviceapis::device::v1::DeleteCodeListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetCode : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetCode() {
      ::grpc::Service::MarkMethodGeneric(2);
    }
    ~WithGenericMethod_GetCode() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCode(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetCodeRequest* /*request*/, ::deviceapis::device::v1::GetCodeResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetCodeCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetCodeCount() {
      ::grpc::Service::MarkMethodGeneric(3);
    }
    ~WithGenericMethod_GetCodeCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCodeCount(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetCodeCountRequest* /*request*/, ::deviceapis::device::v1::GetCodeCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetCodeList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetCodeList() {
      ::grpc::Service::MarkMethodGeneric(4);
    }
    ~WithGenericMethod_GetCodeList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCodeList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetCodeListRequest* /*request*/, ::deviceapis::device::v1::GetCodeListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_SaveCode : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_SaveCode() {
      ::grpc::Service::MarkMethodGeneric(5);
    }
    ~WithGenericMethod_SaveCode() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveCode(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveCodeRequest* /*request*/, ::deviceapis::device::v1::SaveCodeResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_SaveCodeList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_SaveCodeList() {
      ::grpc::Service::MarkMethodGeneric(6);
    }
    ~WithGenericMethod_SaveCodeList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveCodeList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveCodeListRequest* /*request*/, ::deviceapis::device::v1::SaveCodeListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithRawMethod_DeleteCode : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_DeleteCode() {
      ::grpc::Service::MarkMethodRaw(0);
    }
    ~WithRawMethod_DeleteCode() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteCode(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteCodeRequest* /*request*/, ::deviceapis::device::v1::DeleteCodeResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestDeleteCode(::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_DeleteCodeList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_DeleteCodeList() {
      ::grpc::Service::MarkMethodRaw(1);
    }
    ~WithRawMethod_DeleteCodeList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteCodeList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteCodeListRequest* /*request*/, ::deviceapis::device::v1::DeleteCodeListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestDeleteCodeList(::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_GetCode : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetCode() {
      ::grpc::Service::MarkMethodRaw(2);
    }
    ~WithRawMethod_GetCode() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCode(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetCodeRequest* /*request*/, ::deviceapis::device::v1::GetCodeResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetCode(::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_GetCodeCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetCodeCount() {
      ::grpc::Service::MarkMethodRaw(3);
    }
    ~WithRawMethod_GetCodeCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCodeCount(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetCodeCountRequest* /*request*/, ::deviceapis::device::v1::GetCodeCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetCodeCount(::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_GetCodeList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetCodeList() {
      ::grpc::Service::MarkMethodRaw(4);
    }
    ~WithRawMethod_GetCodeList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCodeList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetCodeListRequest* /*request*/, ::deviceapis::device::v1::GetCodeListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetCodeList(::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_SaveCode : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_SaveCode() {
      ::grpc::Service::MarkMethodRaw(5);
    }
    ~WithRawMethod_SaveCode() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveCode(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveCodeRequest* /*request*/, ::deviceapis::device::v1::SaveCodeResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSaveCode(::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_SaveCodeList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_SaveCodeList() {
      ::grpc::Service::MarkMethodRaw(6);
    }
    ~WithRawMethod_SaveCodeList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveCodeList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveCodeListRequest* /*request*/, ::deviceapis::device::v1::SaveCodeListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSaveCodeList(::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_DeleteCode : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_DeleteCode() {
      ::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->DeleteCode(context, request, response); }));
    }
    ~WithRawCallbackMethod_DeleteCode() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteCode(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteCodeRequest* /*request*/, ::deviceapis::device::v1::DeleteCodeResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* DeleteCode(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_DeleteCodeList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_DeleteCodeList() {
      ::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->DeleteCodeList(context, request, response); }));
    }
    ~WithRawCallbackMethod_DeleteCodeList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteCodeList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteCodeListRequest* /*request*/, ::deviceapis::device::v1::DeleteCodeListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* DeleteCodeList(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetCode : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetCode() {
      ::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->GetCode(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetCode() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCode(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetCodeRequest* /*request*/, ::deviceapis::device::v1::GetCodeResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetCode(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetCodeCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetCodeCount() {
      ::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->GetCodeCount(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetCodeCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCodeCount(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetCodeCountRequest* /*request*/, ::deviceapis::device::v1::GetCodeCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetCodeCount(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetCodeList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetCodeList() {
      ::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->GetCodeList(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetCodeList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCodeList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetCodeListRequest* /*request*/, ::deviceapis::device::v1::GetCodeListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetCodeList(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_SaveCode : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_SaveCode() {
      ::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->SaveCode(context, request, response); }));
    }
    ~WithRawCallbackMethod_SaveCode() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveCode(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveCodeRequest* /*request*/, ::deviceapis::device::v1::SaveCodeResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* SaveCode(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_SaveCodeList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_SaveCodeList() {
      ::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->SaveCodeList(context, request, response); }));
    }
    ~WithRawCallbackMethod_SaveCodeList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveCodeList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveCodeListRequest* /*request*/, ::deviceapis::device::v1::SaveCodeListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* SaveCodeList(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_DeleteCode : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_DeleteCode() {
      ::grpc::Service::MarkMethodStreamed(0,
        new ::grpc::internal::StreamedUnaryHandler<
          ::deviceapis::device::v1::DeleteCodeRequest, ::deviceapis::device::v1::DeleteCodeResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::deviceapis::device::v1::DeleteCodeRequest, ::deviceapis::device::v1::DeleteCodeResponse>* streamer) {
                       return this->StreamedDeleteCode(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_DeleteCode() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status DeleteCode(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteCodeRequest* /*request*/, ::deviceapis::device::v1::DeleteCodeResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedDeleteCode(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::deviceapis::device::v1::DeleteCodeRequest,::deviceapis::device::v1::DeleteCodeResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_DeleteCodeList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_DeleteCodeList() {
      ::grpc::Service::MarkMethodStreamed(1,
        new ::grpc::internal::StreamedUnaryHandler<
          ::deviceapis::device::v1::DeleteCodeListRequest, ::deviceapis::device::v1::DeleteCodeListResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::deviceapis::device::v1::DeleteCodeListRequest, ::deviceapis::device::v1::DeleteCodeListResponse>* streamer) {
                       return this->StreamedDeleteCodeList(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_DeleteCodeList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status DeleteCodeList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::DeleteCodeListRequest* /*request*/, ::deviceapis::device::v1::DeleteCodeListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedDeleteCodeList(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::deviceapis::device::v1::DeleteCodeListRequest,::deviceapis::device::v1::DeleteCodeListResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetCode : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetCode() {
      ::grpc::Service::MarkMethodStreamed(2,
        new ::grpc::internal::StreamedUnaryHandler<
          ::deviceapis::device::v1::GetCodeRequest, ::deviceapis::device::v1::GetCodeResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::deviceapis::device::v1::GetCodeRequest, ::deviceapis::device::v1::GetCodeResponse>* streamer) {
                       return this->StreamedGetCode(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetCode() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetCode(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetCodeRequest* /*request*/, ::deviceapis::device::v1::GetCodeResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetCode(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::deviceapis::device::v1::GetCodeRequest,::deviceapis::device::v1::GetCodeResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetCodeCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetCodeCount() {
      ::grpc::Service::MarkMethodStreamed(3,
        new ::grpc::internal::StreamedUnaryHandler<
          ::deviceapis::device::v1::GetCodeCountRequest, ::deviceapis::device::v1::GetCodeCountResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::deviceapis::device::v1::GetCodeCountRequest, ::deviceapis::device::v1::GetCodeCountResponse>* streamer) {
                       return this->StreamedGetCodeCount(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetCodeCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetCodeCount(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetCodeCountRequest* /*request*/, ::deviceapis::device::v1::GetCodeCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetCodeCount(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::deviceapis::device::v1::GetCodeCountRequest,::deviceapis::device::v1::GetCodeCountResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetCodeList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetCodeList() {
      ::grpc::Service::MarkMethodStreamed(4,
        new ::grpc::internal::StreamedUnaryHandler<
          ::deviceapis::device::v1::GetCodeListRequest, ::deviceapis::device::v1::GetCodeListResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::deviceapis::device::v1::GetCodeListRequest, ::deviceapis::device::v1::GetCodeListResponse>* streamer) {
                       return this->StreamedGetCodeList(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetCodeList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetCodeList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::GetCodeListRequest* /*request*/, ::deviceapis::device::v1::GetCodeListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetCodeList(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::deviceapis::device::v1::GetCodeListRequest,::deviceapis::device::v1::GetCodeListResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_SaveCode : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_SaveCode() {
      ::grpc::Service::MarkMethodStreamed(5,
        new ::grpc::internal::StreamedUnaryHandler<
          ::deviceapis::device::v1::SaveCodeRequest, ::deviceapis::device::v1::SaveCodeResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::deviceapis::device::v1::SaveCodeRequest, ::deviceapis::device::v1::SaveCodeResponse>* streamer) {
                       return this->StreamedSaveCode(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_SaveCode() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status SaveCode(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveCodeRequest* /*request*/, ::deviceapis::device::v1::SaveCodeResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedSaveCode(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::deviceapis::device::v1::SaveCodeRequest,::deviceapis::device::v1::SaveCodeResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_SaveCodeList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_SaveCodeList() {
      ::grpc::Service::MarkMethodStreamed(6,
        new ::grpc::internal::StreamedUnaryHandler<
          ::deviceapis::device::v1::SaveCodeListRequest, ::deviceapis::device::v1::SaveCodeListResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::deviceapis::device::v1::SaveCodeListRequest, ::deviceapis::device::v1::SaveCodeListResponse>* streamer) {
                       return this->StreamedSaveCodeList(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_SaveCodeList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status SaveCodeList(::grpc::ServerContext* /*context*/, const ::deviceapis::device::v1::SaveCodeListRequest* /*request*/, ::deviceapis::device::v1::SaveCodeListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedSaveCodeList(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::deviceapis::device::v1::SaveCodeListRequest,::deviceapis::device::v1::SaveCodeListResponse>* server_unary_streamer) = 0;
  };
  typedef WithStreamedUnaryMethod_DeleteCode<WithStreamedUnaryMethod_DeleteCodeList<WithStreamedUnaryMethod_GetCode<WithStreamedUnaryMethod_GetCodeCount<WithStreamedUnaryMethod_GetCodeList<WithStreamedUnaryMethod_SaveCode<WithStreamedUnaryMethod_SaveCodeList<Service > > > > > > > StreamedUnaryService;
  typedef Service SplitStreamedService;
  typedef WithStreamedUnaryMethod_DeleteCode<WithStreamedUnaryMethod_DeleteCodeList<WithStreamedUnaryMethod_GetCode<WithStreamedUnaryMethod_GetCodeCount<WithStreamedUnaryMethod_GetCodeList<WithStreamedUnaryMethod_SaveCode<WithStreamedUnaryMethod_SaveCodeList<Service > > > > > > > StreamedService;
};

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


#endif  // GRPC_deviceapis_2fdevice_2fv1_2fdeviceapis_5fdevice_5fcode_5fv1_2eproto__INCLUDED
