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

// fidl_experiment = output_index_json

#pragma once

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

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

namespace fidl {
namespace testing {

template <>
class TestBase<::test_placementofattributes::ExampleProtocol> : public ::fidl::Server<::test_placementofattributes::ExampleProtocol> {
 public:
  virtual ~TestBase<::test_placementofattributes::ExampleProtocol>() = default;
  virtual void NotImplemented_(const std::string& name, ::fidl::CompleterBase& completer) = 0;
  virtual void Method(MethodRequest& request,
                      MethodCompleter::Sync& completer) {
    NotImplemented_("Method", completer);
  }
};
#pragma clang diagnostic pop

}  // namespace testing
}  // namespace fidl
