text: // Generated by the gRPC C++ plugin.
  // If you make any local change, they will be lost.
  // source: info/info.proto
  #ifndef GRPC_info_2finfo_2eproto__INCLUDED
  #define GRPC_info_2finfo_2eproto__INCLUDED
  
  #include "info/info.pb.h"
  
  #include <functional>
  #include <grpc/impl/codegen/port_platform.h>
  #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 mavsdk {
  namespace rpc {
  namespace info {
  
  // Provide information about the hardware and/or software of a system.
  class InfoService final {
   public:
    static constexpr char const* service_full_name() {
      return "mavsdk.rpc.info.InfoService";
    }
    class StubInterface {
     public:
      virtual ~StubInterface() {}
      // Get flight information of the system.
      virtual ::grpc::Status GetFlightInformation(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetFlightInformationRequest& request, ::mavsdk::rpc::info::GetFlightInformationResponse* response) = 0;
      std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetFlightInformationResponse>> AsyncGetFlightInformation(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetFlightInformationRequest& request, ::grpc::CompletionQueue* cq) {
        return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetFlightInformationResponse>>(AsyncGetFlightInformationRaw(context, request, cq));
      }
      std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetFlightInformationResponse>> PrepareAsyncGetFlightInformation(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetFlightInformationRequest& request, ::grpc::CompletionQueue* cq) {
        return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetFlightInformationResponse>>(PrepareAsyncGetFlightInformationRaw(context, request, cq));
      }
      // Get the identification of the system.
      virtual ::grpc::Status GetIdentification(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetIdentificationRequest& request, ::mavsdk::rpc::info::GetIdentificationResponse* response) = 0;
      std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetIdentificationResponse>> AsyncGetIdentification(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetIdentificationRequest& request, ::grpc::CompletionQueue* cq) {
        return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetIdentificationResponse>>(AsyncGetIdentificationRaw(context, request, cq));
      }
      std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetIdentificationResponse>> PrepareAsyncGetIdentification(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetIdentificationRequest& request, ::grpc::CompletionQueue* cq) {
        return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetIdentificationResponse>>(PrepareAsyncGetIdentificationRaw(context, request, cq));
      }
      // Get product information of the system.
      virtual ::grpc::Status GetProduct(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetProductRequest& request, ::mavsdk::rpc::info::GetProductResponse* response) = 0;
      std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetProductResponse>> AsyncGetProduct(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetProductRequest& request, ::grpc::CompletionQueue* cq) {
        return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetProductResponse>>(AsyncGetProductRaw(context, request, cq));
      }
      std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetProductResponse>> PrepareAsyncGetProduct(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetProductRequest& request, ::grpc::CompletionQueue* cq) {
        return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetProductResponse>>(PrepareAsyncGetProductRaw(context, request, cq));
      }
      // Get the version information of the system.
      virtual ::grpc::Status GetVersion(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetVersionRequest& request, ::mavsdk::rpc::info::GetVersionResponse* response) = 0;
      std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetVersionResponse>> AsyncGetVersion(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetVersionRequest& request, ::grpc::CompletionQueue* cq) {
        return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetVersionResponse>>(AsyncGetVersionRaw(context, request, cq));
      }
      std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetVersionResponse>> PrepareAsyncGetVersion(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetVersionRequest& request, ::grpc::CompletionQueue* cq) {
        return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetVersionResponse>>(PrepareAsyncGetVersionRaw(context, request, cq));
      }
      class experimental_async_interface {
       public:
        virtual ~experimental_async_interface() {}
        // Get flight information of the system.
        virtual void GetFlightInformation(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetFlightInformationRequest* request, ::mavsdk::rpc::info::GetFlightInformationResponse* response, std::function<void(::grpc::Status)>) = 0;
        virtual void GetFlightInformation(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetFlightInformationResponse* response, std::function<void(::grpc::Status)>) = 0;
        #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        virtual void GetFlightInformation(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetFlightInformationRequest* request, ::mavsdk::rpc::info::GetFlightInformationResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
        #else
        virtual void GetFlightInformation(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetFlightInformationRequest* request, ::mavsdk::rpc::info::GetFlightInformationResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
        #endif
        #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        virtual void GetFlightInformation(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetFlightInformationResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
        #else
        virtual void GetFlightInformation(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetFlightInformationResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
        #endif
        // Get the identification of the system.
        virtual void GetIdentification(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetIdentificationRequest* request, ::mavsdk::rpc::info::GetIdentificationResponse* response, std::function<void(::grpc::Status)>) = 0;
        virtual void GetIdentification(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetIdentificationResponse* response, std::function<void(::grpc::Status)>) = 0;
        #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        virtual void GetIdentification(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetIdentificationRequest* request, ::mavsdk::rpc::info::GetIdentificationResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
        #else
        virtual void GetIdentification(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetIdentificationRequest* request, ::mavsdk::rpc::info::GetIdentificationResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
        #endif
        #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        virtual void GetIdentification(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetIdentificationResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
        #else
        virtual void GetIdentification(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetIdentificationResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
        #endif
        // Get product information of the system.
        virtual void GetProduct(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetProductRequest* request, ::mavsdk::rpc::info::GetProductResponse* response, std::function<void(::grpc::Status)>) = 0;
        virtual void GetProduct(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetProductResponse* response, std::function<void(::grpc::Status)>) = 0;
        #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        virtual void GetProduct(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetProductRequest* request, ::mavsdk::rpc::info::GetProductResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
        #else
        virtual void GetProduct(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetProductRequest* request, ::mavsdk::rpc::info::GetProductResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
        #endif
        #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        virtual void GetProduct(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetProductResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
        #else
        virtual void GetProduct(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetProductResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
        #endif
        // Get the version information of the system.
        virtual void GetVersion(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetVersionRequest* request, ::mavsdk::rpc::info::GetVersionResponse* response, std::function<void(::grpc::Status)>) = 0;
        virtual void GetVersion(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetVersionResponse* response, std::function<void(::grpc::Status)>) = 0;
        #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        virtual void GetVersion(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetVersionRequest* request, ::mavsdk::rpc::info::GetVersionResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
        #else
        virtual void GetVersion(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetVersionRequest* request, ::mavsdk::rpc::info::GetVersionResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
        #endif
        #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        virtual void GetVersion(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetVersionResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
        #else
        virtual void GetVersion(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetVersionResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
        #endif
      };
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
      typedef class experimental_async_interface async_interface;
      #endif
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
      async_interface* async() { return experimental_async(); }
      #endif
      virtual class experimental_async_interface* experimental_async() { return nullptr; }
    private:
      virtual ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetFlightInformationResponse>* AsyncGetFlightInformationRaw(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetFlightInformationRequest& request, ::grpc::CompletionQueue* cq) = 0;
      virtual ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetFlightInformationResponse>* PrepareAsyncGetFlightInformationRaw(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetFlightInformationRequest& request, ::grpc::CompletionQueue* cq) = 0;
      virtual ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetIdentificationResponse>* AsyncGetIdentificationRaw(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetIdentificationRequest& request, ::grpc::CompletionQueue* cq) = 0;
      virtual ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetIdentificationResponse>* PrepareAsyncGetIdentificationRaw(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetIdentificationRequest& request, ::grpc::CompletionQueue* cq) = 0;
      virtual ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetProductResponse>* AsyncGetProductRaw(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetProductRequest& request, ::grpc::CompletionQueue* cq) = 0;
      virtual ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetProductResponse>* PrepareAsyncGetProductRaw(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetProductRequest& request, ::grpc::CompletionQueue* cq) = 0;
      virtual ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetVersionResponse>* AsyncGetVersionRaw(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetVersionRequest& request, ::grpc::CompletionQueue* cq) = 0;
      virtual ::grpc::ClientAsyncResponseReaderInterface< ::mavsdk::rpc::info::GetVersionResponse>* PrepareAsyncGetVersionRaw(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetVersionRequest& request, ::grpc::CompletionQueue* cq) = 0;
    };
    class Stub final : public StubInterface {
     public:
      Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel);
      ::grpc::Status GetFlightInformation(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetFlightInformationRequest& request, ::mavsdk::rpc::info::GetFlightInformationResponse* response) override;
      std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetFlightInformationResponse>> AsyncGetFlightInformation(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetFlightInformationRequest& request, ::grpc::CompletionQueue* cq) {
        return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetFlightInformationResponse>>(AsyncGetFlightInformationRaw(context, request, cq));
      }
      std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetFlightInformationResponse>> PrepareAsyncGetFlightInformation(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetFlightInformationRequest& request, ::grpc::CompletionQueue* cq) {
        return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetFlightInformationResponse>>(PrepareAsyncGetFlightInformationRaw(context, request, cq));
      }
      ::grpc::Status GetIdentification(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetIdentificationRequest& request, ::mavsdk::rpc::info::GetIdentificationResponse* response) override;
      std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetIdentificationResponse>> AsyncGetIdentification(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetIdentificationRequest& request, ::grpc::CompletionQueue* cq) {
        return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetIdentificationResponse>>(AsyncGetIdentificationRaw(context, request, cq));
      }
      std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetIdentificationResponse>> PrepareAsyncGetIdentification(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetIdentificationRequest& request, ::grpc::CompletionQueue* cq) {
        return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetIdentificationResponse>>(PrepareAsyncGetIdentificationRaw(context, request, cq));
      }
      ::grpc::Status GetProduct(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetProductRequest& request, ::mavsdk::rpc::info::GetProductResponse* response) override;
      std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetProductResponse>> AsyncGetProduct(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetProductRequest& request, ::grpc::CompletionQueue* cq) {
        return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetProductResponse>>(AsyncGetProductRaw(context, request, cq));
      }
      std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetProductResponse>> PrepareAsyncGetProduct(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetProductRequest& request, ::grpc::CompletionQueue* cq) {
        return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetProductResponse>>(PrepareAsyncGetProductRaw(context, request, cq));
      }
      ::grpc::Status GetVersion(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetVersionRequest& request, ::mavsdk::rpc::info::GetVersionResponse* response) override;
      std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetVersionResponse>> AsyncGetVersion(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetVersionRequest& request, ::grpc::CompletionQueue* cq) {
        return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetVersionResponse>>(AsyncGetVersionRaw(context, request, cq));
      }
      std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetVersionResponse>> PrepareAsyncGetVersion(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetVersionRequest& request, ::grpc::CompletionQueue* cq) {
        return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetVersionResponse>>(PrepareAsyncGetVersionRaw(context, request, cq));
      }
      class experimental_async final :
        public StubInterface::experimental_async_interface {
       public:
        void GetFlightInformation(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetFlightInformationRequest* request, ::mavsdk::rpc::info::GetFlightInformationResponse* response, std::function<void(::grpc::Status)>) override;
        void GetFlightInformation(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetFlightInformationResponse* response, std::function<void(::grpc::Status)>) override;
        #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        void GetFlightInformation(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetFlightInformationRequest* request, ::mavsdk::rpc::info::GetFlightInformationResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
        #else
        void GetFlightInformation(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetFlightInformationRequest* request, ::mavsdk::rpc::info::GetFlightInformationResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
        #endif
        #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        void GetFlightInformation(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetFlightInformationResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
        #else
        void GetFlightInformation(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetFlightInformationResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
        #endif
        void GetIdentification(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetIdentificationRequest* request, ::mavsdk::rpc::info::GetIdentificationResponse* response, std::function<void(::grpc::Status)>) override;
        void GetIdentification(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetIdentificationResponse* response, std::function<void(::grpc::Status)>) override;
        #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        void GetIdentification(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetIdentificationRequest* request, ::mavsdk::rpc::info::GetIdentificationResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
        #else
        void GetIdentification(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetIdentificationRequest* request, ::mavsdk::rpc::info::GetIdentificationResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
        #endif
        #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        void GetIdentification(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetIdentificationResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
        #else
        void GetIdentification(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetIdentificationResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
        #endif
        void GetProduct(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetProductRequest* request, ::mavsdk::rpc::info::GetProductResponse* response, std::function<void(::grpc::Status)>) override;
        void GetProduct(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetProductResponse* response, std::function<void(::grpc::Status)>) override;
        #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        void GetProduct(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetProductRequest* request, ::mavsdk::rpc::info::GetProductResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
        #else
        void GetProduct(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetProductRequest* request, ::mavsdk::rpc::info::GetProductResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
        #endif
        #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        void GetProduct(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetProductResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
        #else
        void GetProduct(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetProductResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
        #endif
        void GetVersion(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetVersionRequest* request, ::mavsdk::rpc::info::GetVersionResponse* response, std::function<void(::grpc::Status)>) override;
        void GetVersion(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetVersionResponse* response, std::function<void(::grpc::Status)>) override;
        #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        void GetVersion(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetVersionRequest* request, ::mavsdk::rpc::info::GetVersionResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
        #else
        void GetVersion(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetVersionRequest* request, ::mavsdk::rpc::info::GetVersionResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
        #endif
        #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        void GetVersion(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetVersionResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
        #else
        void GetVersion(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::mavsdk::rpc::info::GetVersionResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
        #endif
       private:
        friend class Stub;
        explicit experimental_async(Stub* stub): stub_(stub) { }
        Stub* stub() { return stub_; }
        Stub* stub_;
      };
      class experimental_async_interface* experimental_async() override { return &async_stub_; }
  
     private:
      std::shared_ptr< ::grpc::ChannelInterface> channel_;
      class experimental_async async_stub_{this};
      ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetFlightInformationResponse>* AsyncGetFlightInformationRaw(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetFlightInformationRequest& request, ::grpc::CompletionQueue* cq) override;
      ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetFlightInformationResponse>* PrepareAsyncGetFlightInformationRaw(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetFlightInformationRequest& request, ::grpc::CompletionQueue* cq) override;
      ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetIdentificationResponse>* AsyncGetIdentificationRaw(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetIdentificationRequest& request, ::grpc::CompletionQueue* cq) override;
      ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetIdentificationResponse>* PrepareAsyncGetIdentificationRaw(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetIdentificationRequest& request, ::grpc::CompletionQueue* cq) override;
      ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetProductResponse>* AsyncGetProductRaw(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetProductRequest& request, ::grpc::CompletionQueue* cq) override;
      ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetProductResponse>* PrepareAsyncGetProductRaw(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetProductRequest& request, ::grpc::CompletionQueue* cq) override;
      ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetVersionResponse>* AsyncGetVersionRaw(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetVersionRequest& request, ::grpc::CompletionQueue* cq) override;
      ::grpc::ClientAsyncResponseReader< ::mavsdk::rpc::info::GetVersionResponse>* PrepareAsyncGetVersionRaw(::grpc::ClientContext* context, const ::mavsdk::rpc::info::GetVersionRequest& request, ::grpc::CompletionQueue* cq) override;
      const ::grpc::internal::RpcMethod rpcmethod_GetFlightInformation_;
      const ::grpc::internal::RpcMethod rpcmethod_GetIdentification_;
      const ::grpc::internal::RpcMethod rpcmethod_GetProduct_;
      const ::grpc::internal::RpcMethod rpcmethod_GetVersion_;
    };
    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();
      // Get flight information of the system.
      virtual ::grpc::Status GetFlightInformation(::grpc::ServerContext* context, const ::mavsdk::rpc::info::GetFlightInformationRequest* request, ::mavsdk::rpc::info::GetFlightInformationResponse* response);
      // Get the identification of the system.
      virtual ::grpc::Status GetIdentification(::grpc::ServerContext* context, const ::mavsdk::rpc::info::GetIdentificationRequest* request, ::mavsdk::rpc::info::GetIdentificationResponse* response);
      // Get product information of the system.
      virtual ::grpc::Status GetProduct(::grpc::ServerContext* context, const ::mavsdk::rpc::info::GetProductRequest* request, ::mavsdk::rpc::info::GetProductResponse* response);
      // Get the version information of the system.
      virtual ::grpc::Status GetVersion(::grpc::ServerContext* context, const ::mavsdk::rpc::info::GetVersionRequest* request, ::mavsdk::rpc::info::GetVersionResponse* response);
    };
    template <class BaseClass>
    class WithAsyncMethod_GetFlightInformation : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      WithAsyncMethod_GetFlightInformation() {
        ::grpc::Service::MarkMethodAsync(0);
      }
      ~WithAsyncMethod_GetFlightInformation() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status GetFlightInformation(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetFlightInformationRequest* /*request*/, ::mavsdk::rpc::info::GetFlightInformationResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
      void RequestGetFlightInformation(::grpc::ServerContext* context, ::mavsdk::rpc::info::GetFlightInformationRequest* request, ::grpc::ServerAsyncResponseWriter< ::mavsdk::rpc::info::GetFlightInformationResponse>* 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_GetIdentification : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      WithAsyncMethod_GetIdentification() {
        ::grpc::Service::MarkMethodAsync(1);
      }
      ~WithAsyncMethod_GetIdentification() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status GetIdentification(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetIdentificationRequest* /*request*/, ::mavsdk::rpc::info::GetIdentificationResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
      void RequestGetIdentification(::grpc::ServerContext* context, ::mavsdk::rpc::info::GetIdentificationRequest* request, ::grpc::ServerAsyncResponseWriter< ::mavsdk::rpc::info::GetIdentificationResponse>* 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_GetProduct : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      WithAsyncMethod_GetProduct() {
        ::grpc::Service::MarkMethodAsync(2);
      }
      ~WithAsyncMethod_GetProduct() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status GetProduct(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetProductRequest* /*request*/, ::mavsdk::rpc::info::GetProductResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
      void RequestGetProduct(::grpc::ServerContext* context, ::mavsdk::rpc::info::GetProductRequest* request, ::grpc::ServerAsyncResponseWriter< ::mavsdk::rpc::info::GetProductResponse>* 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_GetVersion : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      WithAsyncMethod_GetVersion() {
        ::grpc::Service::MarkMethodAsync(3);
      }
      ~WithAsyncMethod_GetVersion() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status GetVersion(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetVersionRequest* /*request*/, ::mavsdk::rpc::info::GetVersionResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
      void RequestGetVersion(::grpc::ServerContext* context, ::mavsdk::rpc::info::GetVersionRequest* request, ::grpc::ServerAsyncResponseWriter< ::mavsdk::rpc::info::GetVersionResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
        ::grpc::Service::RequestAsyncUnary(3, context, request, response, new_call_cq, notification_cq, tag);
      }
    };
    typedef WithAsyncMethod_GetFlightInformation<WithAsyncMethod_GetIdentification<WithAsyncMethod_GetProduct<WithAsyncMethod_GetVersion<Service > > > > AsyncService;
    template <class BaseClass>
    class ExperimentalWithCallbackMethod_GetFlightInformation : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      ExperimentalWithCallbackMethod_GetFlightInformation() {
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        ::grpc::Service::
      #else
        ::grpc::Service::experimental().
      #endif
          MarkMethodCallback(0,
            new ::grpc_impl::internal::CallbackUnaryHandler< ::mavsdk::rpc::info::GetFlightInformationRequest, ::mavsdk::rpc::info::GetFlightInformationResponse>(
              [this](
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
                     ::grpc::CallbackServerContext*
      #else
                     ::grpc::experimental::CallbackServerContext*
      #endif
                       context, const ::mavsdk::rpc::info::GetFlightInformationRequest* request, ::mavsdk::rpc::info::GetFlightInformationResponse* response) { return this->GetFlightInformation(context, request, response); }));}
      void SetMessageAllocatorFor_GetFlightInformation(
          ::grpc::experimental::MessageAllocator< ::mavsdk::rpc::info::GetFlightInformationRequest, ::mavsdk::rpc::info::GetFlightInformationResponse>* allocator) {
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(0);
      #else
        ::grpc::internal::MethodHandler* const handler = ::grpc::Service::experimental().GetHandler(0);
      #endif
        static_cast<::grpc_impl::internal::CallbackUnaryHandler< ::mavsdk::rpc::info::GetFlightInformationRequest, ::mavsdk::rpc::info::GetFlightInformationResponse>*>(handler)
                ->SetMessageAllocator(allocator);
      }
      ~ExperimentalWithCallbackMethod_GetFlightInformation() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status GetFlightInformation(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetFlightInformationRequest* /*request*/, ::mavsdk::rpc::info::GetFlightInformationResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
      virtual ::grpc::ServerUnaryReactor* GetFlightInformation(
        ::grpc::CallbackServerContext* /*context*/, const ::mavsdk::rpc::info::GetFlightInformationRequest* /*request*/, ::mavsdk::rpc::info::GetFlightInformationResponse* /*response*/)
      #else
      virtual ::grpc::experimental::ServerUnaryReactor* GetFlightInformation(
        ::grpc::experimental::CallbackServerContext* /*context*/, const ::mavsdk::rpc::info::GetFlightInformationRequest* /*request*/, ::mavsdk::rpc::info::GetFlightInformationResponse* /*response*/)
      #endif
        { return nullptr; }
    };
    template <class BaseClass>
    class ExperimentalWithCallbackMethod_GetIdentification : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      ExperimentalWithCallbackMethod_GetIdentification() {
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        ::grpc::Service::
      #else
        ::grpc::Service::experimental().
      #endif
          MarkMethodCallback(1,
            new ::grpc_impl::internal::CallbackUnaryHandler< ::mavsdk::rpc::info::GetIdentificationRequest, ::mavsdk::rpc::info::GetIdentificationResponse>(
              [this](
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
                     ::grpc::CallbackServerContext*
      #else
                     ::grpc::experimental::CallbackServerContext*
      #endif
                       context, const ::mavsdk::rpc::info::GetIdentificationRequest* request, ::mavsdk::rpc::info::GetIdentificationResponse* response) { return this->GetIdentification(context, request, response); }));}
      void SetMessageAllocatorFor_GetIdentification(
          ::grpc::experimental::MessageAllocator< ::mavsdk::rpc::info::GetIdentificationRequest, ::mavsdk::rpc::info::GetIdentificationResponse>* allocator) {
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(1);
      #else
        ::grpc::internal::MethodHandler* const handler = ::grpc::Service::experimental().GetHandler(1);
      #endif
        static_cast<::grpc_impl::internal::CallbackUnaryHandler< ::mavsdk::rpc::info::GetIdentificationRequest, ::mavsdk::rpc::info::GetIdentificationResponse>*>(handler)
                ->SetMessageAllocator(allocator);
      }
      ~ExperimentalWithCallbackMethod_GetIdentification() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status GetIdentification(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetIdentificationRequest* /*request*/, ::mavsdk::rpc::info::GetIdentificationResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
      virtual ::grpc::ServerUnaryReactor* GetIdentification(
        ::grpc::CallbackServerContext* /*context*/, const ::mavsdk::rpc::info::GetIdentificationRequest* /*request*/, ::mavsdk::rpc::info::GetIdentificationResponse* /*response*/)
      #else
      virtual ::grpc::experimental::ServerUnaryReactor* GetIdentification(
        ::grpc::experimental::CallbackServerContext* /*context*/, const ::mavsdk::rpc::info::GetIdentificationRequest* /*request*/, ::mavsdk::rpc::info::GetIdentificationResponse* /*response*/)
      #endif
        { return nullptr; }
    };
    template <class BaseClass>
    class ExperimentalWithCallbackMethod_GetProduct : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      ExperimentalWithCallbackMethod_GetProduct() {
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        ::grpc::Service::
      #else
        ::grpc::Service::experimental().
      #endif
          MarkMethodCallback(2,
            new ::grpc_impl::internal::CallbackUnaryHandler< ::mavsdk::rpc::info::GetProductRequest, ::mavsdk::rpc::info::GetProductResponse>(
              [this](
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
                     ::grpc::CallbackServerContext*
      #else
                     ::grpc::experimental::CallbackServerContext*
      #endif
                       context, const ::mavsdk::rpc::info::GetProductRequest* request, ::mavsdk::rpc::info::GetProductResponse* response) { return this->GetProduct(context, request, response); }));}
      void SetMessageAllocatorFor_GetProduct(
          ::grpc::experimental::MessageAllocator< ::mavsdk::rpc::info::GetProductRequest, ::mavsdk::rpc::info::GetProductResponse>* allocator) {
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(2);
      #else
        ::grpc::internal::MethodHandler* const handler = ::grpc::Service::experimental().GetHandler(2);
      #endif
        static_cast<::grpc_impl::internal::CallbackUnaryHandler< ::mavsdk::rpc::info::GetProductRequest, ::mavsdk::rpc::info::GetProductResponse>*>(handler)
                ->SetMessageAllocator(allocator);
      }
      ~ExperimentalWithCallbackMethod_GetProduct() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status GetProduct(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetProductRequest* /*request*/, ::mavsdk::rpc::info::GetProductResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
      virtual ::grpc::ServerUnaryReactor* GetProduct(
        ::grpc::CallbackServerContext* /*context*/, const ::mavsdk::rpc::info::GetProductRequest* /*request*/, ::mavsdk::rpc::info::GetProductResponse* /*response*/)
      #else
      virtual ::grpc::experimental::ServerUnaryReactor* GetProduct(
        ::grpc::experimental::CallbackServerContext* /*context*/, const ::mavsdk::rpc::info::GetProductRequest* /*request*/, ::mavsdk::rpc::info::GetProductResponse* /*response*/)
      #endif
        { return nullptr; }
    };
    template <class BaseClass>
    class ExperimentalWithCallbackMethod_GetVersion : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      ExperimentalWithCallbackMethod_GetVersion() {
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        ::grpc::Service::
      #else
        ::grpc::Service::experimental().
      #endif
          MarkMethodCallback(3,
            new ::grpc_impl::internal::CallbackUnaryHandler< ::mavsdk::rpc::info::GetVersionRequest, ::mavsdk::rpc::info::GetVersionResponse>(
              [this](
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
                     ::grpc::CallbackServerContext*
      #else
                     ::grpc::experimental::CallbackServerContext*
      #endif
                       context, const ::mavsdk::rpc::info::GetVersionRequest* request, ::mavsdk::rpc::info::GetVersionResponse* response) { return this->GetVersion(context, request, response); }));}
      void SetMessageAllocatorFor_GetVersion(
          ::grpc::experimental::MessageAllocator< ::mavsdk::rpc::info::GetVersionRequest, ::mavsdk::rpc::info::GetVersionResponse>* allocator) {
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(3);
      #else
        ::grpc::internal::MethodHandler* const handler = ::grpc::Service::experimental().GetHandler(3);
      #endif
        static_cast<::grpc_impl::internal::CallbackUnaryHandler< ::mavsdk::rpc::info::GetVersionRequest, ::mavsdk::rpc::info::GetVersionResponse>*>(handler)
                ->SetMessageAllocator(allocator);
      }
      ~ExperimentalWithCallbackMethod_GetVersion() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status GetVersion(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetVersionRequest* /*request*/, ::mavsdk::rpc::info::GetVersionResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
      virtual ::grpc::ServerUnaryReactor* GetVersion(
        ::grpc::CallbackServerContext* /*context*/, const ::mavsdk::rpc::info::GetVersionRequest* /*request*/, ::mavsdk::rpc::info::GetVersionResponse* /*response*/)
      #else
      virtual ::grpc::experimental::ServerUnaryReactor* GetVersion(
        ::grpc::experimental::CallbackServerContext* /*context*/, const ::mavsdk::rpc::info::GetVersionRequest* /*request*/, ::mavsdk::rpc::info::GetVersionResponse* /*response*/)
      #endif
        { return nullptr; }
    };
    #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
    typedef ExperimentalWithCallbackMethod_GetFlightInformation<ExperimentalWithCallbackMethod_GetIdentification<ExperimentalWithCallbackMethod_GetProduct<ExperimentalWithCallbackMethod_GetVersion<Service > > > > CallbackService;
    #endif
  
    typedef ExperimentalWithCallbackMethod_GetFlightInformation<ExperimentalWithCallbackMethod_GetIdentification<ExperimentalWithCallbackMethod_GetProduct<ExperimentalWithCallbackMethod_GetVersion<Service > > > > ExperimentalCallbackService;
    template <class BaseClass>
    class WithGenericMethod_GetFlightInformation : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      WithGenericMethod_GetFlightInformation() {
        ::grpc::Service::MarkMethodGeneric(0);
      }
      ~WithGenericMethod_GetFlightInformation() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status GetFlightInformation(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetFlightInformationRequest* /*request*/, ::mavsdk::rpc::info::GetFlightInformationResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
    };
    template <class BaseClass>
    class WithGenericMethod_GetIdentification : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      WithGenericMethod_GetIdentification() {
        ::grpc::Service::MarkMethodGeneric(1);
      }
      ~WithGenericMethod_GetIdentification() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status GetIdentification(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetIdentificationRequest* /*request*/, ::mavsdk::rpc::info::GetIdentificationResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
    };
    template <class BaseClass>
    class WithGenericMethod_GetProduct : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      WithGenericMethod_GetProduct() {
        ::grpc::Service::MarkMethodGeneric(2);
      }
      ~WithGenericMethod_GetProduct() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status GetProduct(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetProductRequest* /*request*/, ::mavsdk::rpc::info::GetProductResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
    };
    template <class BaseClass>
    class WithGenericMethod_GetVersion : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      WithGenericMethod_GetVersion() {
        ::grpc::Service::MarkMethodGeneric(3);
      }
      ~WithGenericMethod_GetVersion() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status GetVersion(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetVersionRequest* /*request*/, ::mavsdk::rpc::info::GetVersionResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
    };
    template <class BaseClass>
    class WithRawMethod_GetFlightInformation : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      WithRawMethod_GetFlightInformation() {
        ::grpc::Service::MarkMethodRaw(0);
      }
      ~WithRawMethod_GetFlightInformation() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status GetFlightInformation(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetFlightInformationRequest* /*request*/, ::mavsdk::rpc::info::GetFlightInformationResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
      void RequestGetFlightInformation(::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_GetIdentification : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      WithRawMethod_GetIdentification() {
        ::grpc::Service::MarkMethodRaw(1);
      }
      ~WithRawMethod_GetIdentification() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status GetIdentification(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetIdentificationRequest* /*request*/, ::mavsdk::rpc::info::GetIdentificationResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
      void RequestGetIdentification(::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_GetProduct : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      WithRawMethod_GetProduct() {
        ::grpc::Service::MarkMethodRaw(2);
      }
      ~WithRawMethod_GetProduct() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status GetProduct(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetProductRequest* /*request*/, ::mavsdk::rpc::info::GetProductResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
      void RequestGetProduct(::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_GetVersion : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      WithRawMethod_GetVersion() {
        ::grpc::Service::MarkMethodRaw(3);
      }
      ~WithRawMethod_GetVersion() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status GetVersion(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetVersionRequest* /*request*/, ::mavsdk::rpc::info::GetVersionResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
      void RequestGetVersion(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
        ::grpc::Service::RequestAsyncUnary(3, context, request, response, new_call_cq, notification_cq, tag);
      }
    };
    template <class BaseClass>
    class ExperimentalWithRawCallbackMethod_GetFlightInformation : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      ExperimentalWithRawCallbackMethod_GetFlightInformation() {
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        ::grpc::Service::
      #else
        ::grpc::Service::experimental().
      #endif
          MarkMethodRawCallback(0,
            new ::grpc_impl::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
              [this](
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
                     ::grpc::CallbackServerContext*
      #else
                     ::grpc::experimental::CallbackServerContext*
      #endif
                       context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->GetFlightInformation(context, request, response); }));
      }
      ~ExperimentalWithRawCallbackMethod_GetFlightInformation() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status GetFlightInformation(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetFlightInformationRequest* /*request*/, ::mavsdk::rpc::info::GetFlightInformationResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
      virtual ::grpc::ServerUnaryReactor* GetFlightInformation(
        ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
      #else
      virtual ::grpc::experimental::ServerUnaryReactor* GetFlightInformation(
        ::grpc::experimental::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
      #endif
        { return nullptr; }
    };
    template <class BaseClass>
    class ExperimentalWithRawCallbackMethod_GetIdentification : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      ExperimentalWithRawCallbackMethod_GetIdentification() {
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        ::grpc::Service::
      #else
        ::grpc::Service::experimental().
      #endif
          MarkMethodRawCallback(1,
            new ::grpc_impl::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
              [this](
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
                     ::grpc::CallbackServerContext*
      #else
                     ::grpc::experimental::CallbackServerContext*
      #endif
                       context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->GetIdentification(context, request, response); }));
      }
      ~ExperimentalWithRawCallbackMethod_GetIdentification() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status GetIdentification(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetIdentificationRequest* /*request*/, ::mavsdk::rpc::info::GetIdentificationResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
      virtual ::grpc::ServerUnaryReactor* GetIdentification(
        ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
      #else
      virtual ::grpc::experimental::ServerUnaryReactor* GetIdentification(
        ::grpc::experimental::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
      #endif
        { return nullptr; }
    };
    template <class BaseClass>
    class ExperimentalWithRawCallbackMethod_GetProduct : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      ExperimentalWithRawCallbackMethod_GetProduct() {
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        ::grpc::Service::
      #else
        ::grpc::Service::experimental().
      #endif
          MarkMethodRawCallback(2,
            new ::grpc_impl::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
              [this](
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
                     ::grpc::CallbackServerContext*
      #else
                     ::grpc::experimental::CallbackServerContext*
      #endif
                       context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->GetProduct(context, request, response); }));
      }
      ~ExperimentalWithRawCallbackMethod_GetProduct() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status GetProduct(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetProductRequest* /*request*/, ::mavsdk::rpc::info::GetProductResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
      virtual ::grpc::ServerUnaryReactor* GetProduct(
        ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
      #else
      virtual ::grpc::experimental::ServerUnaryReactor* GetProduct(
        ::grpc::experimental::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
      #endif
        { return nullptr; }
    };
    template <class BaseClass>
    class ExperimentalWithRawCallbackMethod_GetVersion : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      ExperimentalWithRawCallbackMethod_GetVersion() {
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
        ::grpc::Service::
      #else
        ::grpc::Service::experimental().
      #endif
          MarkMethodRawCallback(3,
            new ::grpc_impl::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
              [this](
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
                     ::grpc::CallbackServerContext*
      #else
                     ::grpc::experimental::CallbackServerContext*
      #endif
                       context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->GetVersion(context, request, response); }));
      }
      ~ExperimentalWithRawCallbackMethod_GetVersion() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable synchronous version of this method
      ::grpc::Status GetVersion(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetVersionRequest* /*request*/, ::mavsdk::rpc::info::GetVersionResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
      virtual ::grpc::ServerUnaryReactor* GetVersion(
        ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
      #else
      virtual ::grpc::experimental::ServerUnaryReactor* GetVersion(
        ::grpc::experimental::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
      #endif
        { return nullptr; }
    };
    template <class BaseClass>
    class WithStreamedUnaryMethod_GetFlightInformation : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      WithStreamedUnaryMethod_GetFlightInformation() {
        ::grpc::Service::MarkMethodStreamed(0,
          new ::grpc::internal::StreamedUnaryHandler< ::mavsdk::rpc::info::GetFlightInformationRequest, ::mavsdk::rpc::info::GetFlightInformationResponse>(std::bind(&WithStreamedUnaryMethod_GetFlightInformation<BaseClass>::StreamedGetFlightInformation, this, std::placeholders::_1, std::placeholders::_2)));
      }
      ~WithStreamedUnaryMethod_GetFlightInformation() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable regular version of this method
      ::grpc::Status GetFlightInformation(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetFlightInformationRequest* /*request*/, ::mavsdk::rpc::info::GetFlightInformationResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
      // replace default version of method with streamed unary
      virtual ::grpc::Status StreamedGetFlightInformation(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::mavsdk::rpc::info::GetFlightInformationRequest,::mavsdk::rpc::info::GetFlightInformationResponse>* server_unary_streamer) = 0;
    };
    template <class BaseClass>
    class WithStreamedUnaryMethod_GetIdentification : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      WithStreamedUnaryMethod_GetIdentification() {
        ::grpc::Service::MarkMethodStreamed(1,
          new ::grpc::internal::StreamedUnaryHandler< ::mavsdk::rpc::info::GetIdentificationRequest, ::mavsdk::rpc::info::GetIdentificationResponse>(std::bind(&WithStreamedUnaryMethod_GetIdentification<BaseClass>::StreamedGetIdentification, this, std::placeholders::_1, std::placeholders::_2)));
      }
      ~WithStreamedUnaryMethod_GetIdentification() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable regular version of this method
      ::grpc::Status GetIdentification(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetIdentificationRequest* /*request*/, ::mavsdk::rpc::info::GetIdentificationResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
      // replace default version of method with streamed unary
      virtual ::grpc::Status StreamedGetIdentification(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::mavsdk::rpc::info::GetIdentificationRequest,::mavsdk::rpc::info::GetIdentificationResponse>* server_unary_streamer) = 0;
    };
    template <class BaseClass>
    class WithStreamedUnaryMethod_GetProduct : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      WithStreamedUnaryMethod_GetProduct() {
        ::grpc::Service::MarkMethodStreamed(2,
          new ::grpc::internal::StreamedUnaryHandler< ::mavsdk::rpc::info::GetProductRequest, ::mavsdk::rpc::info::GetProductResponse>(std::bind(&WithStreamedUnaryMethod_GetProduct<BaseClass>::StreamedGetProduct, this, std::placeholders::_1, std::placeholders::_2)));
      }
      ~WithStreamedUnaryMethod_GetProduct() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable regular version of this method
      ::grpc::Status GetProduct(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetProductRequest* /*request*/, ::mavsdk::rpc::info::GetProductResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
      // replace default version of method with streamed unary
      virtual ::grpc::Status StreamedGetProduct(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::mavsdk::rpc::info::GetProductRequest,::mavsdk::rpc::info::GetProductResponse>* server_unary_streamer) = 0;
    };
    template <class BaseClass>
    class WithStreamedUnaryMethod_GetVersion : public BaseClass {
     private:
      void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
     public:
      WithStreamedUnaryMethod_GetVersion() {
        ::grpc::Service::MarkMethodStreamed(3,
          new ::grpc::internal::StreamedUnaryHandler< ::mavsdk::rpc::info::GetVersionRequest, ::mavsdk::rpc::info::GetVersionResponse>(std::bind(&WithStreamedUnaryMethod_GetVersion<BaseClass>::StreamedGetVersion, this, std::placeholders::_1, std::placeholders::_2)));
      }
      ~WithStreamedUnaryMethod_GetVersion() override {
        BaseClassMustBeDerivedFromService(this);
      }
      // disable regular version of this method
      ::grpc::Status GetVersion(::grpc::ServerContext* /*context*/, const ::mavsdk::rpc::info::GetVersionRequest* /*request*/, ::mavsdk::rpc::info::GetVersionResponse* /*response*/) override {
        abort();
        return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
      }
      // replace default version of method with streamed unary
      virtual ::grpc::Status StreamedGetVersion(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::mavsdk::rpc::info::GetVersionRequest,::mavsdk::rpc::info::GetVersionResponse>* server_unary_streamer) = 0;
    };
    typedef WithStreamedUnaryMethod_GetFlightInformation<WithStreamedUnaryMethod_GetIdentification<WithStreamedUnaryMethod_GetProduct<WithStreamedUnaryMethod_GetVersion<Service > > > > StreamedUnaryService;
    typedef Service SplitStreamedService;
    typedef WithStreamedUnaryMethod_GetFlightInformation<WithStreamedUnaryMethod_GetIdentification<WithStreamedUnaryMethod_GetProduct<WithStreamedUnaryMethod_GetVersion<Service > > > > StreamedService;
  };
  
  }  // namespace info
  }  // namespace rpc
  }  // namespace mavsdk
  
  
  #endif  // GRPC_info_2finfo_2eproto__INCLUDED
  