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

// fidl_experiment = output_index_json

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

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

std::ostream& fidl::ostream::Formatter<::test_drivertwoway::TwoWayAddRequest>::Format(std::ostream& os, const ::test_drivertwoway::TwoWayAddRequest& value) {
  os << "test_drivertwoway::TwoWayAddRequest";
  os << "{ ";
  os << "addend1";
  os << " = " << fidl::ostream::Formatted<uint16_t>(value.addend1()) << ", ";
  os << "addend2";
  os << " = " << fidl::ostream::Formatted<uint16_t>(value.addend2()) << ", ";
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_drivertwoway::TwoWayAddResponse>::Format(std::ostream& os, const ::test_drivertwoway::TwoWayAddResponse& value) {
  os << "test_drivertwoway::TwoWayAddResponse";
  os << "{ ";
  os << "sum";
  os << " = " << fidl::ostream::Formatted<uint16_t>(value.sum()) << ", ";
  os << "}";
  return os;
}

namespace test_drivertwoway {

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

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

#pragma clang diagnostic pop

}  // namespace test_drivertwoway
