// Generated by the gRPC C++ plugin.
// If you make any local change, they will be lost.
// source: keyapis/subscription/v1/keyapis_subscription_offer_template_v1.proto
// Original file comments:
//
// Сервис реализует функционал управления Шаблонами КВ.
// Шаблон КВ описывает набор технологических планов и правила их применимости для массового создания КВ
#ifndef GRPC_keyapis_2fsubscription_2fv1_2fkeyapis_5fsubscription_5foffer_5ftemplate_5fv1_2eproto__INCLUDED
#define GRPC_keyapis_2fsubscription_2fv1_2fkeyapis_5fsubscription_5foffer_5ftemplate_5fv1_2eproto__INCLUDED

#include "keyapis/subscription/v1/keyapis_subscription_offer_template_v1.pb.h"

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

namespace keyapis {
namespace subscription {
namespace v1 {

// Сервис Шаблонов КВ
class OfferTemplateService final {
 public:
  static constexpr char const* service_full_name() {
    return "keyapis.subscription.v1.OfferTemplateService";
  }
  class StubInterface {
   public:
    virtual ~StubInterface() {}
    // Метод получения шаблона КВ.
    // Разрешения: subscription:offer_template:card.
    // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
    virtual ::grpc::Status GetOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateRequest& request, ::keyapis::subscription::v1::GetOfferTemplateResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateResponse>> AsyncGetOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateResponse>>(AsyncGetOfferTemplateRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateResponse>> PrepareAsyncGetOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateResponse>>(PrepareAsyncGetOfferTemplateRaw(context, request, cq));
    }
    // Метод получения списка шаблонов КВ.
    // Разрешения: subscription:offer_template:list.
    // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
    std::unique_ptr< ::grpc::ClientReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateListResponse>> GetOfferTemplateList(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateListRequest& request) {
      return std::unique_ptr< ::grpc::ClientReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateListResponse>>(GetOfferTemplateListRaw(context, request));
    }
    std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateListResponse>> AsyncGetOfferTemplateList(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateListRequest& request, ::grpc::CompletionQueue* cq, void* tag) {
      return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateListResponse>>(AsyncGetOfferTemplateListRaw(context, request, cq, tag));
    }
    std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateListResponse>> PrepareAsyncGetOfferTemplateList(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateListResponse>>(PrepareAsyncGetOfferTemplateListRaw(context, request, cq));
    }
    // Метод получения списка Шаблонов КВ, соответствующих коммерческим возможностям дома.
    // По ОРПОН дома определяет фактически настроенные КВ и возвращает соответствующие им Шаблоны КВ.
    // Разрешения: subscription:offer_template:list.
    // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
    std::unique_ptr< ::grpc::ClientReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>> GetOfferTemplateByOrponList(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest& request) {
      return std::unique_ptr< ::grpc::ClientReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>>(GetOfferTemplateByOrponListRaw(context, request));
    }
    std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>> AsyncGetOfferTemplateByOrponList(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest& request, ::grpc::CompletionQueue* cq, void* tag) {
      return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>>(AsyncGetOfferTemplateByOrponListRaw(context, request, cq, tag));
    }
    std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>> PrepareAsyncGetOfferTemplateByOrponList(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>>(PrepareAsyncGetOfferTemplateByOrponListRaw(context, request, cq));
    }
    // Метод получения количества шаблонов КВ.
    // Разрешения: subscription:offer_template:list.
    // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
    virtual ::grpc::Status GetOfferTemplateCount(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateCountRequest& request, ::keyapis::subscription::v1::GetOfferTemplateCountResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateCountResponse>> AsyncGetOfferTemplateCount(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateCountResponse>>(AsyncGetOfferTemplateCountRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateCountResponse>> PrepareAsyncGetOfferTemplateCount(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateCountResponse>>(PrepareAsyncGetOfferTemplateCountRaw(context, request, cq));
    }
    // Метод получения количества Шаблонов КВ, соответствующих коммерческим возможностям дома.
    // По ОРПОН дома определяет фактически настроенные КВ и возвращает количество соответствующих им Шаблонов КВ.
    // Разрешения: subscription:offer_template:list.
    // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
    virtual ::grpc::Status GetOfferTemplateByOrponCount(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest& request, ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse>> AsyncGetOfferTemplateByOrponCount(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse>>(AsyncGetOfferTemplateByOrponCountRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse>> PrepareAsyncGetOfferTemplateByOrponCount(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse>>(PrepareAsyncGetOfferTemplateByOrponCountRaw(context, request, cq));
    }
    // Метод создания/редактирования шаблона КВ.
    // При отсутствии идентификатора создаёт новый шаблон, при наличии — редактирует существующий.
    // Разрешения: subscription:offer_template:save.
    // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
    virtual ::grpc::Status PostOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRequest& request, ::keyapis::subscription::v1::PostOfferTemplateResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::PostOfferTemplateResponse>> AsyncPostOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::PostOfferTemplateResponse>>(AsyncPostOfferTemplateRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::PostOfferTemplateResponse>> PrepareAsyncPostOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::PostOfferTemplateResponse>>(PrepareAsyncPostOfferTemplateRaw(context, request, cq));
    }
    // Метод архивации шаблона КВ.
    // Переводит шаблон в статус ARCHIVED.
    // Разрешения: subscription:offer_template:remove.
    // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
    virtual ::grpc::Status DeleteOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::DeleteOfferTemplateRequest& request, ::keyapis::subscription::v1::DeleteOfferTemplateResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::DeleteOfferTemplateResponse>> AsyncDeleteOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::DeleteOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::DeleteOfferTemplateResponse>>(AsyncDeleteOfferTemplateRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::DeleteOfferTemplateResponse>> PrepareAsyncDeleteOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::DeleteOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::DeleteOfferTemplateResponse>>(PrepareAsyncDeleteOfferTemplateRaw(context, request, cq));
    }
    // Метод восстановления шаблона КВ из архива.
    // Переводит шаблон в статус ACTIVE.
    // Разрешения: subscription:offer_template:restore:save.
    // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
    virtual ::grpc::Status PostOfferTemplateRestore(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest& request, ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse>> AsyncPostOfferTemplateRestore(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse>>(AsyncPostOfferTemplateRestoreRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse>> PrepareAsyncPostOfferTemplateRestore(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse>>(PrepareAsyncPostOfferTemplateRestoreRaw(context, request, cq));
    }
    class async_interface {
     public:
      virtual ~async_interface() {}
      // Метод получения шаблона КВ.
      // Разрешения: subscription:offer_template:card.
      // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
      virtual void GetOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateRequest* request, ::keyapis::subscription::v1::GetOfferTemplateResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateRequest* request, ::keyapis::subscription::v1::GetOfferTemplateResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод получения списка шаблонов КВ.
      // Разрешения: subscription:offer_template:list.
      // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
      virtual void GetOfferTemplateList(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateListRequest* request, ::grpc::ClientReadReactor< ::keyapis::subscription::v1::GetOfferTemplateListResponse>* reactor) = 0;
      // Метод получения списка Шаблонов КВ, соответствующих коммерческим возможностям дома.
      // По ОРПОН дома определяет фактически настроенные КВ и возвращает соответствующие им Шаблоны КВ.
      // Разрешения: subscription:offer_template:list.
      // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
      virtual void GetOfferTemplateByOrponList(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest* request, ::grpc::ClientReadReactor< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>* reactor) = 0;
      // Метод получения количества шаблонов КВ.
      // Разрешения: subscription:offer_template:list.
      // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
      virtual void GetOfferTemplateCount(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateCountRequest* request, ::keyapis::subscription::v1::GetOfferTemplateCountResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetOfferTemplateCount(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateCountRequest* request, ::keyapis::subscription::v1::GetOfferTemplateCountResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод получения количества Шаблонов КВ, соответствующих коммерческим возможностям дома.
      // По ОРПОН дома определяет фактически настроенные КВ и возвращает количество соответствующих им Шаблонов КВ.
      // Разрешения: subscription:offer_template:list.
      // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
      virtual void GetOfferTemplateByOrponCount(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest* request, ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetOfferTemplateByOrponCount(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest* request, ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод создания/редактирования шаблона КВ.
      // При отсутствии идентификатора создаёт новый шаблон, при наличии — редактирует существующий.
      // Разрешения: subscription:offer_template:save.
      // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
      virtual void PostOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRequest* request, ::keyapis::subscription::v1::PostOfferTemplateResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void PostOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRequest* request, ::keyapis::subscription::v1::PostOfferTemplateResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод архивации шаблона КВ.
      // Переводит шаблон в статус ARCHIVED.
      // Разрешения: subscription:offer_template:remove.
      // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
      virtual void DeleteOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::DeleteOfferTemplateRequest* request, ::keyapis::subscription::v1::DeleteOfferTemplateResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void DeleteOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::DeleteOfferTemplateRequest* request, ::keyapis::subscription::v1::DeleteOfferTemplateResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод восстановления шаблона КВ из архива.
      // Переводит шаблон в статус ACTIVE.
      // Разрешения: subscription:offer_template:restore:save.
      // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
      virtual void PostOfferTemplateRestore(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest* request, ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void PostOfferTemplateRestore(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest* request, ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse* 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::subscription::v1::GetOfferTemplateResponse>* AsyncGetOfferTemplateRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateResponse>* PrepareAsyncGetOfferTemplateRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateListResponse>* GetOfferTemplateListRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateListRequest& request) = 0;
    virtual ::grpc::ClientAsyncReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateListResponse>* AsyncGetOfferTemplateListRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateListRequest& request, ::grpc::CompletionQueue* cq, void* tag) = 0;
    virtual ::grpc::ClientAsyncReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateListResponse>* PrepareAsyncGetOfferTemplateListRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateListRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>* GetOfferTemplateByOrponListRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest& request) = 0;
    virtual ::grpc::ClientAsyncReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>* AsyncGetOfferTemplateByOrponListRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest& request, ::grpc::CompletionQueue* cq, void* tag) = 0;
    virtual ::grpc::ClientAsyncReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>* PrepareAsyncGetOfferTemplateByOrponListRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateCountResponse>* AsyncGetOfferTemplateCountRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateCountRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateCountResponse>* PrepareAsyncGetOfferTemplateCountRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateCountRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse>* AsyncGetOfferTemplateByOrponCountRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse>* PrepareAsyncGetOfferTemplateByOrponCountRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::PostOfferTemplateResponse>* AsyncPostOfferTemplateRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::PostOfferTemplateResponse>* PrepareAsyncPostOfferTemplateRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::DeleteOfferTemplateResponse>* AsyncDeleteOfferTemplateRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::DeleteOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::DeleteOfferTemplateResponse>* PrepareAsyncDeleteOfferTemplateRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::DeleteOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse>* AsyncPostOfferTemplateRestoreRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse>* PrepareAsyncPostOfferTemplateRestoreRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest& 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 GetOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateRequest& request, ::keyapis::subscription::v1::GetOfferTemplateResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::GetOfferTemplateResponse>> AsyncGetOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::GetOfferTemplateResponse>>(AsyncGetOfferTemplateRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::GetOfferTemplateResponse>> PrepareAsyncGetOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::GetOfferTemplateResponse>>(PrepareAsyncGetOfferTemplateRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientReader< ::keyapis::subscription::v1::GetOfferTemplateListResponse>> GetOfferTemplateList(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateListRequest& request) {
      return std::unique_ptr< ::grpc::ClientReader< ::keyapis::subscription::v1::GetOfferTemplateListResponse>>(GetOfferTemplateListRaw(context, request));
    }
    std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::subscription::v1::GetOfferTemplateListResponse>> AsyncGetOfferTemplateList(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateListRequest& request, ::grpc::CompletionQueue* cq, void* tag) {
      return std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::subscription::v1::GetOfferTemplateListResponse>>(AsyncGetOfferTemplateListRaw(context, request, cq, tag));
    }
    std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::subscription::v1::GetOfferTemplateListResponse>> PrepareAsyncGetOfferTemplateList(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::subscription::v1::GetOfferTemplateListResponse>>(PrepareAsyncGetOfferTemplateListRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientReader< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>> GetOfferTemplateByOrponList(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest& request) {
      return std::unique_ptr< ::grpc::ClientReader< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>>(GetOfferTemplateByOrponListRaw(context, request));
    }
    std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>> AsyncGetOfferTemplateByOrponList(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest& request, ::grpc::CompletionQueue* cq, void* tag) {
      return std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>>(AsyncGetOfferTemplateByOrponListRaw(context, request, cq, tag));
    }
    std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>> PrepareAsyncGetOfferTemplateByOrponList(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>>(PrepareAsyncGetOfferTemplateByOrponListRaw(context, request, cq));
    }
    ::grpc::Status GetOfferTemplateCount(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateCountRequest& request, ::keyapis::subscription::v1::GetOfferTemplateCountResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::GetOfferTemplateCountResponse>> AsyncGetOfferTemplateCount(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::GetOfferTemplateCountResponse>>(AsyncGetOfferTemplateCountRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::GetOfferTemplateCountResponse>> PrepareAsyncGetOfferTemplateCount(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::GetOfferTemplateCountResponse>>(PrepareAsyncGetOfferTemplateCountRaw(context, request, cq));
    }
    ::grpc::Status GetOfferTemplateByOrponCount(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest& request, ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse>> AsyncGetOfferTemplateByOrponCount(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse>>(AsyncGetOfferTemplateByOrponCountRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse>> PrepareAsyncGetOfferTemplateByOrponCount(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse>>(PrepareAsyncGetOfferTemplateByOrponCountRaw(context, request, cq));
    }
    ::grpc::Status PostOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRequest& request, ::keyapis::subscription::v1::PostOfferTemplateResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::PostOfferTemplateResponse>> AsyncPostOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::PostOfferTemplateResponse>>(AsyncPostOfferTemplateRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::PostOfferTemplateResponse>> PrepareAsyncPostOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::PostOfferTemplateResponse>>(PrepareAsyncPostOfferTemplateRaw(context, request, cq));
    }
    ::grpc::Status DeleteOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::DeleteOfferTemplateRequest& request, ::keyapis::subscription::v1::DeleteOfferTemplateResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::DeleteOfferTemplateResponse>> AsyncDeleteOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::DeleteOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::DeleteOfferTemplateResponse>>(AsyncDeleteOfferTemplateRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::DeleteOfferTemplateResponse>> PrepareAsyncDeleteOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::DeleteOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::DeleteOfferTemplateResponse>>(PrepareAsyncDeleteOfferTemplateRaw(context, request, cq));
    }
    ::grpc::Status PostOfferTemplateRestore(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest& request, ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse>> AsyncPostOfferTemplateRestore(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse>>(AsyncPostOfferTemplateRestoreRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse>> PrepareAsyncPostOfferTemplateRestore(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse>>(PrepareAsyncPostOfferTemplateRestoreRaw(context, request, cq));
    }
    class async final :
      public StubInterface::async_interface {
     public:
      void GetOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateRequest* request, ::keyapis::subscription::v1::GetOfferTemplateResponse* response, std::function<void(::grpc::Status)>) override;
      void GetOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateRequest* request, ::keyapis::subscription::v1::GetOfferTemplateResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetOfferTemplateList(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateListRequest* request, ::grpc::ClientReadReactor< ::keyapis::subscription::v1::GetOfferTemplateListResponse>* reactor) override;
      void GetOfferTemplateByOrponList(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest* request, ::grpc::ClientReadReactor< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>* reactor) override;
      void GetOfferTemplateCount(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateCountRequest* request, ::keyapis::subscription::v1::GetOfferTemplateCountResponse* response, std::function<void(::grpc::Status)>) override;
      void GetOfferTemplateCount(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateCountRequest* request, ::keyapis::subscription::v1::GetOfferTemplateCountResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetOfferTemplateByOrponCount(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest* request, ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse* response, std::function<void(::grpc::Status)>) override;
      void GetOfferTemplateByOrponCount(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest* request, ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void PostOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRequest* request, ::keyapis::subscription::v1::PostOfferTemplateResponse* response, std::function<void(::grpc::Status)>) override;
      void PostOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRequest* request, ::keyapis::subscription::v1::PostOfferTemplateResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void DeleteOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::DeleteOfferTemplateRequest* request, ::keyapis::subscription::v1::DeleteOfferTemplateResponse* response, std::function<void(::grpc::Status)>) override;
      void DeleteOfferTemplate(::grpc::ClientContext* context, const ::keyapis::subscription::v1::DeleteOfferTemplateRequest* request, ::keyapis::subscription::v1::DeleteOfferTemplateResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void PostOfferTemplateRestore(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest* request, ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse* response, std::function<void(::grpc::Status)>) override;
      void PostOfferTemplateRestore(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest* request, ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse* 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::subscription::v1::GetOfferTemplateResponse>* AsyncGetOfferTemplateRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::GetOfferTemplateResponse>* PrepareAsyncGetOfferTemplateRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientReader< ::keyapis::subscription::v1::GetOfferTemplateListResponse>* GetOfferTemplateListRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateListRequest& request) override;
    ::grpc::ClientAsyncReader< ::keyapis::subscription::v1::GetOfferTemplateListResponse>* AsyncGetOfferTemplateListRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateListRequest& request, ::grpc::CompletionQueue* cq, void* tag) override;
    ::grpc::ClientAsyncReader< ::keyapis::subscription::v1::GetOfferTemplateListResponse>* PrepareAsyncGetOfferTemplateListRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateListRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientReader< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>* GetOfferTemplateByOrponListRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest& request) override;
    ::grpc::ClientAsyncReader< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>* AsyncGetOfferTemplateByOrponListRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest& request, ::grpc::CompletionQueue* cq, void* tag) override;
    ::grpc::ClientAsyncReader< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>* PrepareAsyncGetOfferTemplateByOrponListRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::GetOfferTemplateCountResponse>* AsyncGetOfferTemplateCountRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateCountRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::GetOfferTemplateCountResponse>* PrepareAsyncGetOfferTemplateCountRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateCountRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse>* AsyncGetOfferTemplateByOrponCountRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse>* PrepareAsyncGetOfferTemplateByOrponCountRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::PostOfferTemplateResponse>* AsyncPostOfferTemplateRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::PostOfferTemplateResponse>* PrepareAsyncPostOfferTemplateRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::DeleteOfferTemplateResponse>* AsyncDeleteOfferTemplateRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::DeleteOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::DeleteOfferTemplateResponse>* PrepareAsyncDeleteOfferTemplateRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::DeleteOfferTemplateRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse>* AsyncPostOfferTemplateRestoreRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse>* PrepareAsyncPostOfferTemplateRestoreRaw(::grpc::ClientContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest& request, ::grpc::CompletionQueue* cq) override;
    const ::grpc::internal::RpcMethod rpcmethod_GetOfferTemplate_;
    const ::grpc::internal::RpcMethod rpcmethod_GetOfferTemplateList_;
    const ::grpc::internal::RpcMethod rpcmethod_GetOfferTemplateByOrponList_;
    const ::grpc::internal::RpcMethod rpcmethod_GetOfferTemplateCount_;
    const ::grpc::internal::RpcMethod rpcmethod_GetOfferTemplateByOrponCount_;
    const ::grpc::internal::RpcMethod rpcmethod_PostOfferTemplate_;
    const ::grpc::internal::RpcMethod rpcmethod_DeleteOfferTemplate_;
    const ::grpc::internal::RpcMethod rpcmethod_PostOfferTemplateRestore_;
  };
  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();
    // Метод получения шаблона КВ.
    // Разрешения: subscription:offer_template:card.
    // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
    virtual ::grpc::Status GetOfferTemplate(::grpc::ServerContext* context, const ::keyapis::subscription::v1::GetOfferTemplateRequest* request, ::keyapis::subscription::v1::GetOfferTemplateResponse* response);
    // Метод получения списка шаблонов КВ.
    // Разрешения: subscription:offer_template:list.
    // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
    virtual ::grpc::Status GetOfferTemplateList(::grpc::ServerContext* context, const ::keyapis::subscription::v1::GetOfferTemplateListRequest* request, ::grpc::ServerWriter< ::keyapis::subscription::v1::GetOfferTemplateListResponse>* writer);
    // Метод получения списка Шаблонов КВ, соответствующих коммерческим возможностям дома.
    // По ОРПОН дома определяет фактически настроенные КВ и возвращает соответствующие им Шаблоны КВ.
    // Разрешения: subscription:offer_template:list.
    // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
    virtual ::grpc::Status GetOfferTemplateByOrponList(::grpc::ServerContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest* request, ::grpc::ServerWriter< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>* writer);
    // Метод получения количества шаблонов КВ.
    // Разрешения: subscription:offer_template:list.
    // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
    virtual ::grpc::Status GetOfferTemplateCount(::grpc::ServerContext* context, const ::keyapis::subscription::v1::GetOfferTemplateCountRequest* request, ::keyapis::subscription::v1::GetOfferTemplateCountResponse* response);
    // Метод получения количества Шаблонов КВ, соответствующих коммерческим возможностям дома.
    // По ОРПОН дома определяет фактически настроенные КВ и возвращает количество соответствующих им Шаблонов КВ.
    // Разрешения: subscription:offer_template:list.
    // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
    virtual ::grpc::Status GetOfferTemplateByOrponCount(::grpc::ServerContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest* request, ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse* response);
    // Метод создания/редактирования шаблона КВ.
    // При отсутствии идентификатора создаёт новый шаблон, при наличии — редактирует существующий.
    // Разрешения: subscription:offer_template:save.
    // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
    virtual ::grpc::Status PostOfferTemplate(::grpc::ServerContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRequest* request, ::keyapis::subscription::v1::PostOfferTemplateResponse* response);
    // Метод архивации шаблона КВ.
    // Переводит шаблон в статус ARCHIVED.
    // Разрешения: subscription:offer_template:remove.
    // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
    virtual ::grpc::Status DeleteOfferTemplate(::grpc::ServerContext* context, const ::keyapis::subscription::v1::DeleteOfferTemplateRequest* request, ::keyapis::subscription::v1::DeleteOfferTemplateResponse* response);
    // Метод восстановления шаблона КВ из архива.
    // Переводит шаблон в статус ACTIVE.
    // Разрешения: subscription:offer_template:restore:save.
    // Метод доступен для: Token: service, device_admin, ltp_first, admin, mrf, bti, manager. При наличии разрешений
    virtual ::grpc::Status PostOfferTemplateRestore(::grpc::ServerContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest* request, ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse* response);
  };
  template <class BaseClass>
  class WithAsyncMethod_GetOfferTemplate : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetOfferTemplate() {
      ::grpc::Service::MarkMethodAsync(0);
    }
    ~WithAsyncMethod_GetOfferTemplate() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplate(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateRequest* /*request*/, ::keyapis::subscription::v1::GetOfferTemplateResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetOfferTemplate(::grpc::ServerContext* context, ::keyapis::subscription::v1::GetOfferTemplateRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::subscription::v1::GetOfferTemplateResponse>* 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_GetOfferTemplateList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetOfferTemplateList() {
      ::grpc::Service::MarkMethodAsync(1);
    }
    ~WithAsyncMethod_GetOfferTemplateList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplateList(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::subscription::v1::GetOfferTemplateListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetOfferTemplateList(::grpc::ServerContext* context, ::keyapis::subscription::v1::GetOfferTemplateListRequest* request, ::grpc::ServerAsyncWriter< ::keyapis::subscription::v1::GetOfferTemplateListResponse>* 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_GetOfferTemplateByOrponList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetOfferTemplateByOrponList() {
      ::grpc::Service::MarkMethodAsync(2);
    }
    ~WithAsyncMethod_GetOfferTemplateByOrponList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplateByOrponList(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetOfferTemplateByOrponList(::grpc::ServerContext* context, ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest* request, ::grpc::ServerAsyncWriter< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>* writer, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncServerStreaming(2, context, request, writer, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_GetOfferTemplateCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetOfferTemplateCount() {
      ::grpc::Service::MarkMethodAsync(3);
    }
    ~WithAsyncMethod_GetOfferTemplateCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplateCount(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateCountRequest* /*request*/, ::keyapis::subscription::v1::GetOfferTemplateCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetOfferTemplateCount(::grpc::ServerContext* context, ::keyapis::subscription::v1::GetOfferTemplateCountRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::subscription::v1::GetOfferTemplateCountResponse>* 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_GetOfferTemplateByOrponCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetOfferTemplateByOrponCount() {
      ::grpc::Service::MarkMethodAsync(4);
    }
    ~WithAsyncMethod_GetOfferTemplateByOrponCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplateByOrponCount(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest* /*request*/, ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetOfferTemplateByOrponCount(::grpc::ServerContext* context, ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse>* 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_PostOfferTemplate : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_PostOfferTemplate() {
      ::grpc::Service::MarkMethodAsync(5);
    }
    ~WithAsyncMethod_PostOfferTemplate() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostOfferTemplate(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::PostOfferTemplateRequest* /*request*/, ::keyapis::subscription::v1::PostOfferTemplateResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestPostOfferTemplate(::grpc::ServerContext* context, ::keyapis::subscription::v1::PostOfferTemplateRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::subscription::v1::PostOfferTemplateResponse>* 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_DeleteOfferTemplate : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_DeleteOfferTemplate() {
      ::grpc::Service::MarkMethodAsync(6);
    }
    ~WithAsyncMethod_DeleteOfferTemplate() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteOfferTemplate(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::DeleteOfferTemplateRequest* /*request*/, ::keyapis::subscription::v1::DeleteOfferTemplateResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestDeleteOfferTemplate(::grpc::ServerContext* context, ::keyapis::subscription::v1::DeleteOfferTemplateRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::subscription::v1::DeleteOfferTemplateResponse>* 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 WithAsyncMethod_PostOfferTemplateRestore : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_PostOfferTemplateRestore() {
      ::grpc::Service::MarkMethodAsync(7);
    }
    ~WithAsyncMethod_PostOfferTemplateRestore() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostOfferTemplateRestore(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest* /*request*/, ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestPostOfferTemplateRestore(::grpc::ServerContext* context, ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(7, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  typedef WithAsyncMethod_GetOfferTemplate<WithAsyncMethod_GetOfferTemplateList<WithAsyncMethod_GetOfferTemplateByOrponList<WithAsyncMethod_GetOfferTemplateCount<WithAsyncMethod_GetOfferTemplateByOrponCount<WithAsyncMethod_PostOfferTemplate<WithAsyncMethod_DeleteOfferTemplate<WithAsyncMethod_PostOfferTemplateRestore<Service > > > > > > > > AsyncService;
  template <class BaseClass>
  class WithCallbackMethod_GetOfferTemplate : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetOfferTemplate() {
      ::grpc::Service::MarkMethodCallback(0,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::subscription::v1::GetOfferTemplateRequest, ::keyapis::subscription::v1::GetOfferTemplateResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::subscription::v1::GetOfferTemplateRequest* request, ::keyapis::subscription::v1::GetOfferTemplateResponse* response) { return this->GetOfferTemplate(context, request, response); }));}
    void SetMessageAllocatorFor_GetOfferTemplate(
        ::grpc::MessageAllocator< ::keyapis::subscription::v1::GetOfferTemplateRequest, ::keyapis::subscription::v1::GetOfferTemplateResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(0);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::subscription::v1::GetOfferTemplateRequest, ::keyapis::subscription::v1::GetOfferTemplateResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetOfferTemplate() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplate(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateRequest* /*request*/, ::keyapis::subscription::v1::GetOfferTemplateResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetOfferTemplate(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateRequest* /*request*/, ::keyapis::subscription::v1::GetOfferTemplateResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetOfferTemplateList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetOfferTemplateList() {
      ::grpc::Service::MarkMethodCallback(1,
          new ::grpc::internal::CallbackServerStreamingHandler< ::keyapis::subscription::v1::GetOfferTemplateListRequest, ::keyapis::subscription::v1::GetOfferTemplateListResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::subscription::v1::GetOfferTemplateListRequest* request) { return this->GetOfferTemplateList(context, request); }));
    }
    ~WithCallbackMethod_GetOfferTemplateList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplateList(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::subscription::v1::GetOfferTemplateListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerWriteReactor< ::keyapis::subscription::v1::GetOfferTemplateListResponse>* GetOfferTemplateList(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateListRequest* /*request*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetOfferTemplateByOrponList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetOfferTemplateByOrponList() {
      ::grpc::Service::MarkMethodCallback(2,
          new ::grpc::internal::CallbackServerStreamingHandler< ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest, ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest* request) { return this->GetOfferTemplateByOrponList(context, request); }));
    }
    ~WithCallbackMethod_GetOfferTemplateByOrponList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplateByOrponList(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerWriteReactor< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>* GetOfferTemplateByOrponList(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest* /*request*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetOfferTemplateCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetOfferTemplateCount() {
      ::grpc::Service::MarkMethodCallback(3,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::subscription::v1::GetOfferTemplateCountRequest, ::keyapis::subscription::v1::GetOfferTemplateCountResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::subscription::v1::GetOfferTemplateCountRequest* request, ::keyapis::subscription::v1::GetOfferTemplateCountResponse* response) { return this->GetOfferTemplateCount(context, request, response); }));}
    void SetMessageAllocatorFor_GetOfferTemplateCount(
        ::grpc::MessageAllocator< ::keyapis::subscription::v1::GetOfferTemplateCountRequest, ::keyapis::subscription::v1::GetOfferTemplateCountResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(3);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::subscription::v1::GetOfferTemplateCountRequest, ::keyapis::subscription::v1::GetOfferTemplateCountResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetOfferTemplateCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplateCount(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateCountRequest* /*request*/, ::keyapis::subscription::v1::GetOfferTemplateCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetOfferTemplateCount(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateCountRequest* /*request*/, ::keyapis::subscription::v1::GetOfferTemplateCountResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetOfferTemplateByOrponCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetOfferTemplateByOrponCount() {
      ::grpc::Service::MarkMethodCallback(4,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest, ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest* request, ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse* response) { return this->GetOfferTemplateByOrponCount(context, request, response); }));}
    void SetMessageAllocatorFor_GetOfferTemplateByOrponCount(
        ::grpc::MessageAllocator< ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest, ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(4);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest, ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetOfferTemplateByOrponCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplateByOrponCount(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest* /*request*/, ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetOfferTemplateByOrponCount(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest* /*request*/, ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_PostOfferTemplate : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_PostOfferTemplate() {
      ::grpc::Service::MarkMethodCallback(5,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::subscription::v1::PostOfferTemplateRequest, ::keyapis::subscription::v1::PostOfferTemplateResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRequest* request, ::keyapis::subscription::v1::PostOfferTemplateResponse* response) { return this->PostOfferTemplate(context, request, response); }));}
    void SetMessageAllocatorFor_PostOfferTemplate(
        ::grpc::MessageAllocator< ::keyapis::subscription::v1::PostOfferTemplateRequest, ::keyapis::subscription::v1::PostOfferTemplateResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(5);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::subscription::v1::PostOfferTemplateRequest, ::keyapis::subscription::v1::PostOfferTemplateResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_PostOfferTemplate() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostOfferTemplate(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::PostOfferTemplateRequest* /*request*/, ::keyapis::subscription::v1::PostOfferTemplateResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* PostOfferTemplate(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::subscription::v1::PostOfferTemplateRequest* /*request*/, ::keyapis::subscription::v1::PostOfferTemplateResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_DeleteOfferTemplate : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_DeleteOfferTemplate() {
      ::grpc::Service::MarkMethodCallback(6,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::subscription::v1::DeleteOfferTemplateRequest, ::keyapis::subscription::v1::DeleteOfferTemplateResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::subscription::v1::DeleteOfferTemplateRequest* request, ::keyapis::subscription::v1::DeleteOfferTemplateResponse* response) { return this->DeleteOfferTemplate(context, request, response); }));}
    void SetMessageAllocatorFor_DeleteOfferTemplate(
        ::grpc::MessageAllocator< ::keyapis::subscription::v1::DeleteOfferTemplateRequest, ::keyapis::subscription::v1::DeleteOfferTemplateResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(6);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::subscription::v1::DeleteOfferTemplateRequest, ::keyapis::subscription::v1::DeleteOfferTemplateResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_DeleteOfferTemplate() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteOfferTemplate(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::DeleteOfferTemplateRequest* /*request*/, ::keyapis::subscription::v1::DeleteOfferTemplateResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* DeleteOfferTemplate(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::subscription::v1::DeleteOfferTemplateRequest* /*request*/, ::keyapis::subscription::v1::DeleteOfferTemplateResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_PostOfferTemplateRestore : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_PostOfferTemplateRestore() {
      ::grpc::Service::MarkMethodCallback(7,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest, ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest* request, ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse* response) { return this->PostOfferTemplateRestore(context, request, response); }));}
    void SetMessageAllocatorFor_PostOfferTemplateRestore(
        ::grpc::MessageAllocator< ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest, ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(7);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest, ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_PostOfferTemplateRestore() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostOfferTemplateRestore(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest* /*request*/, ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* PostOfferTemplateRestore(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest* /*request*/, ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse* /*response*/)  { return nullptr; }
  };
  typedef WithCallbackMethod_GetOfferTemplate<WithCallbackMethod_GetOfferTemplateList<WithCallbackMethod_GetOfferTemplateByOrponList<WithCallbackMethod_GetOfferTemplateCount<WithCallbackMethod_GetOfferTemplateByOrponCount<WithCallbackMethod_PostOfferTemplate<WithCallbackMethod_DeleteOfferTemplate<WithCallbackMethod_PostOfferTemplateRestore<Service > > > > > > > > CallbackService;
  typedef CallbackService ExperimentalCallbackService;
  template <class BaseClass>
  class WithGenericMethod_GetOfferTemplate : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetOfferTemplate() {
      ::grpc::Service::MarkMethodGeneric(0);
    }
    ~WithGenericMethod_GetOfferTemplate() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplate(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateRequest* /*request*/, ::keyapis::subscription::v1::GetOfferTemplateResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetOfferTemplateList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetOfferTemplateList() {
      ::grpc::Service::MarkMethodGeneric(1);
    }
    ~WithGenericMethod_GetOfferTemplateList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplateList(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::subscription::v1::GetOfferTemplateListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetOfferTemplateByOrponList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetOfferTemplateByOrponList() {
      ::grpc::Service::MarkMethodGeneric(2);
    }
    ~WithGenericMethod_GetOfferTemplateByOrponList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplateByOrponList(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetOfferTemplateCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetOfferTemplateCount() {
      ::grpc::Service::MarkMethodGeneric(3);
    }
    ~WithGenericMethod_GetOfferTemplateCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplateCount(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateCountRequest* /*request*/, ::keyapis::subscription::v1::GetOfferTemplateCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetOfferTemplateByOrponCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetOfferTemplateByOrponCount() {
      ::grpc::Service::MarkMethodGeneric(4);
    }
    ~WithGenericMethod_GetOfferTemplateByOrponCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplateByOrponCount(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest* /*request*/, ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_PostOfferTemplate : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_PostOfferTemplate() {
      ::grpc::Service::MarkMethodGeneric(5);
    }
    ~WithGenericMethod_PostOfferTemplate() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostOfferTemplate(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::PostOfferTemplateRequest* /*request*/, ::keyapis::subscription::v1::PostOfferTemplateResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_DeleteOfferTemplate : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_DeleteOfferTemplate() {
      ::grpc::Service::MarkMethodGeneric(6);
    }
    ~WithGenericMethod_DeleteOfferTemplate() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteOfferTemplate(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::DeleteOfferTemplateRequest* /*request*/, ::keyapis::subscription::v1::DeleteOfferTemplateResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_PostOfferTemplateRestore : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_PostOfferTemplateRestore() {
      ::grpc::Service::MarkMethodGeneric(7);
    }
    ~WithGenericMethod_PostOfferTemplateRestore() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostOfferTemplateRestore(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest* /*request*/, ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetOfferTemplate : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetOfferTemplate() {
      ::grpc::Service::MarkMethodRaw(0);
    }
    ~WithRawMethod_GetOfferTemplate() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplate(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateRequest* /*request*/, ::keyapis::subscription::v1::GetOfferTemplateResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetOfferTemplate(::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_GetOfferTemplateList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetOfferTemplateList() {
      ::grpc::Service::MarkMethodRaw(1);
    }
    ~WithRawMethod_GetOfferTemplateList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplateList(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::subscription::v1::GetOfferTemplateListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetOfferTemplateList(::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_GetOfferTemplateByOrponList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetOfferTemplateByOrponList() {
      ::grpc::Service::MarkMethodRaw(2);
    }
    ~WithRawMethod_GetOfferTemplateByOrponList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplateByOrponList(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetOfferTemplateByOrponList(::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(2, context, request, writer, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetOfferTemplateCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetOfferTemplateCount() {
      ::grpc::Service::MarkMethodRaw(3);
    }
    ~WithRawMethod_GetOfferTemplateCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplateCount(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateCountRequest* /*request*/, ::keyapis::subscription::v1::GetOfferTemplateCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetOfferTemplateCount(::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_GetOfferTemplateByOrponCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetOfferTemplateByOrponCount() {
      ::grpc::Service::MarkMethodRaw(4);
    }
    ~WithRawMethod_GetOfferTemplateByOrponCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplateByOrponCount(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest* /*request*/, ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetOfferTemplateByOrponCount(::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_PostOfferTemplate : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_PostOfferTemplate() {
      ::grpc::Service::MarkMethodRaw(5);
    }
    ~WithRawMethod_PostOfferTemplate() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostOfferTemplate(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::PostOfferTemplateRequest* /*request*/, ::keyapis::subscription::v1::PostOfferTemplateResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestPostOfferTemplate(::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_DeleteOfferTemplate : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_DeleteOfferTemplate() {
      ::grpc::Service::MarkMethodRaw(6);
    }
    ~WithRawMethod_DeleteOfferTemplate() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteOfferTemplate(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::DeleteOfferTemplateRequest* /*request*/, ::keyapis::subscription::v1::DeleteOfferTemplateResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestDeleteOfferTemplate(::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 WithRawMethod_PostOfferTemplateRestore : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_PostOfferTemplateRestore() {
      ::grpc::Service::MarkMethodRaw(7);
    }
    ~WithRawMethod_PostOfferTemplateRestore() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostOfferTemplateRestore(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest* /*request*/, ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestPostOfferTemplateRestore(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(7, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetOfferTemplate : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetOfferTemplate() {
      ::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->GetOfferTemplate(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetOfferTemplate() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplate(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateRequest* /*request*/, ::keyapis::subscription::v1::GetOfferTemplateResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetOfferTemplate(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetOfferTemplateList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetOfferTemplateList() {
      ::grpc::Service::MarkMethodRawCallback(1,
          new ::grpc::internal::CallbackServerStreamingHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const::grpc::ByteBuffer* request) { return this->GetOfferTemplateList(context, request); }));
    }
    ~WithRawCallbackMethod_GetOfferTemplateList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplateList(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::subscription::v1::GetOfferTemplateListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerWriteReactor< ::grpc::ByteBuffer>* GetOfferTemplateList(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetOfferTemplateByOrponList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetOfferTemplateByOrponList() {
      ::grpc::Service::MarkMethodRawCallback(2,
          new ::grpc::internal::CallbackServerStreamingHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const::grpc::ByteBuffer* request) { return this->GetOfferTemplateByOrponList(context, request); }));
    }
    ~WithRawCallbackMethod_GetOfferTemplateByOrponList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplateByOrponList(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerWriteReactor< ::grpc::ByteBuffer>* GetOfferTemplateByOrponList(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetOfferTemplateCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetOfferTemplateCount() {
      ::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->GetOfferTemplateCount(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetOfferTemplateCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplateCount(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateCountRequest* /*request*/, ::keyapis::subscription::v1::GetOfferTemplateCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetOfferTemplateCount(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetOfferTemplateByOrponCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetOfferTemplateByOrponCount() {
      ::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->GetOfferTemplateByOrponCount(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetOfferTemplateByOrponCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetOfferTemplateByOrponCount(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest* /*request*/, ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetOfferTemplateByOrponCount(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_PostOfferTemplate : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_PostOfferTemplate() {
      ::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->PostOfferTemplate(context, request, response); }));
    }
    ~WithRawCallbackMethod_PostOfferTemplate() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostOfferTemplate(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::PostOfferTemplateRequest* /*request*/, ::keyapis::subscription::v1::PostOfferTemplateResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* PostOfferTemplate(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_DeleteOfferTemplate : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_DeleteOfferTemplate() {
      ::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->DeleteOfferTemplate(context, request, response); }));
    }
    ~WithRawCallbackMethod_DeleteOfferTemplate() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DeleteOfferTemplate(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::DeleteOfferTemplateRequest* /*request*/, ::keyapis::subscription::v1::DeleteOfferTemplateResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* DeleteOfferTemplate(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_PostOfferTemplateRestore : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_PostOfferTemplateRestore() {
      ::grpc::Service::MarkMethodRawCallback(7,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->PostOfferTemplateRestore(context, request, response); }));
    }
    ~WithRawCallbackMethod_PostOfferTemplateRestore() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostOfferTemplateRestore(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest* /*request*/, ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* PostOfferTemplateRestore(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetOfferTemplate : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetOfferTemplate() {
      ::grpc::Service::MarkMethodStreamed(0,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::subscription::v1::GetOfferTemplateRequest, ::keyapis::subscription::v1::GetOfferTemplateResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::subscription::v1::GetOfferTemplateRequest, ::keyapis::subscription::v1::GetOfferTemplateResponse>* streamer) {
                       return this->StreamedGetOfferTemplate(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetOfferTemplate() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetOfferTemplate(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateRequest* /*request*/, ::keyapis::subscription::v1::GetOfferTemplateResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetOfferTemplate(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::subscription::v1::GetOfferTemplateRequest,::keyapis::subscription::v1::GetOfferTemplateResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetOfferTemplateCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetOfferTemplateCount() {
      ::grpc::Service::MarkMethodStreamed(3,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::subscription::v1::GetOfferTemplateCountRequest, ::keyapis::subscription::v1::GetOfferTemplateCountResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::subscription::v1::GetOfferTemplateCountRequest, ::keyapis::subscription::v1::GetOfferTemplateCountResponse>* streamer) {
                       return this->StreamedGetOfferTemplateCount(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetOfferTemplateCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetOfferTemplateCount(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateCountRequest* /*request*/, ::keyapis::subscription::v1::GetOfferTemplateCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetOfferTemplateCount(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::subscription::v1::GetOfferTemplateCountRequest,::keyapis::subscription::v1::GetOfferTemplateCountResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetOfferTemplateByOrponCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetOfferTemplateByOrponCount() {
      ::grpc::Service::MarkMethodStreamed(4,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest, ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest, ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse>* streamer) {
                       return this->StreamedGetOfferTemplateByOrponCount(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetOfferTemplateByOrponCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetOfferTemplateByOrponCount(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest* /*request*/, ::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetOfferTemplateByOrponCount(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::subscription::v1::GetOfferTemplateByOrponCountRequest,::keyapis::subscription::v1::GetOfferTemplateByOrponCountResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_PostOfferTemplate : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_PostOfferTemplate() {
      ::grpc::Service::MarkMethodStreamed(5,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::subscription::v1::PostOfferTemplateRequest, ::keyapis::subscription::v1::PostOfferTemplateResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::subscription::v1::PostOfferTemplateRequest, ::keyapis::subscription::v1::PostOfferTemplateResponse>* streamer) {
                       return this->StreamedPostOfferTemplate(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_PostOfferTemplate() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status PostOfferTemplate(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::PostOfferTemplateRequest* /*request*/, ::keyapis::subscription::v1::PostOfferTemplateResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedPostOfferTemplate(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::subscription::v1::PostOfferTemplateRequest,::keyapis::subscription::v1::PostOfferTemplateResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_DeleteOfferTemplate : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_DeleteOfferTemplate() {
      ::grpc::Service::MarkMethodStreamed(6,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::subscription::v1::DeleteOfferTemplateRequest, ::keyapis::subscription::v1::DeleteOfferTemplateResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::subscription::v1::DeleteOfferTemplateRequest, ::keyapis::subscription::v1::DeleteOfferTemplateResponse>* streamer) {
                       return this->StreamedDeleteOfferTemplate(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_DeleteOfferTemplate() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status DeleteOfferTemplate(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::DeleteOfferTemplateRequest* /*request*/, ::keyapis::subscription::v1::DeleteOfferTemplateResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedDeleteOfferTemplate(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::subscription::v1::DeleteOfferTemplateRequest,::keyapis::subscription::v1::DeleteOfferTemplateResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_PostOfferTemplateRestore : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_PostOfferTemplateRestore() {
      ::grpc::Service::MarkMethodStreamed(7,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest, ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest, ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse>* streamer) {
                       return this->StreamedPostOfferTemplateRestore(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_PostOfferTemplateRestore() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status PostOfferTemplateRestore(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest* /*request*/, ::keyapis::subscription::v1::PostOfferTemplateRestoreResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedPostOfferTemplateRestore(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::subscription::v1::PostOfferTemplateRestoreRequest,::keyapis::subscription::v1::PostOfferTemplateRestoreResponse>* server_unary_streamer) = 0;
  };
  typedef WithStreamedUnaryMethod_GetOfferTemplate<WithStreamedUnaryMethod_GetOfferTemplateCount<WithStreamedUnaryMethod_GetOfferTemplateByOrponCount<WithStreamedUnaryMethod_PostOfferTemplate<WithStreamedUnaryMethod_DeleteOfferTemplate<WithStreamedUnaryMethod_PostOfferTemplateRestore<Service > > > > > > StreamedUnaryService;
  template <class BaseClass>
  class WithSplitStreamingMethod_GetOfferTemplateList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithSplitStreamingMethod_GetOfferTemplateList() {
      ::grpc::Service::MarkMethodStreamed(1,
        new ::grpc::internal::SplitServerStreamingHandler<
          ::keyapis::subscription::v1::GetOfferTemplateListRequest, ::keyapis::subscription::v1::GetOfferTemplateListResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerSplitStreamer<
                     ::keyapis::subscription::v1::GetOfferTemplateListRequest, ::keyapis::subscription::v1::GetOfferTemplateListResponse>* streamer) {
                       return this->StreamedGetOfferTemplateList(context,
                         streamer);
                  }));
    }
    ~WithSplitStreamingMethod_GetOfferTemplateList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetOfferTemplateList(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::subscription::v1::GetOfferTemplateListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with split streamed
    virtual ::grpc::Status StreamedGetOfferTemplateList(::grpc::ServerContext* context, ::grpc::ServerSplitStreamer< ::keyapis::subscription::v1::GetOfferTemplateListRequest,::keyapis::subscription::v1::GetOfferTemplateListResponse>* server_split_streamer) = 0;
  };
  template <class BaseClass>
  class WithSplitStreamingMethod_GetOfferTemplateByOrponList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithSplitStreamingMethod_GetOfferTemplateByOrponList() {
      ::grpc::Service::MarkMethodStreamed(2,
        new ::grpc::internal::SplitServerStreamingHandler<
          ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest, ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerSplitStreamer<
                     ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest, ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>* streamer) {
                       return this->StreamedGetOfferTemplateByOrponList(context,
                         streamer);
                  }));
    }
    ~WithSplitStreamingMethod_GetOfferTemplateByOrponList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetOfferTemplateByOrponList(::grpc::ServerContext* /*context*/, const ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with split streamed
    virtual ::grpc::Status StreamedGetOfferTemplateByOrponList(::grpc::ServerContext* context, ::grpc::ServerSplitStreamer< ::keyapis::subscription::v1::GetOfferTemplateByOrponListRequest,::keyapis::subscription::v1::GetOfferTemplateByOrponListResponse>* server_split_streamer) = 0;
  };
  typedef WithSplitStreamingMethod_GetOfferTemplateList<WithSplitStreamingMethod_GetOfferTemplateByOrponList<Service > > SplitStreamedService;
  typedef WithStreamedUnaryMethod_GetOfferTemplate<WithSplitStreamingMethod_GetOfferTemplateList<WithSplitStreamingMethod_GetOfferTemplateByOrponList<WithStreamedUnaryMethod_GetOfferTemplateCount<WithStreamedUnaryMethod_GetOfferTemplateByOrponCount<WithStreamedUnaryMethod_PostOfferTemplate<WithStreamedUnaryMethod_DeleteOfferTemplate<WithStreamedUnaryMethod_PostOfferTemplateRestore<Service > > > > > > > > StreamedService;
};

}  // namespace v1
}  // namespace subscription
}  // namespace keyapis


#endif  // GRPC_keyapis_2fsubscription_2fv1_2fkeyapis_5fsubscription_5foffer_5ftemplate_5fv1_2eproto__INCLUDED
