// Generated by the gRPC C++ plugin.
// If you make any local change, they will be lost.
// source: keyapis/access_management/v1/keyapis_access_management_template_v1.proto

#include "keyapis/access_management/v1/keyapis_access_management_template_v1.pb.h"
#include "keyapis/access_management/v1/keyapis_access_management_template_v1.grpc.pb.h"

#include <functional>
#include <grpcpp/impl/codegen/async_stream.h>
#include <grpcpp/impl/codegen/async_unary_call.h>
#include <grpcpp/impl/codegen/channel_interface.h>
#include <grpcpp/impl/codegen/client_unary_call.h>
#include <grpcpp/impl/codegen/client_callback.h>
#include <grpcpp/impl/codegen/message_allocator.h>
#include <grpcpp/impl/codegen/method_handler.h>
#include <grpcpp/impl/codegen/rpc_service_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/sync_stream.h>
namespace keyapis {
namespace access_management {
namespace v1 {

static const char* GroupTemplateService_method_names[] = {
  "/keyapis.access_management.v1.GroupTemplateService/GetGroupTemplate",
  "/keyapis.access_management.v1.GroupTemplateService/GetGroupTemplateList",
  "/keyapis.access_management.v1.GroupTemplateService/GetGroupTemplateCount",
  "/keyapis.access_management.v1.GroupTemplateService/PostGroupTemplate",
  "/keyapis.access_management.v1.GroupTemplateService/DeleteGroupTemplate",
  "/keyapis.access_management.v1.GroupTemplateService/GetGroupTemplateGroupList",
  "/keyapis.access_management.v1.GroupTemplateService/GetGroupTemplateGroupCount",
  "/keyapis.access_management.v1.GroupTemplateService/PutGroupTemplateGroupAttach",
  "/keyapis.access_management.v1.GroupTemplateService/PutGroupTemplateGroupDetach",
};

std::unique_ptr< GroupTemplateService::Stub> GroupTemplateService::NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options) {
  (void)options;
  std::unique_ptr< GroupTemplateService::Stub> stub(new GroupTemplateService::Stub(channel, options));
  return stub;
}

GroupTemplateService::Stub::Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options)
  : channel_(channel), rpcmethod_GetGroupTemplate_(GroupTemplateService_method_names[0], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
  , rpcmethod_GetGroupTemplateList_(GroupTemplateService_method_names[1], options.suffix_for_stats(),::grpc::internal::RpcMethod::SERVER_STREAMING, channel)
  , rpcmethod_GetGroupTemplateCount_(GroupTemplateService_method_names[2], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
  , rpcmethod_PostGroupTemplate_(GroupTemplateService_method_names[3], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
  , rpcmethod_DeleteGroupTemplate_(GroupTemplateService_method_names[4], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
  , rpcmethod_GetGroupTemplateGroupList_(GroupTemplateService_method_names[5], options.suffix_for_stats(),::grpc::internal::RpcMethod::SERVER_STREAMING, channel)
  , rpcmethod_GetGroupTemplateGroupCount_(GroupTemplateService_method_names[6], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
  , rpcmethod_PutGroupTemplateGroupAttach_(GroupTemplateService_method_names[7], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
  , rpcmethod_PutGroupTemplateGroupDetach_(GroupTemplateService_method_names[8], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
  {}

::grpc::Status GroupTemplateService::Stub::GetGroupTemplate(::grpc::ClientContext* context, const ::keyapis::access_management::v1::GetGroupTemplateRequest& request, ::keyapis::access_management::v1::GetGroupTemplateResponse* response) {
  return ::grpc::internal::BlockingUnaryCall< ::keyapis::access_management::v1::GetGroupTemplateRequest, ::keyapis::access_management::v1::GetGroupTemplateResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_GetGroupTemplate_, context, request, response);
}

void GroupTemplateService::Stub::async::GetGroupTemplate(::grpc::ClientContext* context, const ::keyapis::access_management::v1::GetGroupTemplateRequest* request, ::keyapis::access_management::v1::GetGroupTemplateResponse* response, std::function<void(::grpc::Status)> f) {
  ::grpc::internal::CallbackUnaryCall< ::keyapis::access_management::v1::GetGroupTemplateRequest, ::keyapis::access_management::v1::GetGroupTemplateResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_GetGroupTemplate_, context, request, response, std::move(f));
}

void GroupTemplateService::Stub::async::GetGroupTemplate(::grpc::ClientContext* context, const ::keyapis::access_management::v1::GetGroupTemplateRequest* request, ::keyapis::access_management::v1::GetGroupTemplateResponse* response, ::grpc::ClientUnaryReactor* reactor) {
  ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_GetGroupTemplate_, context, request, response, reactor);
}

::grpc::ClientAsyncResponseReader< ::keyapis::access_management::v1::GetGroupTemplateResponse>* GroupTemplateService::Stub::PrepareAsyncGetGroupTemplateRaw(::grpc::ClientContext* context, const ::keyapis::access_management::v1::GetGroupTemplateRequest& request, ::grpc::CompletionQueue* cq) {
  return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::keyapis::access_management::v1::GetGroupTemplateResponse, ::keyapis::access_management::v1::GetGroupTemplateRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_GetGroupTemplate_, context, request);
}

::grpc::ClientAsyncResponseReader< ::keyapis::access_management::v1::GetGroupTemplateResponse>* GroupTemplateService::Stub::AsyncGetGroupTemplateRaw(::grpc::ClientContext* context, const ::keyapis::access_management::v1::GetGroupTemplateRequest& request, ::grpc::CompletionQueue* cq) {
  auto* result =
    this->PrepareAsyncGetGroupTemplateRaw(context, request, cq);
  result->StartCall();
  return result;
}

::grpc::ClientReader< ::keyapis::access_management::v1::GetGroupTemplateListResponse>* GroupTemplateService::Stub::GetGroupTemplateListRaw(::grpc::ClientContext* context, const ::keyapis::access_management::v1::GetGroupTemplateListRequest& request) {
  return ::grpc::internal::ClientReaderFactory< ::keyapis::access_management::v1::GetGroupTemplateListResponse>::Create(channel_.get(), rpcmethod_GetGroupTemplateList_, context, request);
}

void GroupTemplateService::Stub::async::GetGroupTemplateList(::grpc::ClientContext* context, const ::keyapis::access_management::v1::GetGroupTemplateListRequest* request, ::grpc::ClientReadReactor< ::keyapis::access_management::v1::GetGroupTemplateListResponse>* reactor) {
  ::grpc::internal::ClientCallbackReaderFactory< ::keyapis::access_management::v1::GetGroupTemplateListResponse>::Create(stub_->channel_.get(), stub_->rpcmethod_GetGroupTemplateList_, context, request, reactor);
}

::grpc::ClientAsyncReader< ::keyapis::access_management::v1::GetGroupTemplateListResponse>* GroupTemplateService::Stub::AsyncGetGroupTemplateListRaw(::grpc::ClientContext* context, const ::keyapis::access_management::v1::GetGroupTemplateListRequest& request, ::grpc::CompletionQueue* cq, void* tag) {
  return ::grpc::internal::ClientAsyncReaderFactory< ::keyapis::access_management::v1::GetGroupTemplateListResponse>::Create(channel_.get(), cq, rpcmethod_GetGroupTemplateList_, context, request, true, tag);
}

::grpc::ClientAsyncReader< ::keyapis::access_management::v1::GetGroupTemplateListResponse>* GroupTemplateService::Stub::PrepareAsyncGetGroupTemplateListRaw(::grpc::ClientContext* context, const ::keyapis::access_management::v1::GetGroupTemplateListRequest& request, ::grpc::CompletionQueue* cq) {
  return ::grpc::internal::ClientAsyncReaderFactory< ::keyapis::access_management::v1::GetGroupTemplateListResponse>::Create(channel_.get(), cq, rpcmethod_GetGroupTemplateList_, context, request, false, nullptr);
}

::grpc::Status GroupTemplateService::Stub::GetGroupTemplateCount(::grpc::ClientContext* context, const ::keyapis::access_management::v1::GetGroupTemplateCountRequest& request, ::keyapis::access_management::v1::GetGroupTemplateCountResponse* response) {
  return ::grpc::internal::BlockingUnaryCall< ::keyapis::access_management::v1::GetGroupTemplateCountRequest, ::keyapis::access_management::v1::GetGroupTemplateCountResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_GetGroupTemplateCount_, context, request, response);
}

void GroupTemplateService::Stub::async::GetGroupTemplateCount(::grpc::ClientContext* context, const ::keyapis::access_management::v1::GetGroupTemplateCountRequest* request, ::keyapis::access_management::v1::GetGroupTemplateCountResponse* response, std::function<void(::grpc::Status)> f) {
  ::grpc::internal::CallbackUnaryCall< ::keyapis::access_management::v1::GetGroupTemplateCountRequest, ::keyapis::access_management::v1::GetGroupTemplateCountResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_GetGroupTemplateCount_, context, request, response, std::move(f));
}

void GroupTemplateService::Stub::async::GetGroupTemplateCount(::grpc::ClientContext* context, const ::keyapis::access_management::v1::GetGroupTemplateCountRequest* request, ::keyapis::access_management::v1::GetGroupTemplateCountResponse* response, ::grpc::ClientUnaryReactor* reactor) {
  ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_GetGroupTemplateCount_, context, request, response, reactor);
}

::grpc::ClientAsyncResponseReader< ::keyapis::access_management::v1::GetGroupTemplateCountResponse>* GroupTemplateService::Stub::PrepareAsyncGetGroupTemplateCountRaw(::grpc::ClientContext* context, const ::keyapis::access_management::v1::GetGroupTemplateCountRequest& request, ::grpc::CompletionQueue* cq) {
  return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::keyapis::access_management::v1::GetGroupTemplateCountResponse, ::keyapis::access_management::v1::GetGroupTemplateCountRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_GetGroupTemplateCount_, context, request);
}

