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

// fidl_experiment = output_index_json

#pragma once

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

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

namespace fidl {
namespace testing {

template <>
class TestBase<::test_errorsyntax::ExampleUseOfErrorSyntax> : public ::fidl::Server<::test_errorsyntax::ExampleUseOfErrorSyntax> {
 public:
  virtual ~TestBase<::test_errorsyntax::ExampleUseOfErrorSyntax>() = default;
  virtual void NotImplemented_(const std::string& name, ::fidl::CompleterBase& completer) = 0;
  virtual void ComposedCallWhichMayFail(ComposedCallWhichMayFailRequest& request,
                                        ComposedCallWhichMayFailCompleter::Sync& completer) {
    NotImplemented_("ComposedCallWhichMayFail", completer);
  }
  virtual void CallWhichMayFail(CallWhichMayFailRequest& request,
                                CallWhichMayFailCompleter::Sync& completer) {
    NotImplemented_("CallWhichMayFail", completer);
  }
};
#pragma clang diagnostic pop

}  // namespace testing
}  // namespace fidl
