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

#pragma once

#include <fidl/test/requestflexibleenvelope/llcpp/fidl.h>
namespace fidl_test_requestflexibleenvelope {
namespace testing {

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

  using Interface =
      ::fidl::WireInterface<::fidl_test_requestflexibleenvelope::Protocol>;
  virtual void RequestStrictResponseFlexible(
      ::fidl_test_requestflexibleenvelope::wire::StrictFoo s,
      ::fidl::WireServer<::fidl_test_requestflexibleenvelope::Protocol>::
          RequestStrictResponseFlexibleCompleter::Sync& completer) override {
    NotImplemented_("RequestStrictResponseFlexible", completer);
  }
  virtual void RequestFlexibleResponseStrict(
      ::fidl_test_requestflexibleenvelope::wire::FlexibleFoo s,
      ::fidl::WireServer<::fidl_test_requestflexibleenvelope::Protocol>::
          RequestFlexibleResponseStrictCompleter::Sync& completer) override {
    NotImplemented_("RequestFlexibleResponseStrict", completer);
  }
};
}  // namespace testing
}  // namespace fidl_test_requestflexibleenvelope