::grpc::ClientAsyncResponseReader< ::keyapis::access_management::v1::GetGroupTemplateCountResponse>* GroupTemplateService::Stub::AsyncGetGroupTemplateCountRaw(::grpc::ClientContext* context, const ::keyapis::access_management::v1::GetGroupTemplateCountRequest& request, ::grpc::CompletionQueue* cq) {
  auto* result =
    this->PrepareAsyncGetGroupTemplateCountRaw(context, request, cq);
  result->StartCall();
  return result;
}

::grpc::Status GroupTemplateService::Stub::PostGroupTemplate(::grpc::ClientContext* context, const ::keyapis::access_management::v1::PostGroupTemplateRequest& request, ::keyapis::access_management::v1::PostGroupTemplateResponse* response) {
  return ::grpc::internal::BlockingUnaryCall< ::keyapis::access_management::v1::PostGroupTemplateRequest, ::keyapis::access_management::v1::PostGroupTemplateResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_PostGroupTemplate_, context, request, response);
}

void GroupTemplateService::Stub::async::PostGroupTemplate(::grpc::ClientContext* context, const ::keyapis::access_management::v1::PostGroupTemplateRequest* request, ::keyapis::access_management::v1::PostGroupTemplateResponse* response, std::function<void(::grpc::Status)> f) {
  ::grpc::internal::CallbackUnaryCall< ::keyapis::access_management::v1::PostGroupTemplateRequest, ::keyapis::access_management::v1::PostGroupTemplateResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_PostGroupTemplate_, context, request, response, std::move(f));
}

