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

// fidl_experiment = output_index_json

#pragma once

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

class Child_TestBase : public ::test::protocolrequest::Child {
 public:
  virtual ~Child_TestBase() {}
  virtual void NotImplemented_(const std::string& name) = 0;
};

class Parent_TestBase : public ::test::protocolrequest::Parent {
 public:
  virtual ~Parent_TestBase() {}
  virtual void NotImplemented_(const std::string& name) = 0;
  void GetChild(GetChildCallback callback) override {
    NotImplemented_("GetChild");
  }
  void GetChildRequest(GetChildRequestCallback callback) override {
    NotImplemented_("GetChildRequest");
  }
  void TakeChild(::fidl::InterfaceHandle<::test::protocolrequest::Child> c) override {
    NotImplemented_("TakeChild");
  }
  void TakeChildRequest(::fidl::InterfaceRequest<::test::protocolrequest::Child> r) override {
    NotImplemented_("TakeChildRequest");
  }
};
}  // namespace testing
}  // namespace protocolrequest
}  // namespace test
