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

#pragma once

#include <test/protocolrequest/cpp/fidl.h>
namespace test {
namespace protocolrequest {
namespace testing {
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");
  }
};

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