void GroupTemplateService::Stub::async::PostGroupTemplate(::grpc::ClientContext* context, const ::keyapis::access_management::v1::PostGroupTemplateRequest* request, ::keyapis::access_management::v1::PostGroupTemplateResponse* response, ::grpc::ClientUnaryReactor* reactor) {
  ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_PostGroupTemplate_, context, request, response, reactor);
}

::grpc::ClientAsyncResponseReader< ::keyapis::access_management::v1::PostGroupTemplateResponse>* GroupTemplateService::Stub::PrepareAsyncPostGroupTemplateRaw(::grpc::ClientContext* context, const ::keyapis::access_management::v1::PostGroupTemplateRequest& request, ::grpc::CompletionQueue* cq) {
  return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::keyapis::access_management::v1::PostGroupTemplateResponse, ::keyapis::access_management::v1::PostGroupTemplateRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_PostGroupTemplate_, context, request);
}

::grpc::ClientAsyncResponseReader< ::keyapis::access_management::v1::PostGroupTemplateResponse>* GroupTemplateService::Stub::AsyncPostGroupTemplateRaw(::grpc::ClientContext* context, const ::keyapis::access_management::v1::PostGroupTemplateRequest& request, ::grpc::CompletionQueue* cq) {
  auto* result =
    this->PrepareAsyncPostGroupTemplateRaw(context, request, cq);
  result->StartCall();
  return result;
}

::grpc::Status GroupTemplateService::Stub::DeleteGroupTemplate(::grpc::ClientContext* context, const ::keyapis::access_management::v1::DeleteGroupTemplateRequest& request, ::keyapis::access_management::v1::DeleteGroupTemplateResponse* response) {
  return ::grpc::internal::BlockingUnaryCall< ::keyapis::access_management::v1::DeleteGroupTemplateRequest, ::keyapis::access_management::v1::DeleteGroupTemplateResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_DeleteGroupTemplate_, context, request, response);
}

