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

// fidl_experiment = output_index_json

#pragma once

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

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

namespace fidl {
namespace testing {

template <>
class TestBase<::test_emptystruct::EmptyProtocol> : public ::fidl::Server<::test_emptystruct::EmptyProtocol> {
 public:
  virtual ~TestBase<::test_emptystruct::EmptyProtocol>() = default;
  virtual void NotImplemented_(const std::string& name, ::fidl::CompleterBase& completer) = 0;
  virtual void Send(SendRequest& request,
                    SendCompleter::Sync& completer) {
    NotImplemented_("Send", completer);
  }
  virtual void SendAndReceive(SendAndReceiveRequest& request,
                              SendAndReceiveCompleter::Sync& completer) {
    NotImplemented_("SendAndReceive", completer);
  }
};
#pragma clang diagnostic pop

}  // namespace testing
}  // namespace fidl
