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

// fidl_experiment = output_index_json

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

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

std::ostream& fidl::ostream::Formatter<::test_table::EmptyTable>::Format(std::ostream& os, const ::test_table::EmptyTable& value) {
  os << "test_table::EmptyTable";
  os << "{ ";
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_table::SimpleTable>::Format(std::ostream& os, const ::test_table::SimpleTable& value) {
  os << "test_table::SimpleTable";
  os << "{ ";
  if (value.x().has_value()) {
    os << "x";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.x().value()) << ", ";
  }
  if (value.y().has_value()) {
    os << "y";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.y().value()) << ", ";
  }
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_table::OlderSimpleTable>::Format(std::ostream& os, const ::test_table::OlderSimpleTable& value) {
  os << "test_table::OlderSimpleTable";
  os << "{ ";
  if (value.x().has_value()) {
    os << "x";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.x().value()) << ", ";
  }
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_table::NewerSimpleTable>::Format(std::ostream& os, const ::test_table::NewerSimpleTable& value) {
  os << "test_table::NewerSimpleTable";
  os << "{ ";
  if (value.x().has_value()) {
    os << "x";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.x().value()) << ", ";
  }
  if (value.y().has_value()) {
    os << "y";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.y().value()) << ", ";
  }
  if (value.z().has_value()) {
    os << "z";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.z().value()) << ", ";
  }
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_table::ReverseOrdinalTable>::Format(std::ostream& os, const ::test_table::ReverseOrdinalTable& value) {
  os << "test_table::ReverseOrdinalTable";
  os << "{ ";
  if (value.z().has_value()) {
    os << "z";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.z().value()) << ", ";
  }
  if (value.y().has_value()) {
    os << "y";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.y().value()) << ", ";
  }
  if (value.x().has_value()) {
    os << "x";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.x().value()) << ", ";
  }
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_table::TableWithAttributes>::Format(std::ostream& os, const ::test_table::TableWithAttributes& value) {
  os << "test_table::TableWithAttributes";
  os << "{ ";
  if (value.x().has_value()) {
    os << "x";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.x().value()) << ", ";
  }
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_table::ExtensionTable>::Format(std::ostream& os, const ::test_table::ExtensionTable& value) {
  os << "test_table::ExtensionTable";
  os << "{ ";
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_table::SixtyFourOrdinalTable>::Format(std::ostream& os, const ::test_table::SixtyFourOrdinalTable& value) {
  os << "test_table::SixtyFourOrdinalTable";
  os << "{ ";
  if (value.v1().has_value()) {
    os << "v1";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v1().value()) << ", ";
  }
  if (value.v2().has_value()) {
    os << "v2";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v2().value()) << ", ";
  }
  if (value.v3().has_value()) {
    os << "v3";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v3().value()) << ", ";
  }
  if (value.v4().has_value()) {
    os << "v4";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v4().value()) << ", ";
  }
  if (value.v5().has_value()) {
    os << "v5";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v5().value()) << ", ";
  }
  if (value.v6().has_value()) {
    os << "v6";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v6().value()) << ", ";
  }
  if (value.v7().has_value()) {
    os << "v7";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v7().value()) << ", ";
  }
  if (value.v8().has_value()) {
    os << "v8";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v8().value()) << ", ";
  }
  if (value.v9().has_value()) {
    os << "v9";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v9().value()) << ", ";
  }
  if (value.v10().has_value()) {
    os << "v10";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v10().value()) << ", ";
  }
  if (value.v11().has_value()) {
    os << "v11";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v11().value()) << ", ";
  }
  if (value.v12().has_value()) {
    os << "v12";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v12().value()) << ", ";
  }
  if (value.v13().has_value()) {
    os << "v13";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v13().value()) << ", ";
  }
  if (value.v14().has_value()) {
    os << "v14";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v14().value()) << ", ";
  }
  if (value.v15().has_value()) {
    os << "v15";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v15().value()) << ", ";
  }
  if (value.v16().has_value()) {
    os << "v16";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v16().value()) << ", ";
  }
  if (value.v17().has_value()) {
    os << "v17";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v17().value()) << ", ";
  }
  if (value.v18().has_value()) {
    os << "v18";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v18().value()) << ", ";
  }
  if (value.v19().has_value()) {
    os << "v19";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v19().value()) << ", ";
  }
  if (value.v20().has_value()) {
    os << "v20";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v20().value()) << ", ";
  }
  if (value.v21().has_value()) {
    os << "v21";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v21().value()) << ", ";
  }
  if (value.v22().has_value()) {
    os << "v22";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v22().value()) << ", ";
  }
  if (value.v23().has_value()) {
    os << "v23";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v23().value()) << ", ";
  }
  if (value.v24().has_value()) {
    os << "v24";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v24().value()) << ", ";
  }
  if (value.v25().has_value()) {
    os << "v25";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v25().value()) << ", ";
  }
  if (value.v26().has_value()) {
    os << "v26";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v26().value()) << ", ";
  }
  if (value.v27().has_value()) {
    os << "v27";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v27().value()) << ", ";
  }
  if (value.v28().has_value()) {
    os << "v28";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v28().value()) << ", ";
  }
  if (value.v29().has_value()) {
    os << "v29";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v29().value()) << ", ";
  }
  if (value.v30().has_value()) {
    os << "v30";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v30().value()) << ", ";
  }
  if (value.v31().has_value()) {
    os << "v31";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v31().value()) << ", ";
  }
  if (value.v32().has_value()) {
    os << "v32";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v32().value()) << ", ";
  }
  if (value.v33().has_value()) {
    os << "v33";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v33().value()) << ", ";
  }
  if (value.v34().has_value()) {
    os << "v34";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v34().value()) << ", ";
  }
  if (value.v35().has_value()) {
    os << "v35";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v35().value()) << ", ";
  }
  if (value.v36().has_value()) {
    os << "v36";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v36().value()) << ", ";
  }
  if (value.v37().has_value()) {
    os << "v37";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v37().value()) << ", ";
  }
  if (value.v38().has_value()) {
    os << "v38";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v38().value()) << ", ";
  }
  if (value.v39().has_value()) {
    os << "v39";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v39().value()) << ", ";
  }
  if (value.v40().has_value()) {
    os << "v40";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v40().value()) << ", ";
  }
  if (value.v41().has_value()) {
    os << "v41";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v41().value()) << ", ";
  }
  if (value.v42().has_value()) {
    os << "v42";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v42().value()) << ", ";
  }
  if (value.v43().has_value()) {
    os << "v43";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v43().value()) << ", ";
  }
  if (value.v44().has_value()) {
    os << "v44";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v44().value()) << ", ";
  }
  if (value.v45().has_value()) {
    os << "v45";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v45().value()) << ", ";
  }
  if (value.v46().has_value()) {
    os << "v46";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v46().value()) << ", ";
  }
  if (value.v47().has_value()) {
    os << "v47";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v47().value()) << ", ";
  }
  if (value.v48().has_value()) {
    os << "v48";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v48().value()) << ", ";
  }
  if (value.v49().has_value()) {
    os << "v49";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v49().value()) << ", ";
  }
  if (value.v50().has_value()) {
    os << "v50";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v50().value()) << ", ";
  }
  if (value.v51().has_value()) {
    os << "v51";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v51().value()) << ", ";
  }
  if (value.v52().has_value()) {
    os << "v52";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v52().value()) << ", ";
  }
  if (value.v53().has_value()) {
    os << "v53";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v53().value()) << ", ";
  }
  if (value.v54().has_value()) {
    os << "v54";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v54().value()) << ", ";
  }
  if (value.v55().has_value()) {
    os << "v55";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v55().value()) << ", ";
  }
  if (value.v56().has_value()) {
    os << "v56";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v56().value()) << ", ";
  }
  if (value.v57().has_value()) {
    os << "v57";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v57().value()) << ", ";
  }
  if (value.v58().has_value()) {
    os << "v58";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v58().value()) << ", ";
  }
  if (value.v59().has_value()) {
    os << "v59";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v59().value()) << ", ";
  }
  if (value.v60().has_value()) {
    os << "v60";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v60().value()) << ", ";
  }
  if (value.v61().has_value()) {
    os << "v61";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v61().value()) << ", ";
  }
  if (value.v62().has_value()) {
    os << "v62";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v62().value()) << ", ";
  }
  if (value.v63().has_value()) {
    os << "v63";
    os << " = " << fidl::ostream::Formatted<int64_t>(value.v63().value()) << ", ";
  }
  if (value.v64().has_value()) {
    os << "v64";
    os << " = " << fidl::ostream::Formatted<::test_table::ExtensionTable>(value.v64().value()) << ", ";
  }
  os << "}";
  return os;
}

namespace test_table {

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

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

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

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

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

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

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

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

#pragma clang diagnostic pop

}  // namespace test_table