void GroupTemplateService::Stub::async::DeleteGroupTemplate(::grpc::ClientContext* context, const ::keyapis::access_management::v1::DeleteGroupTemplateRequest* request, ::keyapis::access_management::v1::DeleteGroupTemplateResponse* response, std::function<void(::grpc::Status)> f) {
  ::grpc::internal::CallbackUnaryCall< ::keyapis::access_management::v1::DeleteGroupTemplateRequest, ::keyapis::access_management::v1::DeleteGroupTemplateResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_DeleteGroupTemplate_, context, request, response, std::move(f));
}

void GroupTemplateService::Stub::async::DeleteGroupTemplate(::grpc::ClientContext* context, const ::keyapis::access_management::v1::DeleteGroupTemplateRequest* request, ::keyapis::access_management::v1::DeleteGroupTemplateResponse* response, ::grpc::ClientUnaryReactor* reactor) {
  ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_DeleteGroupTemplate_, context, request, response, reactor);
}

::grpc::ClientAsyncResponseReader< ::keyapis::access_management::v1::DeleteGroupTemplateResponse>* GroupTemplateService::Stub::PrepareAsyncDeleteGroupTemplateRaw(::grpc::ClientContext* context, const ::keyapis::access_management::v1::DeleteGroupTemplateRequest& request, ::grpc::CompletionQueue* cq) {
  return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::keyapis::access_management::v1::DeleteGroupTemplateResponse, ::keyapis::access_management::v1::DeleteGroupTemplateRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_DeleteGroupTemplate_, context, request);
}

::grpc::ClientAsyncResponseReader< ::keyapis::access_management::v1::DeleteGroupTemplateResponse>* GroupTemplateService::Stub::AsyncDeleteGroupTemplateRaw(::grpc::ClientContext* context, const ::keyapis::access_management::v1::DeleteGroupTemplateRequest& request, ::grpc::CompletionQueue* cq) {
  auto* result =
    this->PrepareAsyncDeleteGroupTemplateRaw(context, request, cq);
  result->StartCall();
  return result;
}

::grpc::ClientReader< ::keyapis::access_management::v1::GetGroupTemplateGroupListResponse>* GroupTemplateService::Stub::GetGroupTemplateGroupListRaw(::grpc::ClientContext* context, const ::keyapis::access_management::v1::GetGroupTemplateGroupListRequest& request) {
  return ::grpc::internal::ClientReaderFactory< ::keyapis::access_management::v1::GetGroupTemplateGroupListResponse>::Create(channel_.get(), rpcmethod_GetGroupTemplateGroupList_, context, request);
}

void GroupTemplateService::Stub::async::GetGroupTemplateGroupList(::grpc::ClientContext* context, const ::keyapis::access_management::v1::GetGroupTemplateGroupListRequest* request, ::grpc::ClientReadReactor< ::keyapis::access_management::v1::GetGroupTemplateGroupListResponse>* reactor) {
  ::grpc::internal::ClientCallbackReaderFactory< ::keyapis::access_management::v1::GetGroupTemplateGroupListResponse>::Create(stub_->channel_.get(), stub_->rpcmethod_GetGroupTemplateGroupList_, context, request, reactor);
}

::grpc::ClientAsyncReader< ::keyapis::access_management::v1::GetGroupTemplateGroupListResponse>* GroupTemplateService::Stub::AsyncGetGroupTemplateGroupListRaw(::grpc::ClientContext* context, const ::keyapis::access_management::v1::GetGroupTemplateGroupListRequest& request, ::grpc::CompletionQueue* cq, void* tag) {
  return ::grpc::internal::ClientAsyncReaderFactory< ::keyapis::access_management::v1::GetGroupTemplateGroupListResponse>::Create(channel_.get(), cq, rpcmethod_GetGroupTemplateGroupList_, context, request, true, tag);
}

::grpc::ClientAsyncReader< ::keyapis::access_management::v1::GetGroupTemplateGroupListResponse>* GroupTemplateService::Stub::PrepareAsyncGetGroupTemplateGroupListRaw(::grpc::ClientContext* context, const ::keyapis::access_management::v1::GetGroupTemplateGroupListRequest& request, ::grpc::CompletionQueue* cq) {
  return ::grpc::internal::ClientAsyncReaderFactory< ::keyapis::access_management::v1::GetGroupTemplateGroupListResponse>::Create(channel_.get(), cq, rpcmethod_GetGroupTemplateGroupList_, context, request, false, nullptr);
}

::grpc::Status GroupTemplateService::Stub::GetGroupTemplateGroupCount(::grpc::ClientContext* context, const ::keyapis::access_management::v1::GetGroupTemplateGroupCountRequest& request, ::keyapis::access_management::v1::GetGroupTemplateGroupCountResponse* response) {
  return ::grpc::internal::BlockingUnaryCall< ::keyapis::access_management::v1::GetGroupTemplateGroupCountRequest, ::keyapis::access_management::v1::GetGroupTemplateGroupCountResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_GetGroupTemplateGroupCount_, context, request, response);
}

