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

// fidl_experiment = output_index_json

#pragma once

#include <fidl/test.emptystruct/cpp/wire.h>

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshadow"

namespace fidl {
namespace testing {

template <>
class WireTestBase<::test_emptystruct::EmptyProtocol> : public ::fidl::WireServer<::test_emptystruct::EmptyProtocol> {
 public:
  virtual ~WireTestBase<::test_emptystruct::EmptyProtocol>() = default;
  virtual void NotImplemented_(const std::string& name, ::fidl::CompleterBase& completer) = 0;
  virtual void Send(
      ::test_emptystruct::wire::EmptyProtocolSendRequest* request,
      SendCompleter::Sync& completer) override {
    NotImplemented_("Send", completer);
  }
  virtual void SendAndReceive(
      ::test_emptystruct::wire::EmptyProtocolSendAndReceiveRequest* request,
      SendAndReceiveCompleter::Sync& completer) override {
    NotImplemented_("SendAndReceive", completer);
  }
};

template <>
class WireSyncEventHandlerTestBase<::test_emptystruct::EmptyProtocol> : public ::fidl::WireSyncEventHandler<::test_emptystruct::EmptyProtocol> {
 public:
  virtual ~WireSyncEventHandlerTestBase<::test_emptystruct::EmptyProtocol>() = default;
  virtual void NotImplemented_(const std::string& name) = 0;
  void Receive(::fidl::WireEvent<::test_emptystruct::EmptyProtocol::Receive>* event) override {
    NotImplemented_("Receive");
  }
};
#pragma clang diagnostic pop

}  // namespace testing
}  // namespace fidl
