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

// fidl_experiment = output_index_json

#pragma once

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

class EmptyProtocol_TestBase : public ::test::emptystruct::EmptyProtocol {
 public:
  virtual ~EmptyProtocol_TestBase() {}
  virtual void NotImplemented_(const std::string& name) = 0;
  void Send(::test::emptystruct::Empty e) override {
    NotImplemented_("Send");
  }
  void SendAndReceive(::test::emptystruct::Empty e, SendAndReceiveCallback callback) override {
    NotImplemented_("SendAndReceive");
  }
};
}  // namespace testing
}  // namespace emptystruct
}  // namespace test
