// WARNING: This file is machine generated by fidlgen.

#pragma once

#include <fidl/test/emptystruct/llcpp/fidl.h>
namespace fidl_test_emptystruct {
namespace testing {

class EmptyProtocol_TestBase
    : public ::fidl::WireInterface<::fidl_test_emptystruct::EmptyProtocol> {
 public:
  virtual ~EmptyProtocol_TestBase() {}
  virtual void NotImplemented_(const std::string& name,
                               ::fidl::CompleterBase& completer) = 0;

  using Interface =
      ::fidl::WireInterface<::fidl_test_emptystruct::EmptyProtocol>;
  virtual void Send(::fidl_test_emptystruct::wire::Empty e,
                    ::fidl::WireServer<::fidl_test_emptystruct::EmptyProtocol>::
                        SendCompleter::Sync& completer) override {
    NotImplemented_("Send", completer);
  }
  virtual void SendAndReceive(
      ::fidl_test_emptystruct::wire::Empty e,
      ::fidl::WireServer<::fidl_test_emptystruct::EmptyProtocol>::
          SendAndReceiveCompleter::Sync& completer) override {
    NotImplemented_("SendAndReceive", completer);
  }
};
}  // namespace testing
}  // namespace fidl_test_emptystruct
