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

// fidl_experiment = output_index_json

#pragma once

#include <fidl/test.doccomments/cpp/wire.h>

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

namespace fidl {
namespace testing {

template <>
class WireTestBase<::test_doccomments::Interface> : public ::fidl::WireServer<::test_doccomments::Interface> {
 public:
  virtual ~WireTestBase<::test_doccomments::Interface>() = default;
  virtual void NotImplemented_(const std::string& name, ::fidl::CompleterBase& completer) = 0;
  virtual void Method(
      MethodCompleter::Sync& completer) override {
    NotImplemented_("Method", completer);
  }
};

template <>
class WireSyncEventHandlerTestBase<::test_doccomments::Interface> : public ::fidl::WireSyncEventHandler<::test_doccomments::Interface> {
 public:
  virtual ~WireSyncEventHandlerTestBase<::test_doccomments::Interface>() = default;
  virtual void NotImplemented_(const std::string& name) = 0;
  void OnEvent() override {
    NotImplemented_("OnEvent");
  }
};
#pragma clang diagnostic pop

}  // namespace testing
}  // namespace fidl
