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

// fidl_experiment = output_index_json

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

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

std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::Enum>::Format(std::ostream& os, const ::test_typesinprotocols::Enum& value) {
  os << "test_typesinprotocols::Enum";
  os << "::";
  switch (value) {
    case ::test_typesinprotocols::Enum::kVal:
      os << "kVal";
      break;
    default:
      os << "UNKNOWN(" << static_cast<uint32_t>(value) << ")";
  }
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::Bits>::Format(std::ostream& os, const ::test_typesinprotocols::Bits& value) {
  os << "test_typesinprotocols::Bits";
  os << "(";
  bool first = true;
  if (value & ::test_typesinprotocols::Bits::kVal) {
    if (!first) os << "|";
    first = false;
    os << "kVal";
  }
  if (value.has_unknown_bits()) {
    if (!first) os << "|";
    os << static_cast<uint32_t>(value.unknown_bits());
  }
  os << ")";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::Struct>::Format(std::ostream& os, const ::test_typesinprotocols::Struct& value) {
  os << "test_typesinprotocols::Struct";
  os << "{ ";
  os << "__reserved";
  os << " = " << fidl::ostream::Formatted<uint8_t>(value.__reserved()) << ", ";
  os << "}";
  return os;
}
#ifdef __Fuchsia__

std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::ResourceStruct>::Format(std::ostream& os, const ::test_typesinprotocols::ResourceStruct& value) {
  os << "test_typesinprotocols::ResourceStruct";
  os << "{ ";
  os << "__reserved";
  os << " = " << fidl::ostream::Formatted<uint8_t>(value.__reserved()) << ", ";
  os << "}";
  return os;
}

#endif  // __Fuchsia__

std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::Basic>::Format(std::ostream& os, const ::test_typesinprotocols::Basic& value) {
  os << "test_typesinprotocols::Basic";
  os << "{ ";
  os << "uint8";
  os << " = " << fidl::ostream::Formatted<uint8_t>(value.uint8()) << ", ";
  os << "uint16";
  os << " = " << fidl::ostream::Formatted<uint16_t>(value.uint16()) << ", ";
  os << "uint32";
  os << " = " << fidl::ostream::Formatted<uint32_t>(value.uint32()) << ", ";
  os << "uint64";
  os << " = " << fidl::ostream::Formatted<uint64_t>(value.uint64()) << ", ";
  os << "int8";
  os << " = " << fidl::ostream::Formatted<int8_t>(value.int8()) << ", ";
  os << "int16";
  os << " = " << fidl::ostream::Formatted<int16_t>(value.int16()) << ", ";
  os << "int32";
  os << " = " << fidl::ostream::Formatted<int32_t>(value.int32()) << ", ";
  os << "int64";
  os << " = " << fidl::ostream::Formatted<int64_t>(value.int64()) << ", ";
  os << "float32";
  os << " = " << fidl::ostream::Formatted<float>(value.float32()) << ", ";
  os << "float64";
  os << " = " << fidl::ostream::Formatted<double>(value.float64()) << ", ";
  os << "string";
  os << " = " << fidl::ostream::Formatted<::std::string>(value.string()) << ", ";
  os << "opt_string";
  os << " = " << fidl::ostream::Formatted<::std::optional<::std::string>>(value.opt_string()) << ", ";
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::Compound>::Format(std::ostream& os, const ::test_typesinprotocols::Compound& value) {
  os << "test_typesinprotocols::Compound";
  os << "{ ";
  os << "bits";
  os << " = " << fidl::ostream::Formatted<::test_typesinprotocols::Bits>(value.bits()) << ", ";
  os << "enum_";
  os << " = " << fidl::ostream::Formatted<::test_typesinprotocols::Enum>(value.enum_()) << ", ";
  os << "struct_";
  os << " = " << fidl::ostream::Formatted<::test_typesinprotocols::Struct>(value.struct_()) << ", ";
  os << "table";
  os << " = " << fidl::ostream::Formatted<::test_typesinprotocols::Table>(value.table()) << ", ";
  os << "union_";
  os << " = " << fidl::ostream::Formatted<::test_typesinprotocols::Union>(value.union_()) << ", ";
  os << "opt_struct";
  os << " = " << fidl::ostream::Formatted<::fidl::Box<::test_typesinprotocols::Struct>>(value.opt_struct()) << ", ";
  os << "opt_union";
  os << " = " << fidl::ostream::Formatted<::fidl::Box<::test_typesinprotocols::Union>>(value.opt_union()) << ", ";
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::ArrayBasic>::Format(std::ostream& os, const ::test_typesinprotocols::ArrayBasic& value) {
  os << "test_typesinprotocols::ArrayBasic";
  os << "{ ";
  os << "array_uint8";
  os << " = " << fidl::ostream::Formatted<::std::array<uint8_t, 5>>(value.array_uint8()) << ", ";
  os << "array_uint16";
  os << " = " << fidl::ostream::Formatted<::std::array<uint16_t, 5>>(value.array_uint16()) << ", ";
  os << "array_uint32";
  os << " = " << fidl::ostream::Formatted<::std::array<uint32_t, 5>>(value.array_uint32()) << ", ";
  os << "array_uint64";
  os << " = " << fidl::ostream::Formatted<::std::array<uint64_t, 5>>(value.array_uint64()) << ", ";
  os << "array_int8";
  os << " = " << fidl::ostream::Formatted<::std::array<int8_t, 5>>(value.array_int8()) << ", ";
  os << "array_int16";
  os << " = " << fidl::ostream::Formatted<::std::array<int16_t, 5>>(value.array_int16()) << ", ";
  os << "array_int32";
  os << " = " << fidl::ostream::Formatted<::std::array<int32_t, 5>>(value.array_int32()) << ", ";
  os << "array_int64";
  os << " = " << fidl::ostream::Formatted<::std::array<int64_t, 5>>(value.array_int64()) << ", ";
  os << "array_float32";
  os << " = " << fidl::ostream::Formatted<::std::array<float, 5>>(value.array_float32()) << ", ";
  os << "array_float64";
  os << " = " << fidl::ostream::Formatted<::std::array<double, 5>>(value.array_float64()) << ", ";
  os << "array_string";
  os << " = " << fidl::ostream::Formatted<::std::array<::std::string, 5>>(value.array_string()) << ", ";
  os << "array_opt_string";
  os << " = " << fidl::ostream::Formatted<::std::array<::std::optional<::std::string>, 5>>(value.array_opt_string()) << ", ";
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::ArrayCompound>::Format(std::ostream& os, const ::test_typesinprotocols::ArrayCompound& value) {
  os << "test_typesinprotocols::ArrayCompound";
  os << "{ ";
  os << "array_bits";
  os << " = " << fidl::ostream::Formatted<::std::array<::test_typesinprotocols::Bits, 5>>(value.array_bits()) << ", ";
  os << "array_enum";
  os << " = " << fidl::ostream::Formatted<::std::array<::test_typesinprotocols::Enum, 5>>(value.array_enum()) << ", ";
  os << "array_struct";
  os << " = " << fidl::ostream::Formatted<::std::array<::test_typesinprotocols::Struct, 5>>(value.array_struct()) << ", ";
  os << "array_table";
  os << " = " << fidl::ostream::Formatted<::std::array<::test_typesinprotocols::Table, 5>>(value.array_table()) << ", ";
  os << "array_union";
  os << " = " << fidl::ostream::Formatted<::std::array<::test_typesinprotocols::Union, 5>>(value.array_union()) << ", ";
  os << "array_opt_struct";
  os << " = " << fidl::ostream::Formatted<::std::array<::fidl::Box<::test_typesinprotocols::Struct>, 5>>(value.array_opt_struct()) << ", ";
  os << "array_opt_union";
  os << " = " << fidl::ostream::Formatted<::std::array<::fidl::Box<::test_typesinprotocols::Union>, 5>>(value.array_opt_union()) << ", ";
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::VectorBasic>::Format(std::ostream& os, const ::test_typesinprotocols::VectorBasic& value) {
  os << "test_typesinprotocols::VectorBasic";
  os << "{ ";
  os << "vector_uint8";
  os << " = " << fidl::ostream::Formatted<::std::vector<uint8_t>>(value.vector_uint8()) << ", ";
  os << "vector_uint16";
  os << " = " << fidl::ostream::Formatted<::std::vector<uint16_t>>(value.vector_uint16()) << ", ";
  os << "vector_uint32";
  os << " = " << fidl::ostream::Formatted<::std::vector<uint32_t>>(value.vector_uint32()) << ", ";
  os << "vector_uint64";
  os << " = " << fidl::ostream::Formatted<::std::vector<uint64_t>>(value.vector_uint64()) << ", ";
  os << "vector_int8";
  os << " = " << fidl::ostream::Formatted<::std::vector<int8_t>>(value.vector_int8()) << ", ";
  os << "vector_int16";
  os << " = " << fidl::ostream::Formatted<::std::vector<int16_t>>(value.vector_int16()) << ", ";
  os << "vector_int32";
  os << " = " << fidl::ostream::Formatted<::std::vector<int32_t>>(value.vector_int32()) << ", ";
  os << "vector_int64";
  os << " = " << fidl::ostream::Formatted<::std::vector<int64_t>>(value.vector_int64()) << ", ";
  os << "vector_float32";
  os << " = " << fidl::ostream::Formatted<::std::vector<float>>(value.vector_float32()) << ", ";
  os << "vector_float64";
  os << " = " << fidl::ostream::Formatted<::std::vector<double>>(value.vector_float64()) << ", ";
  os << "vector_string";
  os << " = " << fidl::ostream::Formatted<::std::vector<::std::string>>(value.vector_string()) << ", ";
  os << "vector_opt_string";
  os << " = " << fidl::ostream::Formatted<::std::vector<::std::optional<::std::string>>>(value.vector_opt_string()) << ", ";
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::VectorCompound>::Format(std::ostream& os, const ::test_typesinprotocols::VectorCompound& value) {
  os << "test_typesinprotocols::VectorCompound";
  os << "{ ";
  os << "vector_bits";
  os << " = " << fidl::ostream::Formatted<::std::vector<::test_typesinprotocols::Bits>>(value.vector_bits()) << ", ";
  os << "vector_enum";
  os << " = " << fidl::ostream::Formatted<::std::vector<::test_typesinprotocols::Enum>>(value.vector_enum()) << ", ";
  os << "vector_struct";
  os << " = " << fidl::ostream::Formatted<::std::vector<::test_typesinprotocols::Struct>>(value.vector_struct()) << ", ";
  os << "vector_table";
  os << " = " << fidl::ostream::Formatted<::std::vector<::test_typesinprotocols::Table>>(value.vector_table()) << ", ";
  os << "vector_union";
  os << " = " << fidl::ostream::Formatted<::std::vector<::test_typesinprotocols::Union>>(value.vector_union()) << ", ";
  os << "vector_opt_struct";
  os << " = " << fidl::ostream::Formatted<::std::vector<::fidl::Box<::test_typesinprotocols::Struct>>>(value.vector_opt_struct()) << ", ";
  os << "vector_opt_union";
  os << " = " << fidl::ostream::Formatted<::std::vector<::fidl::Box<::test_typesinprotocols::Union>>>(value.vector_opt_union()) << ", ";
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::VectorOptional>::Format(std::ostream& os, const ::test_typesinprotocols::VectorOptional& value) {
  os << "test_typesinprotocols::VectorOptional";
  os << "{ ";
  os << "opt_vector_uint8";
  os << " = " << fidl::ostream::Formatted<::std::optional<::std::vector<uint8_t>>>(value.opt_vector_uint8()) << ", ";
  os << "opt_vector_string";
  os << " = " << fidl::ostream::Formatted<::std::optional<::std::vector<::std::string>>>(value.opt_vector_string()) << ", ";
  os << "opt_vector_struct";
  os << " = " << fidl::ostream::Formatted<::std::optional<::std::vector<::test_typesinprotocols::Struct>>>(value.opt_vector_struct()) << ", ";
  os << "opt_vector_opt_struct";
  os << " = " << fidl::ostream::Formatted<::std::optional<::std::vector<::fidl::Box<::test_typesinprotocols::Struct>>>>(value.opt_vector_opt_struct()) << ", ";
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::ArrayVectorNested>::Format(std::ostream& os, const ::test_typesinprotocols::ArrayVectorNested& value) {
  os << "test_typesinprotocols::ArrayVectorNested";
  os << "{ ";
  os << "array_array_uint8";
  os << " = " << fidl::ostream::Formatted<::std::array<::std::array<uint8_t, 5>, 5>>(value.array_array_uint8()) << ", ";
  os << "array_vector_uint8";
  os << " = " << fidl::ostream::Formatted<::std::array<::std::vector<uint8_t>, 5>>(value.array_vector_uint8()) << ", ";
  os << "vector_array_uint8";
  os << " = " << fidl::ostream::Formatted<::std::vector<::std::array<uint8_t, 5>>>(value.vector_array_uint8()) << ", ";
  os << "vector_vector_uint8";
  os << " = " << fidl::ostream::Formatted<::std::vector<::std::vector<uint8_t>>>(value.vector_vector_uint8()) << ", ";
  os << "}";
  return os;
}
#ifdef __Fuchsia__

std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::Resource>::Format(std::ostream& os, const ::test_typesinprotocols::Resource& value) {
  os << "test_typesinprotocols::Resource";
  os << "{ ";
  os << "handle";
  os << " = " << fidl::ostream::Formatted<::zx::handle>(value.handle()) << ", ";
  os << "vmo";
  os << " = " << fidl::ostream::Formatted<::zx::vmo>(value.vmo()) << ", ";
  os << "client_end";
  os << " = " << fidl::ostream::Formatted<::fidl::ClientEnd<::test_typesinprotocols::Protocol>>(value.client_end()) << ", ";
  os << "server_end";
  os << " = " << fidl::ostream::Formatted<::fidl::ServerEnd<::test_typesinprotocols::Protocol>>(value.server_end()) << ", ";
  os << "struct_";
  os << " = " << fidl::ostream::Formatted<::test_typesinprotocols::ResourceStruct>(value.struct_()) << ", ";
  os << "table";
  os << " = " << fidl::ostream::Formatted<::test_typesinprotocols::ResourceTable>(value.table()) << ", ";
  os << "union_";
  os << " = " << fidl::ostream::Formatted<::test_typesinprotocols::ResourceUnion>(value.union_()) << ", ";
  os << "opt_handle";
  os << " = " << fidl::ostream::Formatted<::zx::handle>(value.opt_handle()) << ", ";
  os << "opt_vmo";
  os << " = " << fidl::ostream::Formatted<::zx::vmo>(value.opt_vmo()) << ", ";
  os << "opt_client_end";
  os << " = " << fidl::ostream::Formatted<::fidl::ClientEnd<::test_typesinprotocols::Protocol>>(value.opt_client_end()) << ", ";
  os << "opt_server_end";
  os << " = " << fidl::ostream::Formatted<::fidl::ServerEnd<::test_typesinprotocols::Protocol>>(value.opt_server_end()) << ", ";
  os << "opt_struct";
  os << " = " << fidl::ostream::Formatted<::fidl::Box<::test_typesinprotocols::ResourceStruct>>(value.opt_struct()) << ", ";
  os << "opt_union";
  os << " = " << fidl::ostream::Formatted<::fidl::Box<::test_typesinprotocols::ResourceUnion>>(value.opt_union()) << ", ";
  os << "array_handle";
  os << " = " << fidl::ostream::Formatted<::std::array<::zx::handle, 5>>(value.array_handle()) << ", ";
  os << "array_vmo";
  os << " = " << fidl::ostream::Formatted<::std::array<::zx::vmo, 5>>(value.array_vmo()) << ", ";
  os << "array_client_end";
  os << " = " << fidl::ostream::Formatted<::std::array<::fidl::ClientEnd<::test_typesinprotocols::Protocol>, 5>>(value.array_client_end()) << ", ";
  os << "array_server_end";
  os << " = " << fidl::ostream::Formatted<::std::array<::fidl::ServerEnd<::test_typesinprotocols::Protocol>, 5>>(value.array_server_end()) << ", ";
  os << "array_struct";
  os << " = " << fidl::ostream::Formatted<::std::array<::test_typesinprotocols::ResourceStruct, 5>>(value.array_struct()) << ", ";
  os << "array_table";
  os << " = " << fidl::ostream::Formatted<::std::array<::test_typesinprotocols::ResourceTable, 5>>(value.array_table()) << ", ";
  os << "array_union";
  os << " = " << fidl::ostream::Formatted<::std::array<::test_typesinprotocols::ResourceUnion, 5>>(value.array_union()) << ", ";
  os << "vector_handle";
  os << " = " << fidl::ostream::Formatted<::std::vector<::zx::handle>>(value.vector_handle()) << ", ";
  os << "vector_vmo";
  os << " = " << fidl::ostream::Formatted<::std::vector<::zx::vmo>>(value.vector_vmo()) << ", ";
  os << "vector_client_end";
  os << " = " << fidl::ostream::Formatted<::std::vector<::fidl::ClientEnd<::test_typesinprotocols::Protocol>>>(value.vector_client_end()) << ", ";
  os << "vector_server_end";
  os << " = " << fidl::ostream::Formatted<::std::vector<::fidl::ServerEnd<::test_typesinprotocols::Protocol>>>(value.vector_server_end()) << ", ";
  os << "vector_struct";
  os << " = " << fidl::ostream::Formatted<::std::vector<::test_typesinprotocols::ResourceStruct>>(value.vector_struct()) << ", ";
  os << "vector_table";
  os << " = " << fidl::ostream::Formatted<::std::vector<::test_typesinprotocols::ResourceTable>>(value.vector_table()) << ", ";
  os << "vector_union";
  os << " = " << fidl::ostream::Formatted<::std::vector<::test_typesinprotocols::ResourceUnion>>(value.vector_union()) << ", ";
  os << "}";
  return os;
}

#endif  // __Fuchsia__

std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::Table>::Format(std::ostream& os, const ::test_typesinprotocols::Table& value) {
  os << "test_typesinprotocols::Table";
  os << "{ ";
  os << "}";
  return os;
}
#ifdef __Fuchsia__

std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::ResourceTable>::Format(std::ostream& os, const ::test_typesinprotocols::ResourceTable& value) {
  os << "test_typesinprotocols::ResourceTable";
  os << "{ ";
  os << "}";
  return os;
}

#endif  // __Fuchsia__

std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::Union>::Format(std::ostream& os, const ::test_typesinprotocols::Union& value) {
  os << "test_typesinprotocols::Union::";
  switch (value.Which()) {
    case ::test_typesinprotocols::Union::Tag::kB:
      os << "b(" << fidl::ostream::Formatted<bool>(value.b().value()) << ")";
      break;
    default:
      os << "Unknown";
  }
  return os;
}
#ifdef __Fuchsia__

std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::ResourceUnion>::Format(std::ostream& os, const ::test_typesinprotocols::ResourceUnion& value) {
  os << "test_typesinprotocols::ResourceUnion::";
  switch (value.Which()) {
    case ::test_typesinprotocols::ResourceUnion::Tag::kB:
      os << "b(" << fidl::ostream::Formatted<bool>(value.b().value()) << ")";
      break;
    default:
      os << "Unknown";
  }
  return os;
}

#endif  // __Fuchsia__

std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::ProtocolErrorBasicResult>::Format(std::ostream& os, const ::test_typesinprotocols::ProtocolErrorBasicResult& value) {
  os << "test_typesinprotocols::ProtocolErrorBasicResult::";
  switch (value.Which()) {
    case ::test_typesinprotocols::ProtocolErrorBasicResult::Tag::kResponse:
      os << "response(" << fidl::ostream::Formatted<::test_typesinprotocols::Basic>(value.response().value()) << ")";
      break;
    case ::test_typesinprotocols::ProtocolErrorBasicResult::Tag::kErr:
      os << "err(" << fidl::ostream::Formatted<uint32_t>(value.err().value()) << ")";
      break;
    default:
      os << "Unknown";
  }
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::ProtocolErrorCompoundResult>::Format(std::ostream& os, const ::test_typesinprotocols::ProtocolErrorCompoundResult& value) {
  os << "test_typesinprotocols::ProtocolErrorCompoundResult::";
  switch (value.Which()) {
    case ::test_typesinprotocols::ProtocolErrorCompoundResult::Tag::kResponse:
      os << "response(" << fidl::ostream::Formatted<::test_typesinprotocols::Compound>(value.response().value()) << ")";
      break;
    case ::test_typesinprotocols::ProtocolErrorCompoundResult::Tag::kErr:
      os << "err(" << fidl::ostream::Formatted<uint32_t>(value.err().value()) << ")";
      break;
    default:
      os << "Unknown";
  }
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::ProtocolErrorArrayBasicResult>::Format(std::ostream& os, const ::test_typesinprotocols::ProtocolErrorArrayBasicResult& value) {
  os << "test_typesinprotocols::ProtocolErrorArrayBasicResult::";
  switch (value.Which()) {
    case ::test_typesinprotocols::ProtocolErrorArrayBasicResult::Tag::kResponse:
      os << "response(" << fidl::ostream::Formatted<::test_typesinprotocols::ArrayBasic>(value.response().value()) << ")";
      break;
    case ::test_typesinprotocols::ProtocolErrorArrayBasicResult::Tag::kErr:
      os << "err(" << fidl::ostream::Formatted<uint32_t>(value.err().value()) << ")";
      break;
    default:
      os << "Unknown";
  }
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::ProtocolErrorArrayCompoundResult>::Format(std::ostream& os, const ::test_typesinprotocols::ProtocolErrorArrayCompoundResult& value) {
  os << "test_typesinprotocols::ProtocolErrorArrayCompoundResult::";
  switch (value.Which()) {
    case ::test_typesinprotocols::ProtocolErrorArrayCompoundResult::Tag::kResponse:
      os << "response(" << fidl::ostream::Formatted<::test_typesinprotocols::ArrayCompound>(value.response().value()) << ")";
      break;
    case ::test_typesinprotocols::ProtocolErrorArrayCompoundResult::Tag::kErr:
      os << "err(" << fidl::ostream::Formatted<uint32_t>(value.err().value()) << ")";
      break;
    default:
      os << "Unknown";
  }
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::ProtocolErrorVectorBasicResult>::Format(std::ostream& os, const ::test_typesinprotocols::ProtocolErrorVectorBasicResult& value) {
  os << "test_typesinprotocols::ProtocolErrorVectorBasicResult::";
  switch (value.Which()) {
    case ::test_typesinprotocols::ProtocolErrorVectorBasicResult::Tag::kResponse:
      os << "response(" << fidl::ostream::Formatted<::test_typesinprotocols::VectorBasic>(value.response().value()) << ")";
      break;
    case ::test_typesinprotocols::ProtocolErrorVectorBasicResult::Tag::kErr:
      os << "err(" << fidl::ostream::Formatted<uint32_t>(value.err().value()) << ")";
      break;
    default:
      os << "Unknown";
  }
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::ProtocolErrorVectorCompoundResult>::Format(std::ostream& os, const ::test_typesinprotocols::ProtocolErrorVectorCompoundResult& value) {
  os << "test_typesinprotocols::ProtocolErrorVectorCompoundResult::";
  switch (value.Which()) {
    case ::test_typesinprotocols::ProtocolErrorVectorCompoundResult::Tag::kResponse:
      os << "response(" << fidl::ostream::Formatted<::test_typesinprotocols::VectorCompound>(value.response().value()) << ")";
      break;
    case ::test_typesinprotocols::ProtocolErrorVectorCompoundResult::Tag::kErr:
      os << "err(" << fidl::ostream::Formatted<uint32_t>(value.err().value()) << ")";
      break;
    default:
      os << "Unknown";
  }
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::ProtocolErrorVectorOptionalResult>::Format(std::ostream& os, const ::test_typesinprotocols::ProtocolErrorVectorOptionalResult& value) {
  os << "test_typesinprotocols::ProtocolErrorVectorOptionalResult::";
  switch (value.Which()) {
    case ::test_typesinprotocols::ProtocolErrorVectorOptionalResult::Tag::kResponse:
      os << "response(" << fidl::ostream::Formatted<::test_typesinprotocols::VectorOptional>(value.response().value()) << ")";
      break;
    case ::test_typesinprotocols::ProtocolErrorVectorOptionalResult::Tag::kErr:
      os << "err(" << fidl::ostream::Formatted<uint32_t>(value.err().value()) << ")";
      break;
    default:
      os << "Unknown";
  }
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::ProtocolErrorArrayVectorNestedResult>::Format(std::ostream& os, const ::test_typesinprotocols::ProtocolErrorArrayVectorNestedResult& value) {
  os << "test_typesinprotocols::ProtocolErrorArrayVectorNestedResult::";
  switch (value.Which()) {
    case ::test_typesinprotocols::ProtocolErrorArrayVectorNestedResult::Tag::kResponse:
      os << "response(" << fidl::ostream::Formatted<::test_typesinprotocols::ArrayVectorNested>(value.response().value()) << ")";
      break;
    case ::test_typesinprotocols::ProtocolErrorArrayVectorNestedResult::Tag::kErr:
      os << "err(" << fidl::ostream::Formatted<uint32_t>(value.err().value()) << ")";
      break;
    default:
      os << "Unknown";
  }
  return os;
}
#ifdef __Fuchsia__

std::ostream& fidl::ostream::Formatter<::test_typesinprotocols::ProtocolErrorResourceResult>::Format(std::ostream& os, const ::test_typesinprotocols::ProtocolErrorResourceResult& value) {
  os << "test_typesinprotocols::ProtocolErrorResourceResult::";
  switch (value.Which()) {
    case ::test_typesinprotocols::ProtocolErrorResourceResult::Tag::kResponse:
      os << "response(" << fidl::ostream::Formatted<::test_typesinprotocols::Resource>(value.response().value()) << ")";
      break;
    case ::test_typesinprotocols::ProtocolErrorResourceResult::Tag::kErr:
      os << "err(" << fidl::ostream::Formatted<uint32_t>(value.err().value()) << ")";
      break;
    default:
      os << "Unknown";
  }
  return os;
}

#endif  // __Fuchsia__

namespace test_typesinprotocols {

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

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

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

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

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

#ifdef __Fuchsia__

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

#endif  // __Fuchsia__

#ifdef __Fuchsia__

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

#endif  // __Fuchsia__

#ifdef __Fuchsia__

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

#endif  // __Fuchsia__

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

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

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

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

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

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

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

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

#ifdef __Fuchsia__

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

#endif  // __Fuchsia__

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

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

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

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

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

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

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

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

#ifdef __Fuchsia__

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

#endif  // __Fuchsia__

#pragma clang diagnostic pop

}  // namespace test_typesinprotocols
