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

// fidl_experiment = output_index_json

#pragma once

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

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

namespace fidl {
namespace testing {

template <>
class WireTestBase<::test_nullable::SimpleProtocol> : public ::fidl::WireServer<::test_nullable::SimpleProtocol> {
 public:
  virtual ~WireTestBase<::test_nullable::SimpleProtocol>() = default;
  virtual void NotImplemented_(const std::string& name, ::fidl::CompleterBase& completer) = 0;
  virtual void Add(
      ::test_nullable::wire::SimpleProtocolAddRequest* request,
      AddCompleter::Sync& completer) override {
    NotImplemented_("Add", completer);
  }
};

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

}  // namespace testing
}  // namespace fidl
