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

// fidl_experiment = output_index_json

#pragma once

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

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

namespace fidl {
namespace testing {

template <>
class TestBase<::test_inheritance::Super> : public ::fidl::Server<::test_inheritance::Super> {
 public:
  virtual ~TestBase<::test_inheritance::Super>() = default;
  virtual void NotImplemented_(const std::string& name, ::fidl::CompleterBase& completer) = 0;
  virtual void Foo(FooRequest& request,
                   FooCompleter::Sync& completer) {
    NotImplemented_("Foo", completer);
  }
};

template <>
class TestBase<::test_inheritance::Sub> : public ::fidl::Server<::test_inheritance::Sub> {
 public:
  virtual ~TestBase<::test_inheritance::Sub>() = default;
  virtual void NotImplemented_(const std::string& name, ::fidl::CompleterBase& completer) = 0;
  virtual void Foo(FooRequest& request,
                   FooCompleter::Sync& completer) {
    NotImplemented_("Foo", completer);
  }
};
#pragma clang diagnostic pop

}  // namespace testing
}  // namespace fidl
