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

// fidl_experiment = output_index_json

#pragma once

#include <fidl/test.protocolrequest/cpp/fidl.h>

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshadow"

namespace fidl {
namespace testing {

template <>
class TestBase<::test_protocolrequest::Child> : public ::fidl::Server<::test_protocolrequest::Child> {
 public:
  virtual ~TestBase<::test_protocolrequest::Child>() = default;
  virtual void NotImplemented_(const std::string& name, ::fidl::CompleterBase& completer) = 0;
};

template <>
class TestBase<::test_protocolrequest::Parent> : public ::fidl::Server<::test_protocolrequest::Parent> {
 public:
  virtual ~TestBase<::test_protocolrequest::Parent>() = default;
  virtual void NotImplemented_(const std::string& name, ::fidl::CompleterBase& completer) = 0;
  virtual void GetChild(
      GetChildCompleter::Sync& completer) {
    NotImplemented_("GetChild", completer);
  }
  virtual void GetChildRequest(
      GetChildRequestCompleter::Sync& completer) {
    NotImplemented_("GetChildRequest", completer);
  }
  virtual void TakeChild(TakeChildRequest& request,
                         TakeChildCompleter::Sync& completer) {
    NotImplemented_("TakeChild", completer);
  }
  virtual void TakeChildRequest(TakeChildRequestRequest& request,
                                TakeChildRequestCompleter::Sync& completer) {
    NotImplemented_("TakeChildRequest", completer);
  }
};
#pragma clang diagnostic pop

}  // namespace testing
}  // namespace fidl