void GroupTemplateService::Stub::async::GetGroupTemplateGroupCount(::grpc::ClientContext* context, const ::keyapis::access_management::v1::GetGroupTemplateGroupCountRequest* request, ::keyapis::access_management::v1::GetGroupTemplateGroupCountResponse* response, std::function<void(::grpc::Status)> f) {
  ::grpc::internal::CallbackUnaryCall< ::keyapis::access_management::v1::GetGroupTemplateGroupCountRequest, ::keyapis::access_management::v1::GetGroupTemplateGroupCountResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_GetGroupTemplateGroupCount_, context, request, response, std::move(f));
}

void GroupTemplateService::Stub::async::GetGroupTemplateGroupCount(::grpc::ClientContext* context, const ::keyapis::access_management::v1::GetGroupTemplateGroupCountRequest* request, ::keyapis::access_management::v1::GetGroupTemplateGroupCountResponse* response, ::grpc::ClientUnaryReactor* reactor) {
  ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_GetGroupTemplateGroupCount_, context, request, response, reactor);
}

::grpc::ClientAsyncResponseReader< ::keyapis::access_management::v1::GetGroupTemplateGroupCountResponse>* GroupTemplateService::Stub::PrepareAsyncGetGroupTemplateGroupCountRaw(::grpc::ClientContext* context, const ::keyapis::access_management::v1::GetGroupTemplateGroupCountRequest& request, ::grpc::CompletionQueue* cq) {
  return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::keyapis::access_management::v1::GetGroupTemplateGroupCountResponse, ::keyapis::access_management::v1::GetGroupTemplateGroupCountRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_GetGroupTemplateGroupCount_, context, request);
}

::grpc::ClientAsyncResponseReader< ::keyapis::access_management::v1::GetGroupTemplateGroupCountResponse>* GroupTemplateService::Stub::AsyncGetGroupTemplateGroupCountRaw(::grpc::ClientContext* context, const ::keyapis::access_management::v1::GetGroupTemplateGroupCountRequest& request, ::grpc::CompletionQueue* cq) {
  auto* result =
    this->PrepareAsyncGetGroupTemplateGroupCountRaw(context, request, cq);
  result->StartCall();
  return result;
}

::grpc::Status GroupTemplateService::Stub::PutGroupTemplateGroupAttach(::grpc::ClientContext* context, const ::keyapis::access_management::v1::PutGroupTemplateGroupAttachRequest& request, ::keyapis::access_management::v1::PutGroupTemplateGroupAttachResponse* response) {
  return ::grpc::internal::BlockingUnaryCall< ::keyapis::access_management::v1::PutGroupTemplateGroupAttachRequest, ::keyapis::access_management::v1::PutGroupTemplateGroupAttachResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_PutGroupTemplateGroupAttach_, context, request, response);
}

void GroupTemplateService::Stub::async::PutGroupTemplateGroupAttach(::grpc::ClientContext* context, const ::keyapis::access_management::v1::PutGroupTemplateGroupAttachRequest* request, ::keyapis::access_management::v1::PutGroupTemplateGroupAttachResponse* response, std::function<void(::grpc::Status)> f) {
  ::grpc::internal::CallbackUnaryCall< ::keyapis::access_management::v1::PutGroupTemplateGroupAttachRequest, ::keyapis::access_management::v1::PutGroupTemplateGroupAttachResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_PutGroupTemplateGroupAttach_, context, request, response, std::move(f));
}

void GroupTemplateService::Stub::async::PutGroupTemplateGroupAttach(::grpc::ClientContext* context, const ::keyapis::access_management::v1::PutGroupTemplateGroupAttachRequest* request, ::keyapis::access_management::v1::PutGroupTemplateGroupAttachResponse* response, ::grpc::ClientUnaryReactor* reactor) {
  ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_PutGroupTemplateGroupAttach_, context, request, response, reactor);
}

::grpc::ClientAsyncResponseReader< ::keyapis::access_management::v1::PutGroupTemplateGroupAttachResponse>* GroupTemplateService::Stub::PrepareAsyncPutGroupTemplateGroupAttachRaw(::grpc::ClientContext* context, const ::keyapis::access_management::v1::PutGroupTemplateGroupAttachRequest& request, ::grpc::CompletionQueue* cq) {
  return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::keyapis::access_management::v1::PutGroupTemplateGroupAttachResponse, ::keyapis::access_management::v1::PutGroupTemplateGroupAttachRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_PutGroupTemplateGroupAttach_, context, request);
}

