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

// fidl_experiment = output_index_json

#pragma once

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

class Parent_TestBase : public ::test::inheritancewithrecursivedecl::Parent {
 public:
  virtual ~Parent_TestBase() {}
  virtual void NotImplemented_(const std::string& name) = 0;
  void First(::fidl::InterfaceRequest<::test::inheritancewithrecursivedecl::Parent> request) override {
    NotImplemented_("First");
  }
};

class Child_TestBase : public ::test::inheritancewithrecursivedecl::Child {
 public:
  virtual ~Child_TestBase() {}
  virtual void NotImplemented_(const std::string& name) = 0;
  void First(::fidl::InterfaceRequest<::test::inheritancewithrecursivedecl::Parent> request) override {
    NotImplemented_("First");
  }
  void Second(::fidl::InterfaceRequest<::test::inheritancewithrecursivedecl::Parent> request) override {
    NotImplemented_("Second");
  }
};
}  // namespace testing
}  // namespace inheritancewithrecursivedecl
}  // namespace test
