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

#pragma once

#include <fidl/test/union/llcpp/fidl.h>
namespace fidl_test_union {
namespace testing {

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

  using Interface = ::fidl::WireInterface<::fidl_test_union::TestProtocol>;
  virtual void StrictXUnionHenceResponseMayBeStackAllocated(
      ::fidl::WireInterface<::fidl_test_union::TestProtocol>::
          StrictXUnionHenceResponseMayBeStackAllocatedCompleter::Sync&
              completer) override {
    NotImplemented_("StrictXUnionHenceResponseMayBeStackAllocated", completer);
  }
  virtual void FlexibleXUnionHenceResponseMustBeHeapAllocated(
      ::fidl::WireInterface<::fidl_test_union::TestProtocol>::
          FlexibleXUnionHenceResponseMustBeHeapAllocatedCompleter::Sync&
              completer) override {
    NotImplemented_("FlexibleXUnionHenceResponseMustBeHeapAllocated",
                    completer);
  }
};
}  // namespace testing
}  // namespace fidl_test_union
