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

#include "keyapis/vc/v1/keyapis_vc_camera_group_v1.pb.h"

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

namespace keyapis {
namespace vc {
namespace v1 {

// Сервис управления коллекциями камер
class CameraCollectionService final {
 public:
  static constexpr char const* service_full_name() {
    return "keyapis.vc.v1.CameraCollectionService";
  }
  class StubInterface {
   public:
    virtual ~StubInterface() {}
    // Метод получения коллекции камер.
    // Для owner, employee возвращаются только коллекции камер c COMPANY_ID из токена.
    // Метод доступен для: admin, service, bti, owner, employee
    virtual ::grpc::Status GetCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionRequest& request, ::keyapis::vc::v1::GetCameraCollectionResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::GetCameraCollectionResponse>> AsyncGetCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::GetCameraCollectionResponse>>(AsyncGetCameraCollectionRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::GetCameraCollectionResponse>> PrepareAsyncGetCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::GetCameraCollectionResponse>>(PrepareAsyncGetCameraCollectionRaw(context, request, cq));
    }
    // Метод получения списка коллекций камер.
    // Для owner, employee возвращаются только коллекции камер c COMPANY_ID из токена.
    // Метод доступен для: admin, service, bti, owner, employee
    std::unique_ptr< ::grpc::ClientReaderInterface< ::keyapis::vc::v1::GetCameraCollectionListResponse>> GetCameraCollectionList(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionListRequest& request) {
      return std::unique_ptr< ::grpc::ClientReaderInterface< ::keyapis::vc::v1::GetCameraCollectionListResponse>>(GetCameraCollectionListRaw(context, request));
    }
    std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::vc::v1::GetCameraCollectionListResponse>> AsyncGetCameraCollectionList(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionListRequest& request, ::grpc::CompletionQueue* cq, void* tag) {
      return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::vc::v1::GetCameraCollectionListResponse>>(AsyncGetCameraCollectionListRaw(context, request, cq, tag));
    }
    std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::vc::v1::GetCameraCollectionListResponse>> PrepareAsyncGetCameraCollectionList(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::vc::v1::GetCameraCollectionListResponse>>(PrepareAsyncGetCameraCollectionListRaw(context, request, cq));
    }
    // Метод получения количества коллекций камер.
    // Для owner, employee возвращаются только коллекции камер c COMPANY_ID из токена.
    // Метод доступен для: admin, service, bti, owner, employee
    virtual ::grpc::Status GetCameraCollectionCount(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionCountRequest& request, ::keyapis::vc::v1::GetCameraCollectionCountResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::GetCameraCollectionCountResponse>> AsyncGetCameraCollectionCount(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::GetCameraCollectionCountResponse>>(AsyncGetCameraCollectionCountRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::GetCameraCollectionCountResponse>> PrepareAsyncGetCameraCollectionCount(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::GetCameraCollectionCountResponse>>(PrepareAsyncGetCameraCollectionCountRaw(context, request, cq));
    }
    // Метод создания и изменения коллекции камер.
    // При изменении коллекции массив external_camera_ids заменяется полностью.
    // Для owner, employee сравнивается COMPANY_ID из токена и company_id коллекции, при несовпадении ошибка доступа.
    // Метод доступен для: admin, service, bti, owner, employee
    virtual ::grpc::Status SaveCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::SaveCameraCollectionRequest& request, ::keyapis::vc::v1::SaveCameraCollectionResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::SaveCameraCollectionResponse>> AsyncSaveCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::SaveCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::SaveCameraCollectionResponse>>(AsyncSaveCameraCollectionRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::SaveCameraCollectionResponse>> PrepareAsyncSaveCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::SaveCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::SaveCameraCollectionResponse>>(PrepareAsyncSaveCameraCollectionRaw(context, request, cq));
    }
    // Метод удаления коллекции камер.
    // Проставляет в поле deleted_at текущую дату.
    // Для owner, employee сравнивается COMPANY_ID из токена и company_id коллекции, при несовпадении ошибка доступа.
    // Метод доступен для: admin, service, bti, owner, employee
    virtual ::grpc::Status DeleteCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::DeleteCameraCollectionRequest& request, ::keyapis::vc::v1::DeleteCameraCollectionResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::DeleteCameraCollectionResponse>> AsyncDeleteCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::DeleteCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::DeleteCameraCollectionResponse>>(AsyncDeleteCameraCollectionRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::DeleteCameraCollectionResponse>> PrepareAsyncDeleteCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::DeleteCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::DeleteCameraCollectionResponse>>(PrepareAsyncDeleteCameraCollectionRaw(context, request, cq));
    }
    // Метод восстановления удаленной коллекции камер.
    // Проставляет null в поле deleted_at.
    // Для owner, employee сравнивается COMPANY_ID из токена и company_id коллекции, при несовпадении ошибка доступа.
    // Метод доступен для: admin, service, bti, owner, employee
    virtual ::grpc::Status PostCameraCollectionRestore(::grpc::ClientContext* context, const ::keyapis::vc::v1::PostCameraCollectionRestoreRequest& request, ::keyapis::vc::v1::PostCameraCollectionRestoreResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::PostCameraCollectionRestoreResponse>> AsyncPostCameraCollectionRestore(::grpc::ClientContext* context, const ::keyapis::vc::v1::PostCameraCollectionRestoreRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::PostCameraCollectionRestoreResponse>>(AsyncPostCameraCollectionRestoreRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::PostCameraCollectionRestoreResponse>> PrepareAsyncPostCameraCollectionRestore(::grpc::ClientContext* context, const ::keyapis::vc::v1::PostCameraCollectionRestoreRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::PostCameraCollectionRestoreResponse>>(PrepareAsyncPostCameraCollectionRestoreRaw(context, request, cq));
    }
    class async_interface {
     public:
      virtual ~async_interface() {}
      // Метод получения коллекции камер.
      // Для owner, employee возвращаются только коллекции камер c COMPANY_ID из токена.
      // Метод доступен для: admin, service, bti, owner, employee
      virtual void GetCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionRequest* request, ::keyapis::vc::v1::GetCameraCollectionResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionRequest* request, ::keyapis::vc::v1::GetCameraCollectionResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод получения списка коллекций камер.
      // Для owner, employee возвращаются только коллекции камер c COMPANY_ID из токена.
      // Метод доступен для: admin, service, bti, owner, employee
      virtual void GetCameraCollectionList(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionListRequest* request, ::grpc::ClientReadReactor< ::keyapis::vc::v1::GetCameraCollectionListResponse>* reactor) = 0;
      // Метод получения количества коллекций камер.
      // Для owner, employee возвращаются только коллекции камер c COMPANY_ID из токена.
      // Метод доступен для: admin, service, bti, owner, employee
      virtual void GetCameraCollectionCount(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionCountRequest* request, ::keyapis::vc::v1::GetCameraCollectionCountResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetCameraCollectionCount(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionCountRequest* request, ::keyapis::vc::v1::GetCameraCollectionCountResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод создания и изменения коллекции камер.
      // При изменении коллекции массив external_camera_ids заменяется полностью.
      // Для owner, employee сравнивается COMPANY_ID из токена и company_id коллекции, при несовпадении ошибка доступа.
      // Метод доступен для: admin, service, bti, owner, employee
      virtual void SaveCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::SaveCameraCollectionRequest* request, ::keyapis::vc::v1::SaveCameraCollectionResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void SaveCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::SaveCameraCollectionRequest* request, ::keyapis::vc::v1::SaveCameraCollectionResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод удаления коллекции камер.
      // Проставляет в поле deleted_at текущую дату.
      // Для owner, employee сравнивается COMPANY_ID из токена и company_id коллекции, при несовпадении ошибка доступа.
      // Метод доступен для: admin, service, bti, owner, employee
      virtual void DeleteCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::DeleteCameraCollectionRequest* request, ::keyapis::vc::v1::DeleteCameraCollectionResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void DeleteCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::DeleteCameraCollectionRequest* request, ::keyapis::vc::v1::DeleteCameraCollectionResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод восстановления удаленной коллекции камер.
      // Проставляет null в поле deleted_at.
      // Для owner, employee сравнивается COMPANY_ID из токена и company_id коллекции, при несовпадении ошибка доступа.
      // Метод доступен для: admin, service, bti, owner, employee
      virtual void PostCameraCollectionRestore(::grpc::ClientContext* context, const ::keyapis::vc::v1::PostCameraCollectionRestoreRequest* request, ::keyapis::vc::v1::PostCameraCollectionRestoreResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void PostCameraCollectionRestore(::grpc::ClientContext* context, const ::keyapis::vc::v1::PostCameraCollectionRestoreRequest* request, ::keyapis::vc::v1::PostCameraCollectionRestoreResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
    };
    typedef class async_interface experimental_async_interface;
    virtual class async_interface* async() { return nullptr; }
    class async_interface* experimental_async() { return async(); }
   private:
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::GetCameraCollectionResponse>* AsyncGetCameraCollectionRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::GetCameraCollectionResponse>* PrepareAsyncGetCameraCollectionRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientReaderInterface< ::keyapis::vc::v1::GetCameraCollectionListResponse>* GetCameraCollectionListRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionListRequest& request) = 0;
    virtual ::grpc::ClientAsyncReaderInterface< ::keyapis::vc::v1::GetCameraCollectionListResponse>* AsyncGetCameraCollectionListRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionListRequest& request, ::grpc::CompletionQueue* cq, void* tag) = 0;
    virtual ::grpc::ClientAsyncReaderInterface< ::keyapis::vc::v1::GetCameraCollectionListResponse>* PrepareAsyncGetCameraCollectionListRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionListRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::GetCameraCollectionCountResponse>* AsyncGetCameraCollectionCountRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionCountRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::GetCameraCollectionCountResponse>* PrepareAsyncGetCameraCollectionCountRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionCountRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::SaveCameraCollectionResponse>* AsyncSaveCameraCollectionRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::SaveCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::SaveCameraCollectionResponse>* PrepareAsyncSaveCameraCollectionRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::SaveCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::DeleteCameraCollectionResponse>* AsyncDeleteCameraCollectionRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::DeleteCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::DeleteCameraCollectionResponse>* PrepareAsyncDeleteCameraCollectionRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::DeleteCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::PostCameraCollectionRestoreResponse>* AsyncPostCameraCollectionRestoreRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::PostCameraCollectionRestoreRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::vc::v1::PostCameraCollectionRestoreResponse>* PrepareAsyncPostCameraCollectionRestoreRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::PostCameraCollectionRestoreRequest& 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 GetCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionRequest& request, ::keyapis::vc::v1::GetCameraCollectionResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::GetCameraCollectionResponse>> AsyncGetCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::GetCameraCollectionResponse>>(AsyncGetCameraCollectionRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::GetCameraCollectionResponse>> PrepareAsyncGetCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::GetCameraCollectionResponse>>(PrepareAsyncGetCameraCollectionRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientReader< ::keyapis::vc::v1::GetCameraCollectionListResponse>> GetCameraCollectionList(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionListRequest& request) {
      return std::unique_ptr< ::grpc::ClientReader< ::keyapis::vc::v1::GetCameraCollectionListResponse>>(GetCameraCollectionListRaw(context, request));
    }
    std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::vc::v1::GetCameraCollectionListResponse>> AsyncGetCameraCollectionList(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionListRequest& request, ::grpc::CompletionQueue* cq, void* tag) {
      return std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::vc::v1::GetCameraCollectionListResponse>>(AsyncGetCameraCollectionListRaw(context, request, cq, tag));
    }
    std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::vc::v1::GetCameraCollectionListResponse>> PrepareAsyncGetCameraCollectionList(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::vc::v1::GetCameraCollectionListResponse>>(PrepareAsyncGetCameraCollectionListRaw(context, request, cq));
    }
    ::grpc::Status GetCameraCollectionCount(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionCountRequest& request, ::keyapis::vc::v1::GetCameraCollectionCountResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::GetCameraCollectionCountResponse>> AsyncGetCameraCollectionCount(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::GetCameraCollectionCountResponse>>(AsyncGetCameraCollectionCountRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::GetCameraCollectionCountResponse>> PrepareAsyncGetCameraCollectionCount(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::GetCameraCollectionCountResponse>>(PrepareAsyncGetCameraCollectionCountRaw(context, request, cq));
    }
    ::grpc::Status SaveCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::SaveCameraCollectionRequest& request, ::keyapis::vc::v1::SaveCameraCollectionResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::SaveCameraCollectionResponse>> AsyncSaveCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::SaveCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::SaveCameraCollectionResponse>>(AsyncSaveCameraCollectionRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::SaveCameraCollectionResponse>> PrepareAsyncSaveCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::SaveCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::SaveCameraCollectionResponse>>(PrepareAsyncSaveCameraCollectionRaw(context, request, cq));
    }
    ::grpc::Status DeleteCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::DeleteCameraCollectionRequest& request, ::keyapis::vc::v1::DeleteCameraCollectionResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::DeleteCameraCollectionResponse>> AsyncDeleteCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::DeleteCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::DeleteCameraCollectionResponse>>(AsyncDeleteCameraCollectionRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::DeleteCameraCollectionResponse>> PrepareAsyncDeleteCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::DeleteCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::DeleteCameraCollectionResponse>>(PrepareAsyncDeleteCameraCollectionRaw(context, request, cq));
    }
    ::grpc::Status PostCameraCollectionRestore(::grpc::ClientContext* context, const ::keyapis::vc::v1::PostCameraCollectionRestoreRequest& request, ::keyapis::vc::v1::PostCameraCollectionRestoreResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::PostCameraCollectionRestoreResponse>> AsyncPostCameraCollectionRestore(::grpc::ClientContext* context, const ::keyapis::vc::v1::PostCameraCollectionRestoreRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::PostCameraCollectionRestoreResponse>>(AsyncPostCameraCollectionRestoreRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::PostCameraCollectionRestoreResponse>> PrepareAsyncPostCameraCollectionRestore(::grpc::ClientContext* context, const ::keyapis::vc::v1::PostCameraCollectionRestoreRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::PostCameraCollectionRestoreResponse>>(PrepareAsyncPostCameraCollectionRestoreRaw(context, request, cq));
    }
    class async final :
      public StubInterface::async_interface {
     public:
      void GetCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionRequest* request, ::keyapis::vc::v1::GetCameraCollectionResponse* response, std::function<void(::grpc::Status)>) override;
      void GetCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionRequest* request, ::keyapis::vc::v1::GetCameraCollectionResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetCameraCollectionList(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionListRequest* request, ::grpc::ClientReadReactor< ::keyapis::vc::v1::GetCameraCollectionListResponse>* reactor) override;
      void GetCameraCollectionCount(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionCountRequest* request, ::keyapis::vc::v1::GetCameraCollectionCountResponse* response, std::function<void(::grpc::Status)>) override;
      void GetCameraCollectionCount(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionCountRequest* request, ::keyapis::vc::v1::GetCameraCollectionCountResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void SaveCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::SaveCameraCollectionRequest* request, ::keyapis::vc::v1::SaveCameraCollectionResponse* response, std::function<void(::grpc::Status)>) override;
      void SaveCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::SaveCameraCollectionRequest* request, ::keyapis::vc::v1::SaveCameraCollectionResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void DeleteCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::DeleteCameraCollectionRequest* request, ::keyapis::vc::v1::DeleteCameraCollectionResponse* response, std::function<void(::grpc::Status)>) override;
      void DeleteCameraCollection(::grpc::ClientContext* context, const ::keyapis::vc::v1::DeleteCameraCollectionRequest* request, ::keyapis::vc::v1::DeleteCameraCollectionResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void PostCameraCollectionRestore(::grpc::ClientContext* context, const ::keyapis::vc::v1::PostCameraCollectionRestoreRequest* request, ::keyapis::vc::v1::PostCameraCollectionRestoreResponse* response, std::function<void(::grpc::Status)>) override;
      void PostCameraCollectionRestore(::grpc::ClientContext* context, const ::keyapis::vc::v1::PostCameraCollectionRestoreRequest* request, ::keyapis::vc::v1::PostCameraCollectionRestoreResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
     private:
      friend class Stub;
      explicit async(Stub* stub): stub_(stub) { }
      Stub* stub() { return stub_; }
      Stub* stub_;
    };
    class async* async() override { return &async_stub_; }

   private:
    std::shared_ptr< ::grpc::ChannelInterface> channel_;
    class async async_stub_{this};
    ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::GetCameraCollectionResponse>* AsyncGetCameraCollectionRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::GetCameraCollectionResponse>* PrepareAsyncGetCameraCollectionRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientReader< ::keyapis::vc::v1::GetCameraCollectionListResponse>* GetCameraCollectionListRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionListRequest& request) override;
    ::grpc::ClientAsyncReader< ::keyapis::vc::v1::GetCameraCollectionListResponse>* AsyncGetCameraCollectionListRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionListRequest& request, ::grpc::CompletionQueue* cq, void* tag) override;
    ::grpc::ClientAsyncReader< ::keyapis::vc::v1::GetCameraCollectionListResponse>* PrepareAsyncGetCameraCollectionListRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionListRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::GetCameraCollectionCountResponse>* AsyncGetCameraCollectionCountRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionCountRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::GetCameraCollectionCountResponse>* PrepareAsyncGetCameraCollectionCountRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::GetCameraCollectionCountRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::SaveCameraCollectionResponse>* AsyncSaveCameraCollectionRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::SaveCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::SaveCameraCollectionResponse>* PrepareAsyncSaveCameraCollectionRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::SaveCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::DeleteCameraCollectionResponse>* AsyncDeleteCameraCollectionRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::DeleteCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::DeleteCameraCollectionResponse>* PrepareAsyncDeleteCameraCollectionRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::DeleteCameraCollectionRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::PostCameraCollectionRestoreResponse>* AsyncPostCameraCollectionRestoreRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::PostCameraCollectionRestoreRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::vc::v1::PostCameraCollectionRestoreResponse>* PrepareAsyncPostCameraCollectionRestoreRaw(::grpc::ClientContext* context, const ::keyapis::vc::v1::PostCameraCollectionRestoreRequest& request, ::grpc::CompletionQueue* cq) override;
    const ::grpc::internal::RpcMethod rpcmethod_GetCameraCollection_;
    const ::grpc::internal::RpcMethod rpcmethod_GetCameraCollectionList_;
    const ::grpc::internal::RpcMethod rpcmethod_GetCameraCollectionCount_;
    const ::grpc::internal::RpcMethod rpcmethod_SaveCameraCollection_;
    const ::grpc::internal::RpcMethod rpcmethod_DeleteCameraCollection_;
    const ::grpc::internal::RpcMethod rpcmethod_PostCameraCollectionRestore_;
  };
  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();
    // Метод получения коллекции камер.
    // Для owner, employee возвращаются только коллекции камер c COMPANY_ID из токена.
    // Метод доступен для: admin, service, bti, owner, employee
    virtual ::grpc::Status GetCameraCollection(::grpc::ServerContext* context, const ::keyapis::vc::v1::GetCameraCollectionRequest* request, ::keyapis::vc::v1::GetCameraCollectionResponse* response);
    // Метод получения списка коллекций камер.
    // Для owner, employee возвращаются только коллекции камер c COMPANY_ID из токена.
    // Метод доступен для: admin, service, bti, owner, employee
    virtual ::grpc::Status GetCameraCollectionList(::grpc::ServerContext* context, const ::keyapis::vc::v1::GetCameraCollectionListRequest* request, ::grpc::ServerWriter< ::keyapis::vc::v1::GetCameraCollectionListResponse>* writer);
    // Метод получения количества коллекций камер.
    // Для owner, employee возвращаются только коллекции камер c COMPANY_ID из токена.
    // Метод доступен для: admin, service, bti, owner, employee
    virtual ::grpc::Status GetCameraCollectionCount(::grpc::ServerContext* context, const ::keyapis::vc::v1::GetCameraCollectionCountRequest* request, ::keyapis::vc::v1::GetCameraCollectionCountResponse* response);
    // Метод создания и изменения коллекции камер.
    // При изменении коллекции массив external_camera_ids заменяется полностью.
    // Для owner, employee сравнивается COMPANY_ID из токена и company_id коллекции, при несовпадении ошибка доступа.
    // Метод доступен для: admin, service, bti, owner, employee
    virtual ::grpc::Status SaveCameraCollection(::grpc::ServerContext* context, const ::keyapis::vc::v1::SaveCameraCollectionRequest* request, ::keyapis::vc::v1::SaveCameraCollectionResponse* response);
    // Метод удаления коллекции камер.
    // Проставляет в поле deleted_at текущую дату.
    // Для owner, employee сравнивается COMPANY_ID из токена и company_id коллекции, при несовпадении ошибка доступа.
    // Метод доступен для: admin, service, bti, owner, employee
    virtual ::grpc::Status DeleteCameraCollection(::grpc::ServerContext* context, const ::keyapis::vc::v1::DeleteCameraCollectionRequest* request, ::keyapis::vc::v1::DeleteCameraCollectionResponse* response);
    // Метод восстановления удаленной коллекции камер.
    // Проставляет null в поле deleted_at.
    // Для owner, employee сравнивается COMPANY_ID из токена и company_id коллекции, при несовпадении ошибка доступа.
    // Метод доступен для: admin, service, bti, owner, employee
    virtual ::grpc::Status PostCameraCollectionRestore(::grpc::ServerContext* context, const ::keyapis::vc::v1::PostCameraCollectionRestoreRequest* request, ::keyapis::vc::v1::PostCameraCollectionRestoreResponse* response);
  };
  template <class BaseClass>
  class WithAsyncMethod_GetCameraCollection : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetCameraCollection() {
      ::grpc::Service::MarkMethodAsync(0);
    }
    ~WithAsyncMethod_GetCameraCollection() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCameraCollection(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::GetCameraCollectionRequest* /*request*/, ::keyapis::vc::v1::GetCameraCollectionResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetCameraCollection(::grpc::ServerContext* context, ::keyapis::vc::v1::GetCameraCollectionRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::vc::v1::GetCameraCollectionResponse>* 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_GetCameraCollectionList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetCameraCollectionList() {
      ::grpc::Service::MarkMethodAsync(1);
    }
    ~WithAsyncMethod_GetCameraCollectionList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCameraCollectionList(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::GetCameraCollectionListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::vc::v1::GetCameraCollectionListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetCameraCollectionList(::grpc::ServerContext* context, ::keyapis::vc::v1::GetCameraCollectionListRequest* request, ::grpc::ServerAsyncWriter< ::keyapis::vc::v1::GetCameraCollectionListResponse>* writer, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncServerStreaming(1, context, request, writer, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_GetCameraCollectionCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetCameraCollectionCount() {
      ::grpc::Service::MarkMethodAsync(2);
    }
    ~WithAsyncMethod_GetCameraCollectionCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCameraCollectionCount(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::GetCameraCollectionCountRequest* /*request*/, ::keyapis::vc::v1::GetCameraCollectionCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetCameraCollectionCount(::grpc::ServerContext* context, ::keyapis::vc::v1::GetCameraCollectionCountRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::vc::v1::GetCameraCollectionCountResponse>* 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_SaveCameraCollection : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_SaveCameraCollection() {
      ::grpc::Service::MarkMethodAsync(3);
    }
    ~WithAsyncMethod_SaveCameraCollection() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveCameraCollection(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::SaveCameraCollectionRequest* /*request*/, ::keyapis::vc::v1::SaveCameraCollectionResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSaveCameraCollection(::grpc::ServerContext* context, ::keyapis::vc::v1::SaveCameraCollectionRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::vc::v1::SaveCameraCollectionResponse>* 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_DeleteCameraCollection : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_DeleteCameraCollection() {
      ::grpc::Service::MarkMethodAsync(4);
    }
    ~WithAsyncMethod_DeleteCameraCollection() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteCameraCollection(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::DeleteCameraCollectionRequest* /*request*/, ::keyapis::vc::v1::DeleteCameraCollectionResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestDeleteCameraCollection(::grpc::ServerContext* context, ::keyapis::vc::v1::DeleteCameraCollectionRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::vc::v1::DeleteCameraCollectionResponse>* 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_PostCameraCollectionRestore : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_PostCameraCollectionRestore() {
      ::grpc::Service::MarkMethodAsync(5);
    }
    ~WithAsyncMethod_PostCameraCollectionRestore() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostCameraCollectionRestore(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::PostCameraCollectionRestoreRequest* /*request*/, ::keyapis::vc::v1::PostCameraCollectionRestoreResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestPostCameraCollectionRestore(::grpc::ServerContext* context, ::keyapis::vc::v1::PostCameraCollectionRestoreRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::vc::v1::PostCameraCollectionRestoreResponse>* 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);
    }
  };
  typedef WithAsyncMethod_GetCameraCollection<WithAsyncMethod_GetCameraCollectionList<WithAsyncMethod_GetCameraCollectionCount<WithAsyncMethod_SaveCameraCollection<WithAsyncMethod_DeleteCameraCollection<WithAsyncMethod_PostCameraCollectionRestore<Service > > > > > > AsyncService;
  template <class BaseClass>
  class WithCallbackMethod_GetCameraCollection : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetCameraCollection() {
      ::grpc::Service::MarkMethodCallback(0,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::vc::v1::GetCameraCollectionRequest, ::keyapis::vc::v1::GetCameraCollectionResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::vc::v1::GetCameraCollectionRequest* request, ::keyapis::vc::v1::GetCameraCollectionResponse* response) { return this->GetCameraCollection(context, request, response); }));}
    void SetMessageAllocatorFor_GetCameraCollection(
        ::grpc::MessageAllocator< ::keyapis::vc::v1::GetCameraCollectionRequest, ::keyapis::vc::v1::GetCameraCollectionResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(0);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::vc::v1::GetCameraCollectionRequest, ::keyapis::vc::v1::GetCameraCollectionResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetCameraCollection() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCameraCollection(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::GetCameraCollectionRequest* /*request*/, ::keyapis::vc::v1::GetCameraCollectionResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetCameraCollection(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::vc::v1::GetCameraCollectionRequest* /*request*/, ::keyapis::vc::v1::GetCameraCollectionResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetCameraCollectionList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetCameraCollectionList() {
      ::grpc::Service::MarkMethodCallback(1,
          new ::grpc::internal::CallbackServerStreamingHandler< ::keyapis::vc::v1::GetCameraCollectionListRequest, ::keyapis::vc::v1::GetCameraCollectionListResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::vc::v1::GetCameraCollectionListRequest* request) { return this->GetCameraCollectionList(context, request); }));
    }
    ~WithCallbackMethod_GetCameraCollectionList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCameraCollectionList(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::GetCameraCollectionListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::vc::v1::GetCameraCollectionListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerWriteReactor< ::keyapis::vc::v1::GetCameraCollectionListResponse>* GetCameraCollectionList(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::vc::v1::GetCameraCollectionListRequest* /*request*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetCameraCollectionCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetCameraCollectionCount() {
      ::grpc::Service::MarkMethodCallback(2,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::vc::v1::GetCameraCollectionCountRequest, ::keyapis::vc::v1::GetCameraCollectionCountResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::vc::v1::GetCameraCollectionCountRequest* request, ::keyapis::vc::v1::GetCameraCollectionCountResponse* response) { return this->GetCameraCollectionCount(context, request, response); }));}
    void SetMessageAllocatorFor_GetCameraCollectionCount(
        ::grpc::MessageAllocator< ::keyapis::vc::v1::GetCameraCollectionCountRequest, ::keyapis::vc::v1::GetCameraCollectionCountResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(2);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::vc::v1::GetCameraCollectionCountRequest, ::keyapis::vc::v1::GetCameraCollectionCountResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetCameraCollectionCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCameraCollectionCount(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::GetCameraCollectionCountRequest* /*request*/, ::keyapis::vc::v1::GetCameraCollectionCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetCameraCollectionCount(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::vc::v1::GetCameraCollectionCountRequest* /*request*/, ::keyapis::vc::v1::GetCameraCollectionCountResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_SaveCameraCollection : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_SaveCameraCollection() {
      ::grpc::Service::MarkMethodCallback(3,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::vc::v1::SaveCameraCollectionRequest, ::keyapis::vc::v1::SaveCameraCollectionResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::vc::v1::SaveCameraCollectionRequest* request, ::keyapis::vc::v1::SaveCameraCollectionResponse* response) { return this->SaveCameraCollection(context, request, response); }));}
    void SetMessageAllocatorFor_SaveCameraCollection(
        ::grpc::MessageAllocator< ::keyapis::vc::v1::SaveCameraCollectionRequest, ::keyapis::vc::v1::SaveCameraCollectionResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(3);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::vc::v1::SaveCameraCollectionRequest, ::keyapis::vc::v1::SaveCameraCollectionResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_SaveCameraCollection() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveCameraCollection(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::SaveCameraCollectionRequest* /*request*/, ::keyapis::vc::v1::SaveCameraCollectionResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* SaveCameraCollection(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::vc::v1::SaveCameraCollectionRequest* /*request*/, ::keyapis::vc::v1::SaveCameraCollectionResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_DeleteCameraCollection : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_DeleteCameraCollection() {
      ::grpc::Service::MarkMethodCallback(4,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::vc::v1::DeleteCameraCollectionRequest, ::keyapis::vc::v1::DeleteCameraCollectionResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::vc::v1::DeleteCameraCollectionRequest* request, ::keyapis::vc::v1::DeleteCameraCollectionResponse* response) { return this->DeleteCameraCollection(context, request, response); }));}
    void SetMessageAllocatorFor_DeleteCameraCollection(
        ::grpc::MessageAllocator< ::keyapis::vc::v1::DeleteCameraCollectionRequest, ::keyapis::vc::v1::DeleteCameraCollectionResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(4);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::vc::v1::DeleteCameraCollectionRequest, ::keyapis::vc::v1::DeleteCameraCollectionResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_DeleteCameraCollection() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteCameraCollection(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::DeleteCameraCollectionRequest* /*request*/, ::keyapis::vc::v1::DeleteCameraCollectionResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* DeleteCameraCollection(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::vc::v1::DeleteCameraCollectionRequest* /*request*/, ::keyapis::vc::v1::DeleteCameraCollectionResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_PostCameraCollectionRestore : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_PostCameraCollectionRestore() {
      ::grpc::Service::MarkMethodCallback(5,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::vc::v1::PostCameraCollectionRestoreRequest, ::keyapis::vc::v1::PostCameraCollectionRestoreResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::vc::v1::PostCameraCollectionRestoreRequest* request, ::keyapis::vc::v1::PostCameraCollectionRestoreResponse* response) { return this->PostCameraCollectionRestore(context, request, response); }));}
    void SetMessageAllocatorFor_PostCameraCollectionRestore(
        ::grpc::MessageAllocator< ::keyapis::vc::v1::PostCameraCollectionRestoreRequest, ::keyapis::vc::v1::PostCameraCollectionRestoreResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(5);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::vc::v1::PostCameraCollectionRestoreRequest, ::keyapis::vc::v1::PostCameraCollectionRestoreResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_PostCameraCollectionRestore() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostCameraCollectionRestore(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::PostCameraCollectionRestoreRequest* /*request*/, ::keyapis::vc::v1::PostCameraCollectionRestoreResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* PostCameraCollectionRestore(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::vc::v1::PostCameraCollectionRestoreRequest* /*request*/, ::keyapis::vc::v1::PostCameraCollectionRestoreResponse* /*response*/)  { return nullptr; }
  };
  typedef WithCallbackMethod_GetCameraCollection<WithCallbackMethod_GetCameraCollectionList<WithCallbackMethod_GetCameraCollectionCount<WithCallbackMethod_SaveCameraCollection<WithCallbackMethod_DeleteCameraCollection<WithCallbackMethod_PostCameraCollectionRestore<Service > > > > > > CallbackService;
  typedef CallbackService ExperimentalCallbackService;
  template <class BaseClass>
  class WithGenericMethod_GetCameraCollection : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetCameraCollection() {
      ::grpc::Service::MarkMethodGeneric(0);
    }
    ~WithGenericMethod_GetCameraCollection() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCameraCollection(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::GetCameraCollectionRequest* /*request*/, ::keyapis::vc::v1::GetCameraCollectionResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetCameraCollectionList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetCameraCollectionList() {
      ::grpc::Service::MarkMethodGeneric(1);
    }
    ~WithGenericMethod_GetCameraCollectionList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCameraCollectionList(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::GetCameraCollectionListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::vc::v1::GetCameraCollectionListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetCameraCollectionCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetCameraCollectionCount() {
      ::grpc::Service::MarkMethodGeneric(2);
    }
    ~WithGenericMethod_GetCameraCollectionCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCameraCollectionCount(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::GetCameraCollectionCountRequest* /*request*/, ::keyapis::vc::v1::GetCameraCollectionCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_SaveCameraCollection : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_SaveCameraCollection() {
      ::grpc::Service::MarkMethodGeneric(3);
    }
    ~WithGenericMethod_SaveCameraCollection() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveCameraCollection(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::SaveCameraCollectionRequest* /*request*/, ::keyapis::vc::v1::SaveCameraCollectionResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_DeleteCameraCollection : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_DeleteCameraCollection() {
      ::grpc::Service::MarkMethodGeneric(4);
    }
    ~WithGenericMethod_DeleteCameraCollection() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteCameraCollection(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::DeleteCameraCollectionRequest* /*request*/, ::keyapis::vc::v1::DeleteCameraCollectionResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_PostCameraCollectionRestore : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_PostCameraCollectionRestore() {
      ::grpc::Service::MarkMethodGeneric(5);
    }
    ~WithGenericMethod_PostCameraCollectionRestore() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostCameraCollectionRestore(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::PostCameraCollectionRestoreRequest* /*request*/, ::keyapis::vc::v1::PostCameraCollectionRestoreResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetCameraCollection : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetCameraCollection() {
      ::grpc::Service::MarkMethodRaw(0);
    }
    ~WithRawMethod_GetCameraCollection() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCameraCollection(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::GetCameraCollectionRequest* /*request*/, ::keyapis::vc::v1::GetCameraCollectionResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetCameraCollection(::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_GetCameraCollectionList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetCameraCollectionList() {
      ::grpc::Service::MarkMethodRaw(1);
    }
    ~WithRawMethod_GetCameraCollectionList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCameraCollectionList(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::GetCameraCollectionListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::vc::v1::GetCameraCollectionListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetCameraCollectionList(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncWriter< ::grpc::ByteBuffer>* writer, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncServerStreaming(1, context, request, writer, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetCameraCollectionCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetCameraCollectionCount() {
      ::grpc::Service::MarkMethodRaw(2);
    }
    ~WithRawMethod_GetCameraCollectionCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCameraCollectionCount(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::GetCameraCollectionCountRequest* /*request*/, ::keyapis::vc::v1::GetCameraCollectionCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetCameraCollectionCount(::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_SaveCameraCollection : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_SaveCameraCollection() {
      ::grpc::Service::MarkMethodRaw(3);
    }
    ~WithRawMethod_SaveCameraCollection() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveCameraCollection(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::SaveCameraCollectionRequest* /*request*/, ::keyapis::vc::v1::SaveCameraCollectionResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSaveCameraCollection(::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_DeleteCameraCollection : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_DeleteCameraCollection() {
      ::grpc::Service::MarkMethodRaw(4);
    }
    ~WithRawMethod_DeleteCameraCollection() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteCameraCollection(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::DeleteCameraCollectionRequest* /*request*/, ::keyapis::vc::v1::DeleteCameraCollectionResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestDeleteCameraCollection(::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_PostCameraCollectionRestore : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_PostCameraCollectionRestore() {
      ::grpc::Service::MarkMethodRaw(5);
    }
    ~WithRawMethod_PostCameraCollectionRestore() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostCameraCollectionRestore(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::PostCameraCollectionRestoreRequest* /*request*/, ::keyapis::vc::v1::PostCameraCollectionRestoreResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestPostCameraCollectionRestore(::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 WithRawCallbackMethod_GetCameraCollection : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetCameraCollection() {
      ::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->GetCameraCollection(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetCameraCollection() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCameraCollection(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::GetCameraCollectionRequest* /*request*/, ::keyapis::vc::v1::GetCameraCollectionResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetCameraCollection(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetCameraCollectionList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetCameraCollectionList() {
      ::grpc::Service::MarkMethodRawCallback(1,
          new ::grpc::internal::CallbackServerStreamingHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const::grpc::ByteBuffer* request) { return this->GetCameraCollectionList(context, request); }));
    }
    ~WithRawCallbackMethod_GetCameraCollectionList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCameraCollectionList(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::GetCameraCollectionListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::vc::v1::GetCameraCollectionListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerWriteReactor< ::grpc::ByteBuffer>* GetCameraCollectionList(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetCameraCollectionCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetCameraCollectionCount() {
      ::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->GetCameraCollectionCount(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetCameraCollectionCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCameraCollectionCount(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::GetCameraCollectionCountRequest* /*request*/, ::keyapis::vc::v1::GetCameraCollectionCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetCameraCollectionCount(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_SaveCameraCollection : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_SaveCameraCollection() {
      ::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->SaveCameraCollection(context, request, response); }));
    }
    ~WithRawCallbackMethod_SaveCameraCollection() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveCameraCollection(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::SaveCameraCollectionRequest* /*request*/, ::keyapis::vc::v1::SaveCameraCollectionResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* SaveCameraCollection(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_DeleteCameraCollection : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_DeleteCameraCollection() {
      ::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->DeleteCameraCollection(context, request, response); }));
    }
    ~WithRawCallbackMethod_DeleteCameraCollection() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteCameraCollection(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::DeleteCameraCollectionRequest* /*request*/, ::keyapis::vc::v1::DeleteCameraCollectionResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* DeleteCameraCollection(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_PostCameraCollectionRestore : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_PostCameraCollectionRestore() {
      ::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->PostCameraCollectionRestore(context, request, response); }));
    }
    ~WithRawCallbackMethod_PostCameraCollectionRestore() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostCameraCollectionRestore(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::PostCameraCollectionRestoreRequest* /*request*/, ::keyapis::vc::v1::PostCameraCollectionRestoreResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* PostCameraCollectionRestore(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetCameraCollection : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetCameraCollection() {
      ::grpc::Service::MarkMethodStreamed(0,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::vc::v1::GetCameraCollectionRequest, ::keyapis::vc::v1::GetCameraCollectionResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::vc::v1::GetCameraCollectionRequest, ::keyapis::vc::v1::GetCameraCollectionResponse>* streamer) {
                       return this->StreamedGetCameraCollection(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetCameraCollection() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetCameraCollection(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::GetCameraCollectionRequest* /*request*/, ::keyapis::vc::v1::GetCameraCollectionResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetCameraCollection(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::vc::v1::GetCameraCollectionRequest,::keyapis::vc::v1::GetCameraCollectionResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetCameraCollectionCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetCameraCollectionCount() {
      ::grpc::Service::MarkMethodStreamed(2,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::vc::v1::GetCameraCollectionCountRequest, ::keyapis::vc::v1::GetCameraCollectionCountResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::vc::v1::GetCameraCollectionCountRequest, ::keyapis::vc::v1::GetCameraCollectionCountResponse>* streamer) {
                       return this->StreamedGetCameraCollectionCount(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetCameraCollectionCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetCameraCollectionCount(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::GetCameraCollectionCountRequest* /*request*/, ::keyapis::vc::v1::GetCameraCollectionCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetCameraCollectionCount(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::vc::v1::GetCameraCollectionCountRequest,::keyapis::vc::v1::GetCameraCollectionCountResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_SaveCameraCollection : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_SaveCameraCollection() {
      ::grpc::Service::MarkMethodStreamed(3,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::vc::v1::SaveCameraCollectionRequest, ::keyapis::vc::v1::SaveCameraCollectionResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::vc::v1::SaveCameraCollectionRequest, ::keyapis::vc::v1::SaveCameraCollectionResponse>* streamer) {
                       return this->StreamedSaveCameraCollection(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_SaveCameraCollection() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status SaveCameraCollection(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::SaveCameraCollectionRequest* /*request*/, ::keyapis::vc::v1::SaveCameraCollectionResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedSaveCameraCollection(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::vc::v1::SaveCameraCollectionRequest,::keyapis::vc::v1::SaveCameraCollectionResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_DeleteCameraCollection : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_DeleteCameraCollection() {
      ::grpc::Service::MarkMethodStreamed(4,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::vc::v1::DeleteCameraCollectionRequest, ::keyapis::vc::v1::DeleteCameraCollectionResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::vc::v1::DeleteCameraCollectionRequest, ::keyapis::vc::v1::DeleteCameraCollectionResponse>* streamer) {
                       return this->StreamedDeleteCameraCollection(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_DeleteCameraCollection() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status DeleteCameraCollection(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::DeleteCameraCollectionRequest* /*request*/, ::keyapis::vc::v1::DeleteCameraCollectionResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedDeleteCameraCollection(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::vc::v1::DeleteCameraCollectionRequest,::keyapis::vc::v1::DeleteCameraCollectionResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_PostCameraCollectionRestore : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_PostCameraCollectionRestore() {
      ::grpc::Service::MarkMethodStreamed(5,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::vc::v1::PostCameraCollectionRestoreRequest, ::keyapis::vc::v1::PostCameraCollectionRestoreResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::vc::v1::PostCameraCollectionRestoreRequest, ::keyapis::vc::v1::PostCameraCollectionRestoreResponse>* streamer) {
                       return this->StreamedPostCameraCollectionRestore(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_PostCameraCollectionRestore() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status PostCameraCollectionRestore(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::PostCameraCollectionRestoreRequest* /*request*/, ::keyapis::vc::v1::PostCameraCollectionRestoreResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedPostCameraCollectionRestore(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::vc::v1::PostCameraCollectionRestoreRequest,::keyapis::vc::v1::PostCameraCollectionRestoreResponse>* server_unary_streamer) = 0;
  };
  typedef WithStreamedUnaryMethod_GetCameraCollection<WithStreamedUnaryMethod_GetCameraCollectionCount<WithStreamedUnaryMethod_SaveCameraCollection<WithStreamedUnaryMethod_DeleteCameraCollection<WithStreamedUnaryMethod_PostCameraCollectionRestore<Service > > > > > StreamedUnaryService;
  template <class BaseClass>
  class WithSplitStreamingMethod_GetCameraCollectionList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithSplitStreamingMethod_GetCameraCollectionList() {
      ::grpc::Service::MarkMethodStreamed(1,
        new ::grpc::internal::SplitServerStreamingHandler<
          ::keyapis::vc::v1::GetCameraCollectionListRequest, ::keyapis::vc::v1::GetCameraCollectionListResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerSplitStreamer<
                     ::keyapis::vc::v1::GetCameraCollectionListRequest, ::keyapis::vc::v1::GetCameraCollectionListResponse>* streamer) {
                       return this->StreamedGetCameraCollectionList(context,
                         streamer);
                  }));
    }
    ~WithSplitStreamingMethod_GetCameraCollectionList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetCameraCollectionList(::grpc::ServerContext* /*context*/, const ::keyapis::vc::v1::GetCameraCollectionListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::vc::v1::GetCameraCollectionListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with split streamed
    virtual ::grpc::Status StreamedGetCameraCollectionList(::grpc::ServerContext* context, ::grpc::ServerSplitStreamer< ::keyapis::vc::v1::GetCameraCollectionListRequest,::keyapis::vc::v1::GetCameraCollectionListResponse>* server_split_streamer) = 0;
  };
  typedef WithSplitStreamingMethod_GetCameraCollectionList<Service > SplitStreamedService;
  typedef WithStreamedUnaryMethod_GetCameraCollection<WithSplitStreamingMethod_GetCameraCollectionList<WithStreamedUnaryMethod_GetCameraCollectionCount<WithStreamedUnaryMethod_SaveCameraCollection<WithStreamedUnaryMethod_DeleteCameraCollection<WithStreamedUnaryMethod_PostCameraCollectionRestore<Service > > > > > > StreamedService;
};

}  // namespace v1
}  // namespace vc
}  // namespace keyapis


#endif  // GRPC_keyapis_2fvc_2fv1_2fkeyapis_5fvc_5fcamera_5fgroup_5fv1_2eproto__INCLUDED
