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

// fidl_experiment = output_index_json

#include <fidl/test.inheritance/cpp/natural_ostream.h>

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshadow"

std::ostream& fidl::ostream::Formatter<::test_inheritance::SuperFooRequest>::Format(std::ostream& os, const ::test_inheritance::SuperFooRequest& value) {
  os << "test_inheritance::SuperFooRequest";
  os << "{ ";
  os << "s";
  os << " = " << fidl::ostream::Formatted<::std::string>(value.s()) << ", ";
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_inheritance::SuperFooResponse>::Format(std::ostream& os, const ::test_inheritance::SuperFooResponse& value) {
  os << "test_inheritance::SuperFooResponse";
  os << "{ ";
  os << "y";
  os << " = " << fidl::ostream::Formatted<int64_t>(value.y()) << ", ";
  os << "}";
  return os;
}

namespace test_inheritance {

std::ostream& operator<<(std::ostream& os, const ::test_inheritance::SuperFooRequest& value) {
  return fidl::ostream::Formatter<::test_inheritance::SuperFooRequest>::Format(os, value);
}

std::ostream& operator<<(std::ostream& os, const ::test_inheritance::SuperFooResponse& value) {
  return fidl::ostream::Formatter<::test_inheritance::SuperFooResponse>::Format(os, value);
}

#pragma clang diagnostic pop

}  // namespace test_inheritance
