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

#pragma once

#include <fidl/test/transitivedependenciescompose/llcpp/fidl.h>
namespace fidl_test_transitivedependenciescompose {
namespace testing {

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

  using Interface =
      ::fidl::WireInterface<::fidl_test_transitivedependenciescompose::Top>;
  virtual void GetFoo(
      ::fidl::WireServer<::fidl_test_transitivedependenciescompose::Top>::
          GetFooCompleter::Sync& completer) override {
    NotImplemented_("GetFoo", completer);
  }
};
}  // namespace testing
}  // namespace fidl_test_transitivedependenciescompose