::grpc::ClientAsyncResponseReader< ::keyapis::access_management::v1::PutGroupTemplateGroupAttachResponse>* GroupTemplateService::Stub::AsyncPutGroupTemplateGroupAttachRaw(::grpc::ClientContext* context, const ::keyapis::access_management::v1::PutGroupTemplateGroupAttachRequest& request, ::grpc::CompletionQueue* cq) {
  auto* result =
    this->PrepareAsyncPutGroupTemplateGroupAttachRaw(context, request, cq);
  result->StartCall();
  return result;
}

::grpc::Status GroupTemplateService::Stub::PutGroupTemplateGroupDetach(::grpc::ClientContext* context, const ::keyapis::access_management::v1::PutGroupTemplateGroupDetachRequest& request, ::keyapis::access_management::v1::PutGroupTemplateGroupDetachResponse* response) {
  return ::grpc::internal::BlockingUnaryCall< ::keyapis::access_management::v1::PutGroupTemplateGroupDetachRequest, ::keyapis::access_management::v1::PutGroupTemplateGroupDetachResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_PutGroupTemplateGroupDetach_, context, request, response);
}

void GroupTemplateService::Stub::async::PutGroupTemplateGroupDetach(::grpc::ClientContext* context, const ::keyapis::access_management::v1::PutGroupTemplateGroupDetachRequest* request, ::keyapis::access_management::v1::PutGroupTemplateGroupDetachResponse* response, std::function<void(::grpc::Status)> f) {
  ::grpc::internal::CallbackUnaryCall< ::keyapis::access_management::v1::PutGroupTemplateGroupDetachRequest, ::keyapis::access_management::v1::PutGroupTemplateGroupDetachResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_PutGroupTemplateGroupDetach_, context, request, response, std::move(f));
}

void GroupTemplateService::Stub::async::PutGroupTemplateGroupDetach(::grpc::ClientContext* context, const ::keyapis::access_management::v1::PutGroupTemplateGroupDetachRequest* request, ::keyapis::access_management::v1::PutGroupTemplateGroupDetachResponse* response, ::grpc::ClientUnaryReactor* reactor) {
  ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_PutGroupTemplateGroupDetach_, context, request, response, reactor);
}

::grpc::ClientAsyncResponseReader< ::keyapis::access_management::v1::PutGroupTemplateGroupDetachResponse>* GroupTemplateService::Stub::PrepareAsyncPutGroupTemplateGroupDetachRaw(::grpc::ClientContext* context, const ::keyapis::access_management::v1::PutGroupTemplateGroupDetachRequest& request, ::grpc::CompletionQueue* cq) {
  return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::keyapis::access_management::v1::PutGroupTemplateGroupDetachResponse, ::keyapis::access_management::v1::PutGroupTemplateGroupDetachRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_PutGroupTemplateGroupDetach_, context, request);
}

::grpc::ClientAsyncResponseReader< ::keyapis::access_management::v1::PutGroupTemplateGroupDetachResponse>* GroupTemplateService::Stub::AsyncPutGroupTemplateGroupDetachRaw(::grpc::ClientContext* context, const ::keyapis::access_management::v1::PutGroupTemplateGroupDetachRequest& request, ::grpc::CompletionQueue* cq) {
  auto* result =
    this->PrepareAsyncPutGroupTemplateGroupDetachRaw(context, request, cq);
  result->StartCall();
  return result;
}

