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

// fidl_experiment = output_index_json

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

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

std::ostream& fidl::ostream::Formatter<::test_aliases::ObjType>::Format(std::ostream& os, const ::test_aliases::ObjType& value) {
  os << "test_aliases::ObjType";
  os << "::";
  switch (value) {
    case ::test_aliases::ObjType::kNone:
      os << "kNone";
      break;
    case ::test_aliases::ObjType::kChannel:
      os << "kChannel";
      break;
    default:
      os << "UNKNOWN(" << static_cast<uint32_t>(value) << ")";
  }
  return os;
}
#ifdef __Fuchsia__

std::ostream& fidl::ostream::Formatter<::test_aliases::ExampleOfUseOfAliases>::Format(std::ostream& os, const ::test_aliases::ExampleOfUseOfAliases& value) {
  os << "test_aliases::ExampleOfUseOfAliases";
  os << "{ ";
  os << "field_of_u32";
  os << " = " << fidl::ostream::Formatted<uint32_t>(value.field_of_u32()) << ", ";
  os << "field_of_vec_of_strings";
  os << " = " << fidl::ostream::Formatted<::std::vector<::std::string>>(value.field_of_vec_of_strings()) << ", ";
  os << "field_of_vec_of_strings_at_most_nine";
  os << " = " << fidl::ostream::Formatted<::std::vector<::std::string>>(value.field_of_vec_of_strings_at_most_nine()) << ", ";
  os << "field_of_vec_of_strings_at_most_5";
  os << " = " << fidl::ostream::Formatted<::std::vector<::std::string>>(value.field_of_vec_of_strings_at_most_5()) << ", ";
  os << "field_of_vec_of_ref_me_at_most_5";
  os << " = " << fidl::ostream::Formatted<::std::vector<::test_someotherlibrary::ReferenceMe>>(value.field_of_vec_of_ref_me_at_most_5()) << ", ";
  os << "field_of_channel";
  os << " = " << fidl::ostream::Formatted<::zx::channel>(value.field_of_channel()) << ", ";
  os << "field_of_client_end";
  os << " = " << fidl::ostream::Formatted<::zx::channel>(value.field_of_client_end()) << ", ";
  os << "field_of_nullable_client_end";
  os << " = " << fidl::ostream::Formatted<::zx::channel>(value.field_of_nullable_client_end()) << ", ";
  os << "}";
  return os;
}

#endif  // __Fuchsia__

namespace test_aliases {

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

#ifdef __Fuchsia__

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

#endif  // __Fuchsia__

#pragma clang diagnostic pop

}  // namespace test_aliases
