text: // Generated by the gRPC protobuf plugin.
  // If you make any local change, they will be lost.
  // source: WriterPlugin.proto
  #ifndef GRPC_WriterPlugin_2eproto__INCLUDED
  #define GRPC_WriterPlugin_2eproto__INCLUDED
  
  #include "WriterPlugin.pb.h"
  
  #include <grpc++/impl/codegen/async_stream.h>
  #include <grpc++/impl/codegen/async_unary_call.h>
  #include <grpc++/impl/codegen/proto_utils.h>
  #include <grpc++/impl/codegen/rpc_method.h>
  #include <grpc++/impl/codegen/service_type.h>
  #include <grpc++/impl/codegen/status.h>
  #include <grpc++/impl/codegen/stub_options.h>
  #include <grpc++/impl/codegen/sync_stream.h>
  
  namespace grpc {
  class CompletionQueue;
  class Channel;
  class RpcService;
  class ServerCompletionQueue;
  class ServerContext;
  } // namespace grpc
  
  namespace devmand {
  namespace channels {
  namespace cli {
  namespace plugin {
  
  class WriterPlugin GRPC_FINAL {
   public:
    class StubInterface {
     public:
      virtual ~StubInterface() {}
      std::unique_ptr<::grpc::ClientReaderWriterInterface<
          ::devmand::channels::cli::plugin::CreateRequest,
          ::devmand::channels::cli::plugin::CreateResponse>>
      Create(::grpc::ClientContext* context) {
        return std::unique_ptr<::grpc::ClientReaderWriterInterface<
            ::devmand::channels::cli::plugin::CreateRequest,
            ::devmand::channels::cli::plugin::CreateResponse>>(
            CreateRaw(context));
      }
      std::unique_ptr<::grpc::ClientAsyncReaderWriterInterface<
          ::devmand::channels::cli::plugin::CreateRequest,
          ::devmand::channels::cli::plugin::CreateResponse>>
      AsyncCreate(
          ::grpc::ClientContext* context,
          ::grpc::CompletionQueue* cq,
          void* tag) {
        return std::unique_ptr<::grpc::ClientAsyncReaderWriterInterface<
            ::devmand::channels::cli::plugin::CreateRequest,
            ::devmand::channels::cli::plugin::CreateResponse>>(
            AsyncCreateRaw(context, cq, tag));
      }
      std::unique_ptr<::grpc::ClientReaderWriterInterface<
          ::devmand::channels::cli::plugin::UpdateRequest,
          ::devmand::channels::cli::plugin::UpdateResponse>>
      Update(::grpc::ClientContext* context) {
        return std::unique_ptr<::grpc::ClientReaderWriterInterface<
            ::devmand::channels::cli::plugin::UpdateRequest,
            ::devmand::channels::cli::plugin::UpdateResponse>>(
            UpdateRaw(context));
      }
      std::unique_ptr<::grpc::ClientAsyncReaderWriterInterface<
          ::devmand::channels::cli::plugin::UpdateRequest,
          ::devmand::channels::cli::plugin::UpdateResponse>>
      AsyncUpdate(
          ::grpc::ClientContext* context,
          ::grpc::CompletionQueue* cq,
          void* tag) {
        return std::unique_ptr<::grpc::ClientAsyncReaderWriterInterface<
            ::devmand::channels::cli::plugin::UpdateRequest,
            ::devmand::channels::cli::plugin::UpdateResponse>>(
            AsyncUpdateRaw(context, cq, tag));
      }
      std::unique_ptr<::grpc::ClientReaderWriterInterface<
          ::devmand::channels::cli::plugin::RemoveRequest,
          ::devmand::channels::cli::plugin::RemoveResponse>>
      Remove(::grpc::ClientContext* context) {
        return std::unique_ptr<::grpc::ClientReaderWriterInterface<
            ::devmand::channels::cli::plugin::RemoveRequest,
            ::devmand::channels::cli::plugin::RemoveResponse>>(
            RemoveRaw(context));
      }
      std::unique_ptr<::grpc::ClientAsyncReaderWriterInterface<
          ::devmand::channels::cli::plugin::RemoveRequest,
          ::devmand::channels::cli::plugin::RemoveResponse>>
      AsyncRemove(
          ::grpc::ClientContext* context,
          ::grpc::CompletionQueue* cq,
          void* tag) {
        return std::unique_ptr<::grpc::ClientAsyncReaderWriterInterface<
            ::devmand::channels::cli::plugin::RemoveRequest,
            ::devmand::channels::cli::plugin::RemoveResponse>>(
            AsyncRemoveRaw(context, cq, tag));
      }
  
     private:
      virtual ::grpc::ClientReaderWriterInterface<
          ::devmand::channels::cli::plugin::CreateRequest,
          ::devmand::channels::cli::plugin::CreateResponse>*
      CreateRaw(::grpc::ClientContext* context) = 0;
      virtual ::grpc::ClientAsyncReaderWriterInterface<
          ::devmand::channels::cli::plugin::CreateRequest,
          ::devmand::channels::cli::plugin::CreateResponse>*
      AsyncCreateRaw(
          ::grpc::ClientContext* context,
          ::grpc::CompletionQueue* cq,
          void* tag) = 0;
      virtual ::grpc::ClientReaderWriterInterface<
          ::devmand::channels::cli::plugin::UpdateRequest,
          ::devmand::channels::cli::plugin::UpdateResponse>*
      UpdateRaw(::grpc::ClientContext* context) = 0;
      virtual ::grpc::ClientAsyncReaderWriterInterface<
          ::devmand::channels::cli::plugin::UpdateRequest,
          ::devmand::channels::cli::plugin::UpdateResponse>*
      AsyncUpdateRaw(
          ::grpc::ClientContext* context,
          ::grpc::CompletionQueue* cq,
          void* tag) = 0;
      virtual ::grpc::ClientReaderWriterInterface<
          ::devmand::channels::cli::plugin::RemoveRequest,
          ::devmand::channels::cli::plugin::RemoveResponse>*
      RemoveRaw(::grpc::ClientContext* context) = 0;
      virtual ::grpc::ClientAsyncReaderWriterInterface<
          ::devmand::channels::cli::plugin::RemoveRequest,
          ::devmand::channels::cli::plugin::RemoveResponse>*
      AsyncRemoveRaw(
          ::grpc::ClientContext* context,
          ::grpc::CompletionQueue* cq,
          void* tag) = 0;
    };
    class Stub GRPC_FINAL : public StubInterface {
     public:
      Stub(const std::shared_ptr<::grpc::ChannelInterface>& channel);
      std::unique_ptr<::grpc::ClientReaderWriter<
          ::devmand::channels::cli::plugin::CreateRequest,
          ::devmand::channels::cli::plugin::CreateResponse>>
      Create(::grpc::ClientContext* context) {
        return std::unique_ptr<::grpc::ClientReaderWriter<
            ::devmand::channels::cli::plugin::CreateRequest,
            ::devmand::channels::cli::plugin::CreateResponse>>(
            CreateRaw(context));
      }
      std::unique_ptr<::grpc::ClientAsyncReaderWriter<
          ::devmand::channels::cli::plugin::CreateRequest,
          ::devmand::channels::cli::plugin::CreateResponse>>
      AsyncCreate(
          ::grpc::ClientContext* context,
          ::grpc::CompletionQueue* cq,
          void* tag) {
        return std::unique_ptr<::grpc::ClientAsyncReaderWriter<
            ::devmand::channels::cli::plugin::CreateRequest,
            ::devmand::channels::cli::plugin::CreateResponse>>(
            AsyncCreateRaw(context, cq, tag));
      }
      std::unique_ptr<::grpc::ClientReaderWriter<
          ::devmand::channels::cli::plugin::UpdateRequest,
          ::devmand::channels::cli::plugin::UpdateResponse>>
      Update(::grpc::ClientContext* context) {
        return std::unique_ptr<::grpc::ClientReaderWriter<
            ::devmand::channels::cli::plugin::UpdateRequest,
            ::devmand::channels::cli::plugin::UpdateResponse>>(
            UpdateRaw(context));
      }
      std::unique_ptr<::grpc::ClientAsyncReaderWriter<
          ::devmand::channels::cli::plugin::UpdateRequest,
          ::devmand::channels::cli::plugin::UpdateResponse>>
      AsyncUpdate(
          ::grpc::ClientContext* context,
          ::grpc::CompletionQueue* cq,
          void* tag) {
        return std::unique_ptr<::grpc::ClientAsyncReaderWriter<
            ::devmand::channels::cli::plugin::UpdateRequest,
            ::devmand::channels::cli::plugin::UpdateResponse>>(
            AsyncUpdateRaw(context, cq, tag));
      }
      std::unique_ptr<::grpc::ClientReaderWriter<
          ::devmand::channels::cli::plugin::RemoveRequest,
          ::devmand::channels::cli::plugin::RemoveResponse>>
      Remove(::grpc::ClientContext* context) {
        return std::unique_ptr<::grpc::ClientReaderWriter<
            ::devmand::channels::cli::plugin::RemoveRequest,
            ::devmand::channels::cli::plugin::RemoveResponse>>(
            RemoveRaw(context));
      }
      std::unique_ptr<::grpc::ClientAsyncReaderWriter<
          ::devmand::channels::cli::plugin::RemoveRequest,
          ::devmand::channels::cli::plugin::RemoveResponse>>
      AsyncRemove(
          ::grpc::ClientContext* context,
          ::grpc::CompletionQueue* cq,
          void* tag) {
        return std::unique_ptr<::grpc::ClientAsyncReaderWriter<
            ::devmand::channels::cli::plugin::RemoveRequest,
            ::devmand::channels::cli::plugin::RemoveResponse>>(
            AsyncRemoveRaw(context, cq, tag));
      }
  
     private:
      std::shared_ptr<::grpc::ChannelInterface> channel_;
      ::grpc::ClientReaderWriter<
          ::devmand::channels::cli::plugin::CreateRequest,
          ::devmand::channels::cli::plugin::CreateResponse>*
      CreateRaw(::grpc::ClientContext* context) GRPC_OVERRIDE;
      ::grpc::ClientAsyncReaderWriter<
          ::devmand::channels::cli::plugin::CreateRequest,
          ::devmand::channels::cli::plugin::CreateResponse>*
      AsyncCreateRaw(
          ::grpc::ClientContext* context,
          ::grpc::CompletionQueue* cq,
          void* tag) GRPC_OVERRIDE;
      ::grpc::ClientReaderWriter<
          ::devmand::channels::cli::plugin::UpdateRequest,
          ::devmand::channels::cli::plugin::UpdateResponse>*
      UpdateRaw(::grpc::ClientContext* context) GRPC_OVERRIDE;
      ::grpc::ClientAsyncReaderWriter<
          ::devmand::channels::cli::plugin::UpdateRequest,
          ::devmand::channels::cli::plugin::UpdateResponse>*
      AsyncUpdateRaw(
          ::grpc::ClientContext* context,
          ::grpc::CompletionQueue* cq,
          void* tag) GRPC_OVERRIDE;
      ::grpc::ClientReaderWriter<
          ::devmand::channels::cli::plugin::RemoveRequest,
          ::devmand::channels::cli::plugin::RemoveResponse>*
      RemoveRaw(::grpc::ClientContext* context) GRPC_OVERRIDE;
      ::grpc::ClientAsyncReaderWriter<
          ::devmand::channels::cli::plugin::RemoveRequest,
          ::devmand::channels::cli::plugin::RemoveResponse>*
      AsyncRemoveRaw(
          ::grpc::ClientContext* context,
          ::grpc::CompletionQueue* cq,
          void* tag) GRPC_OVERRIDE;
      const ::grpc::RpcMethod rpcmethod_Create_;
      const ::grpc::RpcMethod rpcmethod_Update_;
      const ::grpc::RpcMethod rpcmethod_Remove_;
    };
    static std::unique_ptr<Stub> NewStub(
        const std::shared_ptr<::grpc::ChannelInterface>& channel,
        const ::grpc::StubOptions& options = ::grpc::StubOptions());
  
    class Service : public ::grpc::Service {
     public:
      Service();
      virtual ~Service();
      virtual ::grpc::Status Create(
          ::grpc::ServerContext* context,
          ::grpc::ServerReaderWriter<
              ::devmand::channels::cli::plugin::CreateResponse,
              ::devmand::channels::cli::plugin::CreateRequest>* stream);
      virtual ::grpc::Status Update(
          ::grpc::ServerContext* context,
          ::grpc::ServerReaderWriter<
              ::devmand::channels::cli::plugin::UpdateResponse,
              ::devmand::channels::cli::plugin::UpdateRequest>* stream);
      virtual ::grpc::Status Remove(
          ::grpc::ServerContext* context,
          ::grpc::ServerReaderWriter<
              ::devmand::channels::cli::plugin::RemoveResponse,
              ::devmand::channels::cli::plugin::RemoveRequest>* stream);
    };
    template <class BaseClass>
    class WithAsyncMethod_Create : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* service) {}
  
     public:
      WithAsyncMethod_Create() {
        ::grpc::Service::MarkMethodAsync(0);
      }
      ~WithAsyncMethod_Create() GRPC_OVERRIDE {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status Create(
          ::grpc::ServerContext* context,
          ::grpc::ServerReaderWriter<
              ::devmand::channels::cli::plugin::CreateResponse,
              ::devmand::channels::cli::plugin::CreateRequest>* stream)
          GRPC_FINAL GRPC_OVERRIDE {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
      void RequestCreate(
          ::grpc::ServerContext* context,
          ::grpc::ServerAsyncReaderWriter<
              ::devmand::channels::cli::plugin::CreateResponse,
              ::devmand::channels::cli::plugin::CreateRequest>* stream,
          ::grpc::CompletionQueue* new_call_cq,
          ::grpc::ServerCompletionQueue* notification_cq,
          void* tag) {
        ::grpc::Service::RequestAsyncBidiStreaming(
            0, context, stream, new_call_cq, notification_cq, tag);
      }
    };
    template <class BaseClass>
    class WithAsyncMethod_Update : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* service) {}
  
     public:
      WithAsyncMethod_Update() {
        ::grpc::Service::MarkMethodAsync(1);
      }
      ~WithAsyncMethod_Update() GRPC_OVERRIDE {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status Update(
          ::grpc::ServerContext* context,
          ::grpc::ServerReaderWriter<
              ::devmand::channels::cli::plugin::UpdateResponse,
              ::devmand::channels::cli::plugin::UpdateRequest>* stream)
          GRPC_FINAL GRPC_OVERRIDE {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
      void RequestUpdate(
          ::grpc::ServerContext* context,
          ::grpc::ServerAsyncReaderWriter<
              ::devmand::channels::cli::plugin::UpdateResponse,
              ::devmand::channels::cli::plugin::UpdateRequest>* stream,
          ::grpc::CompletionQueue* new_call_cq,
          ::grpc::ServerCompletionQueue* notification_cq,
          void* tag) {
        ::grpc::Service::RequestAsyncBidiStreaming(
            1, context, stream, new_call_cq, notification_cq, tag);
      }
    };
    template <class BaseClass>
    class WithAsyncMethod_Remove : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* service) {}
  
     public:
      WithAsyncMethod_Remove() {
        ::grpc::Service::MarkMethodAsync(2);
      }
      ~WithAsyncMethod_Remove() GRPC_OVERRIDE {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status Remove(
          ::grpc::ServerContext* context,
          ::grpc::ServerReaderWriter<
              ::devmand::channels::cli::plugin::RemoveResponse,
              ::devmand::channels::cli::plugin::RemoveRequest>* stream)
          GRPC_FINAL GRPC_OVERRIDE {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
      void RequestRemove(
          ::grpc::ServerContext* context,
          ::grpc::ServerAsyncReaderWriter<
              ::devmand::channels::cli::plugin::RemoveResponse,
              ::devmand::channels::cli::plugin::RemoveRequest>* stream,
          ::grpc::CompletionQueue* new_call_cq,
          ::grpc::ServerCompletionQueue* notification_cq,
          void* tag) {
        ::grpc::Service::RequestAsyncBidiStreaming(
            2, context, stream, new_call_cq, notification_cq, tag);
      }
    };
    typedef WithAsyncMethod_Create<
        WithAsyncMethod_Update<WithAsyncMethod_Remove<Service>>>
        AsyncService;
    template <class BaseClass>
    class WithGenericMethod_Create : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* service) {}
  
     public:
      WithGenericMethod_Create() {
        ::grpc::Service::MarkMethodGeneric(0);
      }
      ~WithGenericMethod_Create() GRPC_OVERRIDE {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status Create(
          ::grpc::ServerContext* context,
          ::grpc::ServerReaderWriter<
              ::devmand::channels::cli::plugin::CreateResponse,
              ::devmand::channels::cli::plugin::CreateRequest>* stream)
          GRPC_FINAL GRPC_OVERRIDE {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
    };
    template <class BaseClass>
    class WithGenericMethod_Update : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* service) {}
  
     public:
      WithGenericMethod_Update() {
        ::grpc::Service::MarkMethodGeneric(1);
      }
      ~WithGenericMethod_Update() GRPC_OVERRIDE {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status Update(
          ::grpc::ServerContext* context,
          ::grpc::ServerReaderWriter<
              ::devmand::channels::cli::plugin::UpdateResponse,
              ::devmand::channels::cli::plugin::UpdateRequest>* stream)
          GRPC_FINAL GRPC_OVERRIDE {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
    };
    template <class BaseClass>
    class WithGenericMethod_Remove : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* service) {}
  
     public:
      WithGenericMethod_Remove() {
        ::grpc::Service::MarkMethodGeneric(2);
      }
      ~WithGenericMethod_Remove() GRPC_OVERRIDE {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status Remove(
          ::grpc::ServerContext* context,
          ::grpc::ServerReaderWriter<
              ::devmand::channels::cli::plugin::RemoveResponse,
              ::devmand::channels::cli::plugin::RemoveRequest>* stream)
          GRPC_FINAL GRPC_OVERRIDE {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
    };
  };
  
  } // namespace plugin
  } // namespace cli
  } // namespace channels
  } // namespace devmand
  
  #endif // GRPC_WriterPlugin_2eproto__INCLUDED
  