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

#pragma once

#include <fidl/test/service/llcpp/fidl.h>
namespace fidl_test_service {
namespace testing {

class SecondProtocol_TestBase
    : public ::fidl::WireInterface<::fidl_test_service::SecondProtocol> {
 public:
  virtual ~SecondProtocol_TestBase() {}
  virtual void NotImplemented_(const std::string& name,
                               ::fidl::CompleterBase& completer) = 0;

  using Interface = ::fidl::WireInterface<::fidl_test_service::SecondProtocol>;
  virtual void MethodOnSecond(
      ::fidl::WireServer<::fidl_test_service::SecondProtocol>::
          MethodOnSecondCompleter::Sync& completer) override {
    NotImplemented_("MethodOnSecond", completer);
  }
};

class FirstProtocol_TestBase
    : public ::fidl::WireInterface<::fidl_test_service::FirstProtocol> {
 public:
  virtual ~FirstProtocol_TestBase() {}
  virtual void NotImplemented_(const std::string& name,
                               ::fidl::CompleterBase& completer) = 0;

  using Interface = ::fidl::WireInterface<::fidl_test_service::FirstProtocol>;
  virtual void MethodOnFirst(
      ::fidl::WireServer<::fidl_test_service::FirstProtocol>::
          MethodOnFirstCompleter::Sync& completer) override {
    NotImplemented_("MethodOnFirst", completer);
  }
};
}  // namespace testing
}  // namespace fidl_test_service