GroupTemplateService::Service::Service() {
  AddMethod(new ::grpc::internal::RpcServiceMethod(
      GroupTemplateService_method_names[0],
      ::grpc::internal::RpcMethod::NORMAL_RPC,
      new ::grpc::internal::RpcMethodHandler< GroupTemplateService::Service, ::keyapis::access_management::v1::GetGroupTemplateRequest, ::keyapis::access_management::v1::GetGroupTemplateResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
          [](GroupTemplateService::Service* service,
             ::grpc::ServerContext* ctx,
             const ::keyapis::access_management::v1::GetGroupTemplateRequest* req,
             ::keyapis::access_management::v1::GetGroupTemplateResponse* resp) {
               return service->GetGroupTemplate(ctx, req, resp);
             }, this)));
  AddMethod(new ::grpc::internal::RpcServiceMethod(
      GroupTemplateService_method_names[1],
      ::grpc::internal::RpcMethod::SERVER_STREAMING,
      new ::grpc::internal::ServerStreamingHandler< GroupTemplateService::Service, ::keyapis::access_management::v1::GetGroupTemplateListRequest, ::keyapis::access_management::v1::GetGroupTemplateListResponse>(
          [](GroupTemplateService::Service* service,
             ::grpc::ServerContext* ctx,
             const ::keyapis::access_management::v1::GetGroupTemplateListRequest* req,
             ::grpc::ServerWriter<::keyapis::access_management::v1::GetGroupTemplateListResponse>* writer) {
               return service->GetGroupTemplateList(ctx, req, writer);
             }, this)));
  AddMethod(new ::grpc::internal::RpcServiceMethod(
      GroupTemplateService_method_names[2],
      ::grpc::internal::RpcMethod::NORMAL_RPC,
      new ::grpc::internal::RpcMethodHandler< GroupTemplateService::Service, ::keyapis::access_management::v1::GetGroupTemplateCountRequest, ::keyapis::access_management::v1::GetGroupTemplateCountResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
          [](GroupTemplateService::Service* service,
             ::grpc::ServerContext* ctx,
             const ::keyapis::access_management::v1::GetGroupTemplateCountRequest* req,
             ::keyapis::access_management::v1::GetGroupTemplateCountResponse* resp) {
               return service->GetGroupTemplateCount(ctx, req, resp);
             }, this)));
  AddMethod(new ::grpc::internal::RpcServiceMethod(
      GroupTemplateService_method_names[3],
      ::grpc::internal::RpcMethod::NORMAL_RPC,
      new ::grpc::internal::RpcMethodHandler< GroupTemplateService::Service, ::keyapis::access_management::v1::PostGroupTemplateRequest, ::keyapis::access_management::v1::PostGroupTemplateResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
          [](GroupTemplateService::Service* service,
             ::grpc::ServerContext* ctx,
             const ::keyapis::access_management::v1::PostGroupTemplateRequest* req,
             ::keyapis::access_management::v1::PostGroupTemplateResponse* resp) {
               return service->PostGroupTemplate(ctx, req, resp);
             }, this)));
  AddMethod(new ::grpc::internal::RpcServiceMethod(
      GroupTemplateService_method_names[4],
      ::grpc::internal::RpcMethod::NORMAL_RPC,
      new ::grpc::internal::RpcMethodHandler< GroupTemplateService::Service, ::keyapis::access_management::v1::DeleteGroupTemplateRequest, ::keyapis::access_management::v1::DeleteGroupTemplateResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
          [](GroupTemplateService::Service* service,
             ::grpc::ServerContext* ctx,
             const ::keyapis::access_management::v1::DeleteGroupTemplateRequest* req,
             ::keyapis::access_management::v1::DeleteGroupTemplateResponse* resp) {
               return service->DeleteGroupTemplate(ctx, req, resp);
             }, this)));
  AddMethod(new ::grpc::internal::RpcServiceMethod(
      GroupTemplateService_method_names[5],
      ::grpc::internal::RpcMethod::SERVER_STREAMING,
      new ::grpc::internal::ServerStreamingHandler< GroupTemplateService::Service, ::keyapis::access_management::v1::GetGroupTemplateGroupListRequest, ::keyapis::access_management::v1::GetGroupTemplateGroupListResponse>(
          [](GroupTemplateService::Service* service,
             ::grpc::ServerContext* ctx,
             const ::keyapis::access_management::v1::GetGroupTemplateGroupListRequest* req,
             ::grpc::ServerWriter<::keyapis::access_management::v1::GetGroupTemplateGroupListResponse>* writer) {
               return service->GetGroupTemplateGroupList(ctx, req, writer);
             }, this)));
  AddMethod(new ::grpc::internal::RpcServiceMethod(
      GroupTemplateService_method_names[6],
      ::grpc::internal::RpcMethod::NORMAL_RPC,
      new ::grpc::internal::RpcMethodHandler< GroupTemplateService::Service, ::keyapis::access_management::v1::GetGroupTemplateGroupCountRequest, ::keyapis::access_management::v1::GetGroupTemplateGroupCountResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
          [](GroupTemplateService::Service* service,
             ::grpc::ServerContext* ctx,
             const ::keyapis::access_management::v1::GetGroupTemplateGroupCountRequest* req,
             ::keyapis::access_management::v1::GetGroupTemplateGroupCountResponse* resp) {
               return service->GetGroupTemplateGroupCount(ctx, req, resp);
             }, this)));
  AddMethod(new ::grpc::internal::RpcServiceMethod(
      GroupTemplateService_method_names[7],
      ::grpc::internal::RpcMethod::NORMAL_RPC,
      new ::grpc::internal::RpcMethodHandler< GroupTemplateService::Service, ::keyapis::access_management::v1::PutGroupTemplateGroupAttachRequest, ::keyapis::access_management::v1::PutGroupTemplateGroupAttachResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
          [](GroupTemplateService::Service* service,
             ::grpc::ServerContext* ctx,
             const ::keyapis::access_management::v1::PutGroupTemplateGroupAttachRequest* req,
             ::keyapis::access_management::v1::PutGroupTemplateGroupAttachResponse* resp) {
               return service->PutGroupTemplateGroupAttach(ctx, req, resp);
             }, this)));
  AddMethod(new ::grpc::internal::RpcServiceMethod(
      GroupTemplateService_method_names[8],
      ::grpc::internal::RpcMethod::NORMAL_RPC,
      new ::grpc::internal::RpcMethodHandler< GroupTemplateService::Service, ::keyapis::access_management::v1::PutGroupTemplateGroupDetachRequest, ::keyapis::access_management::v1::PutGroupTemplateGroupDetachResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
          [](GroupTemplateService::Service* service,
             ::grpc::ServerContext* ctx,
             const ::keyapis::access_management::v1::PutGroupTemplateGroupDetachRequest* req,
             ::keyapis::access_management::v1::PutGroupTemplateGroupDetachResponse* resp) {
               return service->PutGroupTemplateGroupDetach(ctx, req, resp);
             }, this)));
}

