// Generated by the gRPC C++ plugin.
// If you make any local change, they will be lost.
// source: keyapis/banner/v1/keyapis_banner_banner_v1.proto
// Original file comments:
//
// Сервис реализует функционал управления баннерами.
// Используются как источник Критичнх уведомления, White label компаний и объявления рекламных акций
#ifndef GRPC_keyapis_2fbanner_2fv1_2fkeyapis_5fbanner_5fbanner_5fv1_2eproto__INCLUDED
#define GRPC_keyapis_2fbanner_2fv1_2fkeyapis_5fbanner_5fbanner_5fv1_2eproto__INCLUDED

#include "keyapis/banner/v1/keyapis_banner_banner_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 banner {
namespace v1 {

// Сервис управления баннерами
class BannerService final {
 public:
  static constexpr char const* service_full_name() {
    return "keyapis.banner.v1.BannerService";
  }
  class StubInterface {
   public:
    virtual ~StubInterface() {}
    // Метод сохранения баннера.
    // Поддерживает создание и обновление.
    // Метод доступен для: admin, manager, service
    virtual ::grpc::Status PostBanner(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerRequest& request, ::keyapis::banner::v1::PostBannerResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::PostBannerResponse>> AsyncPostBanner(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::PostBannerResponse>>(AsyncPostBannerRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::PostBannerResponse>> PrepareAsyncPostBanner(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::PostBannerResponse>>(PrepareAsyncPostBannerRaw(context, request, cq));
    }
    // Метод получения баннера.
    // Метод доступен для: admin, manager, service
    virtual ::grpc::Status GetBanner(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerRequest& request, ::keyapis::banner::v1::GetBannerResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::GetBannerResponse>> AsyncGetBanner(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::GetBannerResponse>>(AsyncGetBannerRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::GetBannerResponse>> PrepareAsyncGetBanner(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::GetBannerResponse>>(PrepareAsyncGetBannerRaw(context, request, cq));
    }
    // Метод получения упрощённого баннера.
    // Не требует авторизации
    virtual ::grpc::Status GetBannerLite(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteRequest& request, ::keyapis::banner::v1::GetBannerLiteResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::GetBannerLiteResponse>> AsyncGetBannerLite(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::GetBannerLiteResponse>>(AsyncGetBannerLiteRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::GetBannerLiteResponse>> PrepareAsyncGetBannerLite(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::GetBannerLiteResponse>>(PrepareAsyncGetBannerLiteRaw(context, request, cq));
    }
    // Метод получения списка баннеров.
    // Метод доступен для: admin, manager, service
    std::unique_ptr< ::grpc::ClientReaderInterface< ::keyapis::banner::v1::GetBannerListResponse>> GetBannerList(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerListRequest& request) {
      return std::unique_ptr< ::grpc::ClientReaderInterface< ::keyapis::banner::v1::GetBannerListResponse>>(GetBannerListRaw(context, request));
    }
    std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::banner::v1::GetBannerListResponse>> AsyncGetBannerList(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerListRequest& request, ::grpc::CompletionQueue* cq, void* tag) {
      return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::banner::v1::GetBannerListResponse>>(AsyncGetBannerListRaw(context, request, cq, tag));
    }
    std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::banner::v1::GetBannerListResponse>> PrepareAsyncGetBannerList(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::banner::v1::GetBannerListResponse>>(PrepareAsyncGetBannerListRaw(context, request, cq));
    }
    // Метод получения списка упрощённых баннеров.
    // Возвращает всегда активные баннеры.
    // По умолчанию возвращает первые 20 баннеров осортированных по приоритету, затем по дате начала акции(от самых важных к не важным, затем от самых новых акций к самым старым).
    // Если запрос выполнен хотя бы без одного изпризнака приложения возвращает пустой список.
    // Если запрос выполнен без признаков пользователя метод возвращает пустой список.
    // Не требует авторизации
    std::unique_ptr< ::grpc::ClientReaderInterface< ::keyapis::banner::v1::GetBannerLiteListResponse>> GetBannerLiteList(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteListRequest& request) {
      return std::unique_ptr< ::grpc::ClientReaderInterface< ::keyapis::banner::v1::GetBannerLiteListResponse>>(GetBannerLiteListRaw(context, request));
    }
    std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::banner::v1::GetBannerLiteListResponse>> AsyncGetBannerLiteList(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteListRequest& request, ::grpc::CompletionQueue* cq, void* tag) {
      return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::banner::v1::GetBannerLiteListResponse>>(AsyncGetBannerLiteListRaw(context, request, cq, tag));
    }
    std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::banner::v1::GetBannerLiteListResponse>> PrepareAsyncGetBannerLiteList(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::keyapis::banner::v1::GetBannerLiteListResponse>>(PrepareAsyncGetBannerLiteListRaw(context, request, cq));
    }
    // Метод получения количества баннеров.
    // Метод доступен для: admin, manager, service
    virtual ::grpc::Status GetBannerCount(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerCountRequest& request, ::keyapis::banner::v1::GetBannerCountResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::GetBannerCountResponse>> AsyncGetBannerCount(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::GetBannerCountResponse>>(AsyncGetBannerCountRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::GetBannerCountResponse>> PrepareAsyncGetBannerCount(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::GetBannerCountResponse>>(PrepareAsyncGetBannerCountRaw(context, request, cq));
    }
    // Метод загрузки картинки баннера.
    // Метод доступен для: admin, manager, service
    virtual ::grpc::Status PostBannerUploadImage(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerUploadImageRequest& request, ::keyapis::banner::v1::PostBannerUploadImageResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::PostBannerUploadImageResponse>> AsyncPostBannerUploadImage(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerUploadImageRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::PostBannerUploadImageResponse>>(AsyncPostBannerUploadImageRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::PostBannerUploadImageResponse>> PrepareAsyncPostBannerUploadImage(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerUploadImageRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::PostBannerUploadImageResponse>>(PrepareAsyncPostBannerUploadImageRaw(context, request, cq));
    }
    class async_interface {
     public:
      virtual ~async_interface() {}
      // Метод сохранения баннера.
      // Поддерживает создание и обновление.
      // Метод доступен для: admin, manager, service
      virtual void PostBanner(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerRequest* request, ::keyapis::banner::v1::PostBannerResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void PostBanner(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerRequest* request, ::keyapis::banner::v1::PostBannerResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод получения баннера.
      // Метод доступен для: admin, manager, service
      virtual void GetBanner(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerRequest* request, ::keyapis::banner::v1::GetBannerResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetBanner(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerRequest* request, ::keyapis::banner::v1::GetBannerResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод получения упрощённого баннера.
      // Не требует авторизации
      virtual void GetBannerLite(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteRequest* request, ::keyapis::banner::v1::GetBannerLiteResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetBannerLite(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteRequest* request, ::keyapis::banner::v1::GetBannerLiteResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод получения списка баннеров.
      // Метод доступен для: admin, manager, service
      virtual void GetBannerList(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerListRequest* request, ::grpc::ClientReadReactor< ::keyapis::banner::v1::GetBannerListResponse>* reactor) = 0;
      // Метод получения списка упрощённых баннеров.
      // Возвращает всегда активные баннеры.
      // По умолчанию возвращает первые 20 баннеров осортированных по приоритету, затем по дате начала акции(от самых важных к не важным, затем от самых новых акций к самым старым).
      // Если запрос выполнен хотя бы без одного изпризнака приложения возвращает пустой список.
      // Если запрос выполнен без признаков пользователя метод возвращает пустой список.
      // Не требует авторизации
      virtual void GetBannerLiteList(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteListRequest* request, ::grpc::ClientReadReactor< ::keyapis::banner::v1::GetBannerLiteListResponse>* reactor) = 0;
      // Метод получения количества баннеров.
      // Метод доступен для: admin, manager, service
      virtual void GetBannerCount(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerCountRequest* request, ::keyapis::banner::v1::GetBannerCountResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetBannerCount(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerCountRequest* request, ::keyapis::banner::v1::GetBannerCountResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Метод загрузки картинки баннера.
      // Метод доступен для: admin, manager, service
      virtual void PostBannerUploadImage(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerUploadImageRequest* request, ::keyapis::banner::v1::PostBannerUploadImageResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void PostBannerUploadImage(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerUploadImageRequest* request, ::keyapis::banner::v1::PostBannerUploadImageResponse* 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::banner::v1::PostBannerResponse>* AsyncPostBannerRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::PostBannerResponse>* PrepareAsyncPostBannerRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::GetBannerResponse>* AsyncGetBannerRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::GetBannerResponse>* PrepareAsyncGetBannerRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::GetBannerLiteResponse>* AsyncGetBannerLiteRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::GetBannerLiteResponse>* PrepareAsyncGetBannerLiteRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientReaderInterface< ::keyapis::banner::v1::GetBannerListResponse>* GetBannerListRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerListRequest& request) = 0;
    virtual ::grpc::ClientAsyncReaderInterface< ::keyapis::banner::v1::GetBannerListResponse>* AsyncGetBannerListRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerListRequest& request, ::grpc::CompletionQueue* cq, void* tag) = 0;
    virtual ::grpc::ClientAsyncReaderInterface< ::keyapis::banner::v1::GetBannerListResponse>* PrepareAsyncGetBannerListRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerListRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientReaderInterface< ::keyapis::banner::v1::GetBannerLiteListResponse>* GetBannerLiteListRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteListRequest& request) = 0;
    virtual ::grpc::ClientAsyncReaderInterface< ::keyapis::banner::v1::GetBannerLiteListResponse>* AsyncGetBannerLiteListRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteListRequest& request, ::grpc::CompletionQueue* cq, void* tag) = 0;
    virtual ::grpc::ClientAsyncReaderInterface< ::keyapis::banner::v1::GetBannerLiteListResponse>* PrepareAsyncGetBannerLiteListRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteListRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::GetBannerCountResponse>* AsyncGetBannerCountRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerCountRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::GetBannerCountResponse>* PrepareAsyncGetBannerCountRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerCountRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::PostBannerUploadImageResponse>* AsyncPostBannerUploadImageRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerUploadImageRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::keyapis::banner::v1::PostBannerUploadImageResponse>* PrepareAsyncPostBannerUploadImageRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerUploadImageRequest& 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 PostBanner(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerRequest& request, ::keyapis::banner::v1::PostBannerResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::PostBannerResponse>> AsyncPostBanner(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::PostBannerResponse>>(AsyncPostBannerRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::PostBannerResponse>> PrepareAsyncPostBanner(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::PostBannerResponse>>(PrepareAsyncPostBannerRaw(context, request, cq));
    }
    ::grpc::Status GetBanner(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerRequest& request, ::keyapis::banner::v1::GetBannerResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::GetBannerResponse>> AsyncGetBanner(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::GetBannerResponse>>(AsyncGetBannerRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::GetBannerResponse>> PrepareAsyncGetBanner(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::GetBannerResponse>>(PrepareAsyncGetBannerRaw(context, request, cq));
    }
    ::grpc::Status GetBannerLite(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteRequest& request, ::keyapis::banner::v1::GetBannerLiteResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::GetBannerLiteResponse>> AsyncGetBannerLite(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::GetBannerLiteResponse>>(AsyncGetBannerLiteRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::GetBannerLiteResponse>> PrepareAsyncGetBannerLite(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::GetBannerLiteResponse>>(PrepareAsyncGetBannerLiteRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientReader< ::keyapis::banner::v1::GetBannerListResponse>> GetBannerList(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerListRequest& request) {
      return std::unique_ptr< ::grpc::ClientReader< ::keyapis::banner::v1::GetBannerListResponse>>(GetBannerListRaw(context, request));
    }
    std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::banner::v1::GetBannerListResponse>> AsyncGetBannerList(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerListRequest& request, ::grpc::CompletionQueue* cq, void* tag) {
      return std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::banner::v1::GetBannerListResponse>>(AsyncGetBannerListRaw(context, request, cq, tag));
    }
    std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::banner::v1::GetBannerListResponse>> PrepareAsyncGetBannerList(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::banner::v1::GetBannerListResponse>>(PrepareAsyncGetBannerListRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientReader< ::keyapis::banner::v1::GetBannerLiteListResponse>> GetBannerLiteList(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteListRequest& request) {
      return std::unique_ptr< ::grpc::ClientReader< ::keyapis::banner::v1::GetBannerLiteListResponse>>(GetBannerLiteListRaw(context, request));
    }
    std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::banner::v1::GetBannerLiteListResponse>> AsyncGetBannerLiteList(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteListRequest& request, ::grpc::CompletionQueue* cq, void* tag) {
      return std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::banner::v1::GetBannerLiteListResponse>>(AsyncGetBannerLiteListRaw(context, request, cq, tag));
    }
    std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::banner::v1::GetBannerLiteListResponse>> PrepareAsyncGetBannerLiteList(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteListRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncReader< ::keyapis::banner::v1::GetBannerLiteListResponse>>(PrepareAsyncGetBannerLiteListRaw(context, request, cq));
    }
    ::grpc::Status GetBannerCount(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerCountRequest& request, ::keyapis::banner::v1::GetBannerCountResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::GetBannerCountResponse>> AsyncGetBannerCount(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::GetBannerCountResponse>>(AsyncGetBannerCountRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::GetBannerCountResponse>> PrepareAsyncGetBannerCount(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerCountRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::GetBannerCountResponse>>(PrepareAsyncGetBannerCountRaw(context, request, cq));
    }
    ::grpc::Status PostBannerUploadImage(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerUploadImageRequest& request, ::keyapis::banner::v1::PostBannerUploadImageResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::PostBannerUploadImageResponse>> AsyncPostBannerUploadImage(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerUploadImageRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::PostBannerUploadImageResponse>>(AsyncPostBannerUploadImageRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::PostBannerUploadImageResponse>> PrepareAsyncPostBannerUploadImage(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerUploadImageRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::PostBannerUploadImageResponse>>(PrepareAsyncPostBannerUploadImageRaw(context, request, cq));
    }
    class async final :
      public StubInterface::async_interface {
     public:
      void PostBanner(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerRequest* request, ::keyapis::banner::v1::PostBannerResponse* response, std::function<void(::grpc::Status)>) override;
      void PostBanner(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerRequest* request, ::keyapis::banner::v1::PostBannerResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetBanner(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerRequest* request, ::keyapis::banner::v1::GetBannerResponse* response, std::function<void(::grpc::Status)>) override;
      void GetBanner(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerRequest* request, ::keyapis::banner::v1::GetBannerResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetBannerLite(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteRequest* request, ::keyapis::banner::v1::GetBannerLiteResponse* response, std::function<void(::grpc::Status)>) override;
      void GetBannerLite(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteRequest* request, ::keyapis::banner::v1::GetBannerLiteResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetBannerList(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerListRequest* request, ::grpc::ClientReadReactor< ::keyapis::banner::v1::GetBannerListResponse>* reactor) override;
      void GetBannerLiteList(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteListRequest* request, ::grpc::ClientReadReactor< ::keyapis::banner::v1::GetBannerLiteListResponse>* reactor) override;
      void GetBannerCount(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerCountRequest* request, ::keyapis::banner::v1::GetBannerCountResponse* response, std::function<void(::grpc::Status)>) override;
      void GetBannerCount(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerCountRequest* request, ::keyapis::banner::v1::GetBannerCountResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void PostBannerUploadImage(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerUploadImageRequest* request, ::keyapis::banner::v1::PostBannerUploadImageResponse* response, std::function<void(::grpc::Status)>) override;
      void PostBannerUploadImage(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerUploadImageRequest* request, ::keyapis::banner::v1::PostBannerUploadImageResponse* 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::banner::v1::PostBannerResponse>* AsyncPostBannerRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::PostBannerResponse>* PrepareAsyncPostBannerRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::GetBannerResponse>* AsyncGetBannerRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::GetBannerResponse>* PrepareAsyncGetBannerRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::GetBannerLiteResponse>* AsyncGetBannerLiteRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::GetBannerLiteResponse>* PrepareAsyncGetBannerLiteRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientReader< ::keyapis::banner::v1::GetBannerListResponse>* GetBannerListRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerListRequest& request) override;
    ::grpc::ClientAsyncReader< ::keyapis::banner::v1::GetBannerListResponse>* AsyncGetBannerListRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerListRequest& request, ::grpc::CompletionQueue* cq, void* tag) override;
    ::grpc::ClientAsyncReader< ::keyapis::banner::v1::GetBannerListResponse>* PrepareAsyncGetBannerListRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerListRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientReader< ::keyapis::banner::v1::GetBannerLiteListResponse>* GetBannerLiteListRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteListRequest& request) override;
    ::grpc::ClientAsyncReader< ::keyapis::banner::v1::GetBannerLiteListResponse>* AsyncGetBannerLiteListRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteListRequest& request, ::grpc::CompletionQueue* cq, void* tag) override;
    ::grpc::ClientAsyncReader< ::keyapis::banner::v1::GetBannerLiteListResponse>* PrepareAsyncGetBannerLiteListRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerLiteListRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::GetBannerCountResponse>* AsyncGetBannerCountRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerCountRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::GetBannerCountResponse>* PrepareAsyncGetBannerCountRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::GetBannerCountRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::PostBannerUploadImageResponse>* AsyncPostBannerUploadImageRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerUploadImageRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::keyapis::banner::v1::PostBannerUploadImageResponse>* PrepareAsyncPostBannerUploadImageRaw(::grpc::ClientContext* context, const ::keyapis::banner::v1::PostBannerUploadImageRequest& request, ::grpc::CompletionQueue* cq) override;
    const ::grpc::internal::RpcMethod rpcmethod_PostBanner_;
    const ::grpc::internal::RpcMethod rpcmethod_GetBanner_;
    const ::grpc::internal::RpcMethod rpcmethod_GetBannerLite_;
    const ::grpc::internal::RpcMethod rpcmethod_GetBannerList_;
    const ::grpc::internal::RpcMethod rpcmethod_GetBannerLiteList_;
    const ::grpc::internal::RpcMethod rpcmethod_GetBannerCount_;
    const ::grpc::internal::RpcMethod rpcmethod_PostBannerUploadImage_;
  };
  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();
    // Метод сохранения баннера.
    // Поддерживает создание и обновление.
    // Метод доступен для: admin, manager, service
    virtual ::grpc::Status PostBanner(::grpc::ServerContext* context, const ::keyapis::banner::v1::PostBannerRequest* request, ::keyapis::banner::v1::PostBannerResponse* response);
    // Метод получения баннера.
    // Метод доступен для: admin, manager, service
    virtual ::grpc::Status GetBanner(::grpc::ServerContext* context, const ::keyapis::banner::v1::GetBannerRequest* request, ::keyapis::banner::v1::GetBannerResponse* response);
    // Метод получения упрощённого баннера.
    // Не требует авторизации
    virtual ::grpc::Status GetBannerLite(::grpc::ServerContext* context, const ::keyapis::banner::v1::GetBannerLiteRequest* request, ::keyapis::banner::v1::GetBannerLiteResponse* response);
    // Метод получения списка баннеров.
    // Метод доступен для: admin, manager, service
    virtual ::grpc::Status GetBannerList(::grpc::ServerContext* context, const ::keyapis::banner::v1::GetBannerListRequest* request, ::grpc::ServerWriter< ::keyapis::banner::v1::GetBannerListResponse>* writer);
    // Метод получения списка упрощённых баннеров.
    // Возвращает всегда активные баннеры.
    // По умолчанию возвращает первые 20 баннеров осортированных по приоритету, затем по дате начала акции(от самых важных к не важным, затем от самых новых акций к самым старым).
    // Если запрос выполнен хотя бы без одного изпризнака приложения возвращает пустой список.
    // Если запрос выполнен без признаков пользователя метод возвращает пустой список.
    // Не требует авторизации
    virtual ::grpc::Status GetBannerLiteList(::grpc::ServerContext* context, const ::keyapis::banner::v1::GetBannerLiteListRequest* request, ::grpc::ServerWriter< ::keyapis::banner::v1::GetBannerLiteListResponse>* writer);
    // Метод получения количества баннеров.
    // Метод доступен для: admin, manager, service
    virtual ::grpc::Status GetBannerCount(::grpc::ServerContext* context, const ::keyapis::banner::v1::GetBannerCountRequest* request, ::keyapis::banner::v1::GetBannerCountResponse* response);
    // Метод загрузки картинки баннера.
    // Метод доступен для: admin, manager, service
    virtual ::grpc::Status PostBannerUploadImage(::grpc::ServerContext* context, const ::keyapis::banner::v1::PostBannerUploadImageRequest* request, ::keyapis::banner::v1::PostBannerUploadImageResponse* response);
  };
  template <class BaseClass>
  class WithAsyncMethod_PostBanner : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_PostBanner() {
      ::grpc::Service::MarkMethodAsync(0);
    }
    ~WithAsyncMethod_PostBanner() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostBanner(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::PostBannerRequest* /*request*/, ::keyapis::banner::v1::PostBannerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestPostBanner(::grpc::ServerContext* context, ::keyapis::banner::v1::PostBannerRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::banner::v1::PostBannerResponse>* 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_GetBanner : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetBanner() {
      ::grpc::Service::MarkMethodAsync(1);
    }
    ~WithAsyncMethod_GetBanner() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBanner(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerRequest* /*request*/, ::keyapis::banner::v1::GetBannerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetBanner(::grpc::ServerContext* context, ::keyapis::banner::v1::GetBannerRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::banner::v1::GetBannerResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(1, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_GetBannerLite : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetBannerLite() {
      ::grpc::Service::MarkMethodAsync(2);
    }
    ~WithAsyncMethod_GetBannerLite() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBannerLite(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerLiteRequest* /*request*/, ::keyapis::banner::v1::GetBannerLiteResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetBannerLite(::grpc::ServerContext* context, ::keyapis::banner::v1::GetBannerLiteRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::banner::v1::GetBannerLiteResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(2, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_GetBannerList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetBannerList() {
      ::grpc::Service::MarkMethodAsync(3);
    }
    ~WithAsyncMethod_GetBannerList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBannerList(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::banner::v1::GetBannerListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetBannerList(::grpc::ServerContext* context, ::keyapis::banner::v1::GetBannerListRequest* request, ::grpc::ServerAsyncWriter< ::keyapis::banner::v1::GetBannerListResponse>* writer, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncServerStreaming(3, context, request, writer, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_GetBannerLiteList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetBannerLiteList() {
      ::grpc::Service::MarkMethodAsync(4);
    }
    ~WithAsyncMethod_GetBannerLiteList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBannerLiteList(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerLiteListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::banner::v1::GetBannerLiteListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetBannerLiteList(::grpc::ServerContext* context, ::keyapis::banner::v1::GetBannerLiteListRequest* request, ::grpc::ServerAsyncWriter< ::keyapis::banner::v1::GetBannerLiteListResponse>* writer, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncServerStreaming(4, context, request, writer, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_GetBannerCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetBannerCount() {
      ::grpc::Service::MarkMethodAsync(5);
    }
    ~WithAsyncMethod_GetBannerCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBannerCount(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerCountRequest* /*request*/, ::keyapis::banner::v1::GetBannerCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetBannerCount(::grpc::ServerContext* context, ::keyapis::banner::v1::GetBannerCountRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::banner::v1::GetBannerCountResponse>* 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_PostBannerUploadImage : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_PostBannerUploadImage() {
      ::grpc::Service::MarkMethodAsync(6);
    }
    ~WithAsyncMethod_PostBannerUploadImage() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostBannerUploadImage(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::PostBannerUploadImageRequest* /*request*/, ::keyapis::banner::v1::PostBannerUploadImageResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestPostBannerUploadImage(::grpc::ServerContext* context, ::keyapis::banner::v1::PostBannerUploadImageRequest* request, ::grpc::ServerAsyncResponseWriter< ::keyapis::banner::v1::PostBannerUploadImageResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(6, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  typedef WithAsyncMethod_PostBanner<WithAsyncMethod_GetBanner<WithAsyncMethod_GetBannerLite<WithAsyncMethod_GetBannerList<WithAsyncMethod_GetBannerLiteList<WithAsyncMethod_GetBannerCount<WithAsyncMethod_PostBannerUploadImage<Service > > > > > > > AsyncService;
  template <class BaseClass>
  class WithCallbackMethod_PostBanner : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_PostBanner() {
      ::grpc::Service::MarkMethodCallback(0,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::banner::v1::PostBannerRequest, ::keyapis::banner::v1::PostBannerResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::banner::v1::PostBannerRequest* request, ::keyapis::banner::v1::PostBannerResponse* response) { return this->PostBanner(context, request, response); }));}
    void SetMessageAllocatorFor_PostBanner(
        ::grpc::MessageAllocator< ::keyapis::banner::v1::PostBannerRequest, ::keyapis::banner::v1::PostBannerResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(0);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::banner::v1::PostBannerRequest, ::keyapis::banner::v1::PostBannerResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_PostBanner() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostBanner(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::PostBannerRequest* /*request*/, ::keyapis::banner::v1::PostBannerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* PostBanner(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::banner::v1::PostBannerRequest* /*request*/, ::keyapis::banner::v1::PostBannerResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetBanner : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetBanner() {
      ::grpc::Service::MarkMethodCallback(1,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::banner::v1::GetBannerRequest, ::keyapis::banner::v1::GetBannerResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::banner::v1::GetBannerRequest* request, ::keyapis::banner::v1::GetBannerResponse* response) { return this->GetBanner(context, request, response); }));}
    void SetMessageAllocatorFor_GetBanner(
        ::grpc::MessageAllocator< ::keyapis::banner::v1::GetBannerRequest, ::keyapis::banner::v1::GetBannerResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(1);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::banner::v1::GetBannerRequest, ::keyapis::banner::v1::GetBannerResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetBanner() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBanner(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerRequest* /*request*/, ::keyapis::banner::v1::GetBannerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetBanner(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerRequest* /*request*/, ::keyapis::banner::v1::GetBannerResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetBannerLite : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetBannerLite() {
      ::grpc::Service::MarkMethodCallback(2,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::banner::v1::GetBannerLiteRequest, ::keyapis::banner::v1::GetBannerLiteResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::banner::v1::GetBannerLiteRequest* request, ::keyapis::banner::v1::GetBannerLiteResponse* response) { return this->GetBannerLite(context, request, response); }));}
    void SetMessageAllocatorFor_GetBannerLite(
        ::grpc::MessageAllocator< ::keyapis::banner::v1::GetBannerLiteRequest, ::keyapis::banner::v1::GetBannerLiteResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(2);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::banner::v1::GetBannerLiteRequest, ::keyapis::banner::v1::GetBannerLiteResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetBannerLite() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBannerLite(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerLiteRequest* /*request*/, ::keyapis::banner::v1::GetBannerLiteResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetBannerLite(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerLiteRequest* /*request*/, ::keyapis::banner::v1::GetBannerLiteResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetBannerList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetBannerList() {
      ::grpc::Service::MarkMethodCallback(3,
          new ::grpc::internal::CallbackServerStreamingHandler< ::keyapis::banner::v1::GetBannerListRequest, ::keyapis::banner::v1::GetBannerListResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::banner::v1::GetBannerListRequest* request) { return this->GetBannerList(context, request); }));
    }
    ~WithCallbackMethod_GetBannerList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBannerList(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::banner::v1::GetBannerListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerWriteReactor< ::keyapis::banner::v1::GetBannerListResponse>* GetBannerList(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerListRequest* /*request*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetBannerLiteList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetBannerLiteList() {
      ::grpc::Service::MarkMethodCallback(4,
          new ::grpc::internal::CallbackServerStreamingHandler< ::keyapis::banner::v1::GetBannerLiteListRequest, ::keyapis::banner::v1::GetBannerLiteListResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::banner::v1::GetBannerLiteListRequest* request) { return this->GetBannerLiteList(context, request); }));
    }
    ~WithCallbackMethod_GetBannerLiteList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBannerLiteList(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerLiteListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::banner::v1::GetBannerLiteListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerWriteReactor< ::keyapis::banner::v1::GetBannerLiteListResponse>* GetBannerLiteList(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerLiteListRequest* /*request*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetBannerCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetBannerCount() {
      ::grpc::Service::MarkMethodCallback(5,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::banner::v1::GetBannerCountRequest, ::keyapis::banner::v1::GetBannerCountResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::banner::v1::GetBannerCountRequest* request, ::keyapis::banner::v1::GetBannerCountResponse* response) { return this->GetBannerCount(context, request, response); }));}
    void SetMessageAllocatorFor_GetBannerCount(
        ::grpc::MessageAllocator< ::keyapis::banner::v1::GetBannerCountRequest, ::keyapis::banner::v1::GetBannerCountResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(5);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::banner::v1::GetBannerCountRequest, ::keyapis::banner::v1::GetBannerCountResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetBannerCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBannerCount(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerCountRequest* /*request*/, ::keyapis::banner::v1::GetBannerCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetBannerCount(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerCountRequest* /*request*/, ::keyapis::banner::v1::GetBannerCountResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_PostBannerUploadImage : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_PostBannerUploadImage() {
      ::grpc::Service::MarkMethodCallback(6,
          new ::grpc::internal::CallbackUnaryHandler< ::keyapis::banner::v1::PostBannerUploadImageRequest, ::keyapis::banner::v1::PostBannerUploadImageResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::keyapis::banner::v1::PostBannerUploadImageRequest* request, ::keyapis::banner::v1::PostBannerUploadImageResponse* response) { return this->PostBannerUploadImage(context, request, response); }));}
    void SetMessageAllocatorFor_PostBannerUploadImage(
        ::grpc::MessageAllocator< ::keyapis::banner::v1::PostBannerUploadImageRequest, ::keyapis::banner::v1::PostBannerUploadImageResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(6);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::keyapis::banner::v1::PostBannerUploadImageRequest, ::keyapis::banner::v1::PostBannerUploadImageResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_PostBannerUploadImage() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostBannerUploadImage(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::PostBannerUploadImageRequest* /*request*/, ::keyapis::banner::v1::PostBannerUploadImageResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* PostBannerUploadImage(
      ::grpc::CallbackServerContext* /*context*/, const ::keyapis::banner::v1::PostBannerUploadImageRequest* /*request*/, ::keyapis::banner::v1::PostBannerUploadImageResponse* /*response*/)  { return nullptr; }
  };
  typedef WithCallbackMethod_PostBanner<WithCallbackMethod_GetBanner<WithCallbackMethod_GetBannerLite<WithCallbackMethod_GetBannerList<WithCallbackMethod_GetBannerLiteList<WithCallbackMethod_GetBannerCount<WithCallbackMethod_PostBannerUploadImage<Service > > > > > > > CallbackService;
  typedef CallbackService ExperimentalCallbackService;
  template <class BaseClass>
  class WithGenericMethod_PostBanner : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_PostBanner() {
      ::grpc::Service::MarkMethodGeneric(0);
    }
    ~WithGenericMethod_PostBanner() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostBanner(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::PostBannerRequest* /*request*/, ::keyapis::banner::v1::PostBannerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetBanner : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetBanner() {
      ::grpc::Service::MarkMethodGeneric(1);
    }
    ~WithGenericMethod_GetBanner() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBanner(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerRequest* /*request*/, ::keyapis::banner::v1::GetBannerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetBannerLite : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetBannerLite() {
      ::grpc::Service::MarkMethodGeneric(2);
    }
    ~WithGenericMethod_GetBannerLite() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBannerLite(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerLiteRequest* /*request*/, ::keyapis::banner::v1::GetBannerLiteResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetBannerList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetBannerList() {
      ::grpc::Service::MarkMethodGeneric(3);
    }
    ~WithGenericMethod_GetBannerList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBannerList(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::banner::v1::GetBannerListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetBannerLiteList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetBannerLiteList() {
      ::grpc::Service::MarkMethodGeneric(4);
    }
    ~WithGenericMethod_GetBannerLiteList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBannerLiteList(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerLiteListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::banner::v1::GetBannerLiteListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetBannerCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetBannerCount() {
      ::grpc::Service::MarkMethodGeneric(5);
    }
    ~WithGenericMethod_GetBannerCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBannerCount(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerCountRequest* /*request*/, ::keyapis::banner::v1::GetBannerCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_PostBannerUploadImage : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_PostBannerUploadImage() {
      ::grpc::Service::MarkMethodGeneric(6);
    }
    ~WithGenericMethod_PostBannerUploadImage() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostBannerUploadImage(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::PostBannerUploadImageRequest* /*request*/, ::keyapis::banner::v1::PostBannerUploadImageResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithRawMethod_PostBanner : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_PostBanner() {
      ::grpc::Service::MarkMethodRaw(0);
    }
    ~WithRawMethod_PostBanner() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostBanner(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::PostBannerRequest* /*request*/, ::keyapis::banner::v1::PostBannerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestPostBanner(::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_GetBanner : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetBanner() {
      ::grpc::Service::MarkMethodRaw(1);
    }
    ~WithRawMethod_GetBanner() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBanner(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerRequest* /*request*/, ::keyapis::banner::v1::GetBannerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetBanner(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(1, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetBannerLite : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetBannerLite() {
      ::grpc::Service::MarkMethodRaw(2);
    }
    ~WithRawMethod_GetBannerLite() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBannerLite(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerLiteRequest* /*request*/, ::keyapis::banner::v1::GetBannerLiteResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetBannerLite(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(2, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetBannerList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetBannerList() {
      ::grpc::Service::MarkMethodRaw(3);
    }
    ~WithRawMethod_GetBannerList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBannerList(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::banner::v1::GetBannerListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetBannerList(::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(3, context, request, writer, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetBannerLiteList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetBannerLiteList() {
      ::grpc::Service::MarkMethodRaw(4);
    }
    ~WithRawMethod_GetBannerLiteList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBannerLiteList(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerLiteListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::banner::v1::GetBannerLiteListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetBannerLiteList(::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(4, context, request, writer, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetBannerCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetBannerCount() {
      ::grpc::Service::MarkMethodRaw(5);
    }
    ~WithRawMethod_GetBannerCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBannerCount(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerCountRequest* /*request*/, ::keyapis::banner::v1::GetBannerCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetBannerCount(::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_PostBannerUploadImage : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_PostBannerUploadImage() {
      ::grpc::Service::MarkMethodRaw(6);
    }
    ~WithRawMethod_PostBannerUploadImage() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostBannerUploadImage(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::PostBannerUploadImageRequest* /*request*/, ::keyapis::banner::v1::PostBannerUploadImageResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestPostBannerUploadImage(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(6, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_PostBanner : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_PostBanner() {
      ::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->PostBanner(context, request, response); }));
    }
    ~WithRawCallbackMethod_PostBanner() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostBanner(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::PostBannerRequest* /*request*/, ::keyapis::banner::v1::PostBannerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* PostBanner(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetBanner : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetBanner() {
      ::grpc::Service::MarkMethodRawCallback(1,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->GetBanner(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetBanner() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBanner(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerRequest* /*request*/, ::keyapis::banner::v1::GetBannerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetBanner(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetBannerLite : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetBannerLite() {
      ::grpc::Service::MarkMethodRawCallback(2,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->GetBannerLite(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetBannerLite() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBannerLite(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerLiteRequest* /*request*/, ::keyapis::banner::v1::GetBannerLiteResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetBannerLite(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetBannerList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetBannerList() {
      ::grpc::Service::MarkMethodRawCallback(3,
          new ::grpc::internal::CallbackServerStreamingHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const::grpc::ByteBuffer* request) { return this->GetBannerList(context, request); }));
    }
    ~WithRawCallbackMethod_GetBannerList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBannerList(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::banner::v1::GetBannerListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerWriteReactor< ::grpc::ByteBuffer>* GetBannerList(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetBannerLiteList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetBannerLiteList() {
      ::grpc::Service::MarkMethodRawCallback(4,
          new ::grpc::internal::CallbackServerStreamingHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const::grpc::ByteBuffer* request) { return this->GetBannerLiteList(context, request); }));
    }
    ~WithRawCallbackMethod_GetBannerLiteList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBannerLiteList(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerLiteListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::banner::v1::GetBannerLiteListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerWriteReactor< ::grpc::ByteBuffer>* GetBannerLiteList(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetBannerCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetBannerCount() {
      ::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->GetBannerCount(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetBannerCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetBannerCount(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerCountRequest* /*request*/, ::keyapis::banner::v1::GetBannerCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetBannerCount(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_PostBannerUploadImage : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_PostBannerUploadImage() {
      ::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->PostBannerUploadImage(context, request, response); }));
    }
    ~WithRawCallbackMethod_PostBannerUploadImage() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status PostBannerUploadImage(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::PostBannerUploadImageRequest* /*request*/, ::keyapis::banner::v1::PostBannerUploadImageResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* PostBannerUploadImage(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_PostBanner : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_PostBanner() {
      ::grpc::Service::MarkMethodStreamed(0,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::banner::v1::PostBannerRequest, ::keyapis::banner::v1::PostBannerResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::banner::v1::PostBannerRequest, ::keyapis::banner::v1::PostBannerResponse>* streamer) {
                       return this->StreamedPostBanner(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_PostBanner() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status PostBanner(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::PostBannerRequest* /*request*/, ::keyapis::banner::v1::PostBannerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedPostBanner(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::banner::v1::PostBannerRequest,::keyapis::banner::v1::PostBannerResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetBanner : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetBanner() {
      ::grpc::Service::MarkMethodStreamed(1,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::banner::v1::GetBannerRequest, ::keyapis::banner::v1::GetBannerResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::banner::v1::GetBannerRequest, ::keyapis::banner::v1::GetBannerResponse>* streamer) {
                       return this->StreamedGetBanner(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetBanner() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetBanner(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerRequest* /*request*/, ::keyapis::banner::v1::GetBannerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetBanner(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::banner::v1::GetBannerRequest,::keyapis::banner::v1::GetBannerResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetBannerLite : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetBannerLite() {
      ::grpc::Service::MarkMethodStreamed(2,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::banner::v1::GetBannerLiteRequest, ::keyapis::banner::v1::GetBannerLiteResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::banner::v1::GetBannerLiteRequest, ::keyapis::banner::v1::GetBannerLiteResponse>* streamer) {
                       return this->StreamedGetBannerLite(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetBannerLite() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetBannerLite(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerLiteRequest* /*request*/, ::keyapis::banner::v1::GetBannerLiteResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetBannerLite(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::banner::v1::GetBannerLiteRequest,::keyapis::banner::v1::GetBannerLiteResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetBannerCount : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetBannerCount() {
      ::grpc::Service::MarkMethodStreamed(5,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::banner::v1::GetBannerCountRequest, ::keyapis::banner::v1::GetBannerCountResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::banner::v1::GetBannerCountRequest, ::keyapis::banner::v1::GetBannerCountResponse>* streamer) {
                       return this->StreamedGetBannerCount(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetBannerCount() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetBannerCount(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerCountRequest* /*request*/, ::keyapis::banner::v1::GetBannerCountResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetBannerCount(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::banner::v1::GetBannerCountRequest,::keyapis::banner::v1::GetBannerCountResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_PostBannerUploadImage : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_PostBannerUploadImage() {
      ::grpc::Service::MarkMethodStreamed(6,
        new ::grpc::internal::StreamedUnaryHandler<
          ::keyapis::banner::v1::PostBannerUploadImageRequest, ::keyapis::banner::v1::PostBannerUploadImageResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::keyapis::banner::v1::PostBannerUploadImageRequest, ::keyapis::banner::v1::PostBannerUploadImageResponse>* streamer) {
                       return this->StreamedPostBannerUploadImage(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_PostBannerUploadImage() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status PostBannerUploadImage(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::PostBannerUploadImageRequest* /*request*/, ::keyapis::banner::v1::PostBannerUploadImageResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedPostBannerUploadImage(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::keyapis::banner::v1::PostBannerUploadImageRequest,::keyapis::banner::v1::PostBannerUploadImageResponse>* server_unary_streamer) = 0;
  };
  typedef WithStreamedUnaryMethod_PostBanner<WithStreamedUnaryMethod_GetBanner<WithStreamedUnaryMethod_GetBannerLite<WithStreamedUnaryMethod_GetBannerCount<WithStreamedUnaryMethod_PostBannerUploadImage<Service > > > > > StreamedUnaryService;
  template <class BaseClass>
  class WithSplitStreamingMethod_GetBannerList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithSplitStreamingMethod_GetBannerList() {
      ::grpc::Service::MarkMethodStreamed(3,
        new ::grpc::internal::SplitServerStreamingHandler<
          ::keyapis::banner::v1::GetBannerListRequest, ::keyapis::banner::v1::GetBannerListResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerSplitStreamer<
                     ::keyapis::banner::v1::GetBannerListRequest, ::keyapis::banner::v1::GetBannerListResponse>* streamer) {
                       return this->StreamedGetBannerList(context,
                         streamer);
                  }));
    }
    ~WithSplitStreamingMethod_GetBannerList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetBannerList(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::banner::v1::GetBannerListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with split streamed
    virtual ::grpc::Status StreamedGetBannerList(::grpc::ServerContext* context, ::grpc::ServerSplitStreamer< ::keyapis::banner::v1::GetBannerListRequest,::keyapis::banner::v1::GetBannerListResponse>* server_split_streamer) = 0;
  };
  template <class BaseClass>
  class WithSplitStreamingMethod_GetBannerLiteList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithSplitStreamingMethod_GetBannerLiteList() {
      ::grpc::Service::MarkMethodStreamed(4,
        new ::grpc::internal::SplitServerStreamingHandler<
          ::keyapis::banner::v1::GetBannerLiteListRequest, ::keyapis::banner::v1::GetBannerLiteListResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerSplitStreamer<
                     ::keyapis::banner::v1::GetBannerLiteListRequest, ::keyapis::banner::v1::GetBannerLiteListResponse>* streamer) {
                       return this->StreamedGetBannerLiteList(context,
                         streamer);
                  }));
    }
    ~WithSplitStreamingMethod_GetBannerLiteList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetBannerLiteList(::grpc::ServerContext* /*context*/, const ::keyapis::banner::v1::GetBannerLiteListRequest* /*request*/, ::grpc::ServerWriter< ::keyapis::banner::v1::GetBannerLiteListResponse>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with split streamed
    virtual ::grpc::Status StreamedGetBannerLiteList(::grpc::ServerContext* context, ::grpc::ServerSplitStreamer< ::keyapis::banner::v1::GetBannerLiteListRequest,::keyapis::banner::v1::GetBannerLiteListResponse>* server_split_streamer) = 0;
  };
  typedef WithSplitStreamingMethod_GetBannerList<WithSplitStreamingMethod_GetBannerLiteList<Service > > SplitStreamedService;
  typedef WithStreamedUnaryMethod_PostBanner<WithStreamedUnaryMethod_GetBanner<WithStreamedUnaryMethod_GetBannerLite<WithSplitStreamingMethod_GetBannerList<WithSplitStreamingMethod_GetBannerLiteList<WithStreamedUnaryMethod_GetBannerCount<WithStreamedUnaryMethod_PostBannerUploadImage<Service > > > > > > > StreamedService;
};

}  // namespace v1
}  // namespace banner
}  // namespace keyapis


#endif  // GRPC_keyapis_2fbanner_2fv1_2fkeyapis_5fbanner_5fbanner_5fv1_2eproto__INCLUDED
