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

// fidl_experiment = output_index_json

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

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

std::ostream& fidl::ostream::Formatter<::test_bitsconstants::BitsType>::Format(std::ostream& os, const ::test_bitsconstants::BitsType& value) {
  os << "test_bitsconstants::BitsType";
  os << "(";
  bool first = true;
  if (value & ::test_bitsconstants::BitsType::kA) {
    if (!first) os << "|";
    first = false;
    os << "kA";
  }
  if (value & ::test_bitsconstants::BitsType::kB) {
    if (!first) os << "|";
    first = false;
    os << "kB";
  }
  if (value & ::test_bitsconstants::BitsType::kC) {
    if (!first) os << "|";
    first = false;
    os << "kC";
  }
  os << ")";
  return os;
}

namespace test_bitsconstants {

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

#pragma clang diagnostic pop

}  // namespace test_bitsconstants