GroupTemplateService::Service::~Service() {
}

::grpc::Status GroupTemplateService::Service::GetGroupTemplate(::grpc::ServerContext* context, const ::keyapis::access_management::v1::GetGroupTemplateRequest* request, ::keyapis::access_management::v1::GetGroupTemplateResponse* response) {
  (void) context;
  (void) request;
  (void) response;
  return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}

::grpc::Status GroupTemplateService::Service::GetGroupTemplateList(::grpc::ServerContext* context, const ::keyapis::access_management::v1::GetGroupTemplateListRequest* request, ::grpc::ServerWriter< ::keyapis::access_management::v1::GetGroupTemplateListResponse>* writer) {
  (void) context;
  (void) request;
  (void) writer;
  return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}

::grpc::Status GroupTemplateService::Service::GetGroupTemplateCount(::grpc::ServerContext* context, const ::keyapis::access_management::v1::GetGroupTemplateCountRequest* request, ::keyapis::access_management::v1::GetGroupTemplateCountResponse* response) {
  (void) context;
  (void) request;
  (void) response;
  return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}

::grpc::Status GroupTemplateService::Service::PostGroupTemplate(::grpc::ServerContext* context, const ::keyapis::access_management::v1::PostGroupTemplateRequest* request, ::keyapis::access_management::v1::PostGroupTemplateResponse* response) {
  (void) context;
  (void) request;
  (void) response;
  return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}

::grpc::Status GroupTemplateService::Service::DeleteGroupTemplate(::grpc::ServerContext* context, const ::keyapis::access_management::v1::DeleteGroupTemplateRequest* request, ::keyapis::access_management::v1::DeleteGroupTemplateResponse* response) {
  (void) context;
  (void) request;
  (void) response;
  return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}

::grpc::Status GroupTemplateService::Service::GetGroupTemplateGroupList(::grpc::ServerContext* context, const ::keyapis::access_management::v1::GetGroupTemplateGroupListRequest* request, ::grpc::ServerWriter< ::keyapis::access_management::v1::GetGroupTemplateGroupListResponse>* writer) {
  (void) context;
  (void) request;
  (void) writer;
  return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}

::grpc::Status GroupTemplateService::Service::GetGroupTemplateGroupCount(::grpc::ServerContext* context, const ::keyapis::access_management::v1::GetGroupTemplateGroupCountRequest* request, ::keyapis::access_management::v1::GetGroupTemplateGroupCountResponse* response) {
  (void) context;
  (void) request;
  (void) response;
  return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}

::grpc::Status GroupTemplateService::Service::PutGroupTemplateGroupAttach(::grpc::ServerContext* context, const ::keyapis::access_management::v1::PutGroupTemplateGroupAttachRequest* request, ::keyapis::access_management::v1::PutGroupTemplateGroupAttachResponse* response) {
  (void) context;
  (void) request;
  (void) response;
  return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}

::grpc::Status GroupTemplateService::Service::PutGroupTemplateGroupDetach(::grpc::ServerContext* context, const ::keyapis::access_management::v1::PutGroupTemplateGroupDetachRequest* request, ::keyapis::access_management::v1::PutGroupTemplateGroupDetachResponse* response) {
  (void) context;
  (void) request;
  (void) response;
  return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}


}  // namespace keyapis
}  // namespace access_management
}  // namespace v1

