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

// fidl_experiment = output_index_json

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

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

std::ostream& fidl::ostream::Formatter<::test_protocolpayloads::LocalStructPayload>::Format(std::ostream& os, const ::test_protocolpayloads::LocalStructPayload& value) {
  os << "test_protocolpayloads::LocalStructPayload";
  os << "{ ";
  os << "a";
  os << " = " << fidl::ostream::Formatted<uint32_t>(value.a()) << ", ";
  os << "b";
  os << " = " << fidl::ostream::Formatted<uint32_t>(value.b()) << ", ";
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocolpayloads::MainProtocolOneWayAnonRequest>::Format(std::ostream& os, const ::test_protocolpayloads::MainProtocolOneWayAnonRequest& value) {
  os << "test_protocolpayloads::MainProtocolOneWayAnonRequest";
  os << "{ ";
  os << "a";
  os << " = " << fidl::ostream::Formatted<uint32_t>(value.a()) << ", ";
  os << "b";
  os << " = " << fidl::ostream::Formatted<uint32_t>(value.b()) << ", ";
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocolpayloads::MainProtocolTwoWayAnonRequest>::Format(std::ostream& os, const ::test_protocolpayloads::MainProtocolTwoWayAnonRequest& value) {
  os << "test_protocolpayloads::MainProtocolTwoWayAnonRequest";
  os << "{ ";
  os << "a";
  os << " = " << fidl::ostream::Formatted<uint32_t>(value.a()) << ", ";
  os << "b";
  os << " = " << fidl::ostream::Formatted<uint32_t>(value.b()) << ", ";
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocolpayloads::MainProtocolTwoWayAnonResponse>::Format(std::ostream& os, const ::test_protocolpayloads::MainProtocolTwoWayAnonResponse& value) {
  os << "test_protocolpayloads::MainProtocolTwoWayAnonResponse";
  os << "{ ";
  os << "a";
  os << " = " << fidl::ostream::Formatted<uint32_t>(value.a()) << ", ";
  os << "b";
  os << " = " << fidl::ostream::Formatted<uint32_t>(value.b()) << ", ";
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocolpayloads::MainProtocolTwoWayAnonWithErrorRequest>::Format(std::ostream& os, const ::test_protocolpayloads::MainProtocolTwoWayAnonWithErrorRequest& value) {
  os << "test_protocolpayloads::MainProtocolTwoWayAnonWithErrorRequest";
  os << "{ ";
  os << "a";
  os << " = " << fidl::ostream::Formatted<uint32_t>(value.a()) << ", ";
  os << "b";
  os << " = " << fidl::ostream::Formatted<uint32_t>(value.b()) << ", ";
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocolpayloads::MainProtocolTwoWayAnonWithErrorResponse>::Format(std::ostream& os, const ::test_protocolpayloads::MainProtocolTwoWayAnonWithErrorResponse& value) {
  os << "test_protocolpayloads::MainProtocolTwoWayAnonWithErrorResponse";
  os << "{ ";
  os << "a";
  os << " = " << fidl::ostream::Formatted<uint32_t>(value.a()) << ", ";
  os << "b";
  os << " = " << fidl::ostream::Formatted<uint32_t>(value.b()) << ", ";
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocolpayloads::MainProtocolOnAnonRequest>::Format(std::ostream& os, const ::test_protocolpayloads::MainProtocolOnAnonRequest& value) {
  os << "test_protocolpayloads::MainProtocolOnAnonRequest";
  os << "{ ";
  os << "a";
  os << " = " << fidl::ostream::Formatted<uint32_t>(value.a()) << ", ";
  os << "b";
  os << " = " << fidl::ostream::Formatted<uint32_t>(value.b()) << ", ";
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocolpayloads::MainProtocolTwoWayLocalWithErrorResult>::Format(std::ostream& os, const ::test_protocolpayloads::MainProtocolTwoWayLocalWithErrorResult& value) {
  os << "test_protocolpayloads::MainProtocolTwoWayLocalWithErrorResult::";
  switch (value.Which()) {
    case ::test_protocolpayloads::MainProtocolTwoWayLocalWithErrorResult::Tag::kResponse:
      os << "response(" << fidl::ostream::Formatted<::test_protocolpayloads::LocalStructPayload>(value.response().value()) << ")";
      break;
    case ::test_protocolpayloads::MainProtocolTwoWayLocalWithErrorResult::Tag::kErr:
      os << "err(" << fidl::ostream::Formatted<uint32_t>(value.err().value()) << ")";
      break;
    default:
      os << "Unknown";
  }
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocolpayloads::MainProtocolTwoWayAnonWithErrorResult>::Format(std::ostream& os, const ::test_protocolpayloads::MainProtocolTwoWayAnonWithErrorResult& value) {
  os << "test_protocolpayloads::MainProtocolTwoWayAnonWithErrorResult::";
  switch (value.Which()) {
    case ::test_protocolpayloads::MainProtocolTwoWayAnonWithErrorResult::Tag::kResponse:
      os << "response(" << fidl::ostream::Formatted<::test_protocolpayloads::MainProtocolTwoWayAnonWithErrorResponse>(value.response().value()) << ")";
      break;
    case ::test_protocolpayloads::MainProtocolTwoWayAnonWithErrorResult::Tag::kErr:
      os << "err(" << fidl::ostream::Formatted<uint32_t>(value.err().value()) << ")";
      break;
    default:
      os << "Unknown";
  }
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocolpayloads::MainProtocolTwoWayImportWithErrorResult>::Format(std::ostream& os, const ::test_protocolpayloads::MainProtocolTwoWayImportWithErrorResult& value) {
  os << "test_protocolpayloads::MainProtocolTwoWayImportWithErrorResult::";
  switch (value.Which()) {
    case ::test_protocolpayloads::MainProtocolTwoWayImportWithErrorResult::Tag::kResponse:
      os << "response(" << fidl::ostream::Formatted<::test_protocolpayloads_imported::ImportStructPayload>(value.response().value()) << ")";
      break;
    case ::test_protocolpayloads::MainProtocolTwoWayImportWithErrorResult::Tag::kErr:
      os << "err(" << fidl::ostream::Formatted<uint32_t>(value.err().value()) << ")";
      break;
    default:
      os << "Unknown";
  }
  return os;
}

namespace test_protocolpayloads {

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

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

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

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

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

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

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

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

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

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

#pragma clang diagnostic pop

}  // namespace test_protocolpayloads
