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

// fidl_experiment = output_index_json

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

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

std::ostream& fidl::ostream::Formatter<::test_protocollayoutssamelibrary::TablePayload>::Format(std::ostream& os, const ::test_protocollayoutssamelibrary::TablePayload& value) {
  os << "test_protocollayoutssamelibrary::TablePayload";
  os << "{ ";
  if (value.a().has_value()) {
    os << "a";
    os << " = " << fidl::ostream::Formatted<uint16_t>(value.a().value()) << ", ";
  }
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocollayoutssamelibrary::ComposedProtocolOneWayAnonComposedRequest>::Format(std::ostream& os, const ::test_protocollayoutssamelibrary::ComposedProtocolOneWayAnonComposedRequest& value) {
  os << "test_protocollayoutssamelibrary::ComposedProtocolOneWayAnonComposedRequest";
  os << "{ ";
  if (value.a().has_value()) {
    os << "a";
    os << " = " << fidl::ostream::Formatted<uint16_t>(value.a().value()) << ", ";
  }
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedResponse>::Format(std::ostream& os, const ::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedResponse& value) {
  os << "test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedResponse";
  os << "{ ";
  if (value.a().has_value()) {
    os << "a";
    os << " = " << fidl::ostream::Formatted<uint16_t>(value.a().value()) << ", ";
  }
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorRequest>::Format(std::ostream& os, const ::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorRequest& value) {
  os << "test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorRequest";
  os << "{ ";
  if (value.a().has_value()) {
    os << "a";
    os << " = " << fidl::ostream::Formatted<uint16_t>(value.a().value()) << ", ";
  }
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocollayoutssamelibrary::MainProtocolOneWayAnonRequest>::Format(std::ostream& os, const ::test_protocollayoutssamelibrary::MainProtocolOneWayAnonRequest& value) {
  os << "test_protocollayoutssamelibrary::MainProtocolOneWayAnonRequest";
  os << "{ ";
  if (value.a().has_value()) {
    os << "a";
    os << " = " << fidl::ostream::Formatted<uint16_t>(value.a().value()) << ", ";
  }
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonResponse>::Format(std::ostream& os, const ::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonResponse& value) {
  os << "test_protocollayoutssamelibrary::MainProtocolTwoWayAnonResponse";
  os << "{ ";
  if (value.a().has_value()) {
    os << "a";
    os << " = " << fidl::ostream::Formatted<uint16_t>(value.a().value()) << ", ";
  }
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorRequest>::Format(std::ostream& os, const ::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorRequest& value) {
  os << "test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorRequest";
  os << "{ ";
  if (value.a().has_value()) {
    os << "a";
    os << " = " << fidl::ostream::Formatted<uint16_t>(value.a().value()) << ", ";
  }
  os << "}";
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocollayoutssamelibrary::UnionPayload>::Format(std::ostream& os, const ::test_protocollayoutssamelibrary::UnionPayload& value) {
  os << "test_protocollayoutssamelibrary::UnionPayload::";
  switch (value.Which()) {
    case ::test_protocollayoutssamelibrary::UnionPayload::Tag::kB:
      os << "b(" << fidl::ostream::Formatted<bool>(value.b().value()) << ")";
      break;
    default:
      os << "Unknown";
  }
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedRequest>::Format(std::ostream& os, const ::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedRequest& value) {
  os << "test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedRequest::";
  switch (value.Which()) {
    case ::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedRequest::Tag::kB:
      os << "b(" << fidl::ostream::Formatted<bool>(value.b().value()) << ")";
      break;
    default:
      os << "Unknown";
  }
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorResponse>::Format(std::ostream& os, const ::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorResponse& value) {
  os << "test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorResponse::";
  switch (value.Which()) {
    case ::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorResponse::Tag::kB:
      os << "b(" << fidl::ostream::Formatted<bool>(value.b().value()) << ")";
      break;
    default:
      os << "Unknown";
  }
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorResult>::Format(std::ostream& os, const ::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorResult& value) {
  os << "test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorResult::";
  switch (value.Which()) {
    case ::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorResult::Tag::kResponse:
      os << "response(" << fidl::ostream::Formatted<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorResponse>(value.response().value()) << ")";
      break;
    case ::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorResult::Tag::kErr:
      os << "err(" << fidl::ostream::Formatted<uint32_t>(value.err().value()) << ")";
      break;
    default:
      os << "Unknown";
  }
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocollayoutssamelibrary::ComposedProtocolOnAnonComposedRequest>::Format(std::ostream& os, const ::test_protocollayoutssamelibrary::ComposedProtocolOnAnonComposedRequest& value) {
  os << "test_protocollayoutssamelibrary::ComposedProtocolOnAnonComposedRequest::";
  switch (value.Which()) {
    case ::test_protocollayoutssamelibrary::ComposedProtocolOnAnonComposedRequest::Tag::kB:
      os << "b(" << fidl::ostream::Formatted<bool>(value.b().value()) << ")";
      break;
    default:
      os << "Unknown";
  }
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayNamedComposedWithErrorResult>::Format(std::ostream& os, const ::test_protocollayoutssamelibrary::ComposedProtocolTwoWayNamedComposedWithErrorResult& value) {
  os << "test_protocollayoutssamelibrary::ComposedProtocolTwoWayNamedComposedWithErrorResult::";
  switch (value.Which()) {
    case ::test_protocollayoutssamelibrary::ComposedProtocolTwoWayNamedComposedWithErrorResult::Tag::kResponse:
      os << "response(" << fidl::ostream::Formatted<::test_protocollayoutssamelibrary::UnionPayload>(value.response().value()) << ")";
      break;
    case ::test_protocollayoutssamelibrary::ComposedProtocolTwoWayNamedComposedWithErrorResult::Tag::kErr:
      os << "err(" << fidl::ostream::Formatted<uint32_t>(value.err().value()) << ")";
      break;
    default:
      os << "Unknown";
  }
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocollayoutssamelibrary::MainProtocolTwoWayLocalWithErrorResult>::Format(std::ostream& os, const ::test_protocollayoutssamelibrary::MainProtocolTwoWayLocalWithErrorResult& value) {
  os << "test_protocollayoutssamelibrary::MainProtocolTwoWayLocalWithErrorResult::";
  switch (value.Which()) {
    case ::test_protocollayoutssamelibrary::MainProtocolTwoWayLocalWithErrorResult::Tag::kResponse:
      os << "response(" << fidl::ostream::Formatted<::test_protocollayoutssamelibrary::UnionPayload>(value.response().value()) << ")";
      break;
    case ::test_protocollayoutssamelibrary::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_protocollayoutssamelibrary::MainProtocolTwoWayAnonRequest>::Format(std::ostream& os, const ::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonRequest& value) {
  os << "test_protocollayoutssamelibrary::MainProtocolTwoWayAnonRequest::";
  switch (value.Which()) {
    case ::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonRequest::Tag::kB:
      os << "b(" << fidl::ostream::Formatted<bool>(value.b().value()) << ")";
      break;
    default:
      os << "Unknown";
  }
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorResponse>::Format(std::ostream& os, const ::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorResponse& value) {
  os << "test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorResponse::";
  switch (value.Which()) {
    case ::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorResponse::Tag::kB:
      os << "b(" << fidl::ostream::Formatted<bool>(value.b().value()) << ")";
      break;
    default:
      os << "Unknown";
  }
  return os;
}
std::ostream& fidl::ostream::Formatter<::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorResult>::Format(std::ostream& os, const ::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorResult& value) {
  os << "test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorResult::";
  switch (value.Which()) {
    case ::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorResult::Tag::kResponse:
      os << "response(" << fidl::ostream::Formatted<::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorResponse>(value.response().value()) << ")";
      break;
    case ::test_protocollayoutssamelibrary::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_protocollayoutssamelibrary::MainProtocolOnAnonRequest>::Format(std::ostream& os, const ::test_protocollayoutssamelibrary::MainProtocolOnAnonRequest& value) {
  os << "test_protocollayoutssamelibrary::MainProtocolOnAnonRequest::";
  switch (value.Which()) {
    case ::test_protocollayoutssamelibrary::MainProtocolOnAnonRequest::Tag::kB:
      os << "b(" << fidl::ostream::Formatted<bool>(value.b().value()) << ")";
      break;
    default:
      os << "Unknown";
  }
  return os;
}

namespace test_protocollayoutssamelibrary {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#pragma clang diagnostic pop

}  // namespace test_protocollayoutssamelibrary
