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

// fidl_experiment = output_index_json

#pragma once

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

class Protocol_TestBase : public ::test::requestflexibleenvelope::Protocol {
 public:
  virtual ~Protocol_TestBase() {}
  virtual void NotImplemented_(const std::string& name) = 0;
  void RequestStrictResponseFlexible(::test::requestflexibleenvelope::StrictFoo s, RequestStrictResponseFlexibleCallback callback) override {
    NotImplemented_("RequestStrictResponseFlexible");
  }
  void RequestFlexibleResponseStrict(::test::requestflexibleenvelope::FlexibleFoo s, RequestFlexibleResponseStrictCallback callback) override {
    NotImplemented_("RequestFlexibleResponseStrict");
  }
};
}  // namespace testing
}  // namespace requestflexibleenvelope
}  // namespace test
