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

#pragma once

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

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

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