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

// fidl_experiment = output_index_json

#pragma once

#include <fidl/test.bits/cpp/natural_types.h>
#include <lib/fidl/cpp/natural_ostream.h>

#include <iostream>

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

template <>
struct fidl::ostream::Formatter<::test_bits::MyBits> {
  static std::ostream& Format(std::ostream& os, const ::test_bits::MyBits& value);
};
template <>
struct fidl::ostream::Formatter<::test_bits::StrictBits> {
  static std::ostream& Format(std::ostream& os, const ::test_bits::StrictBits& value);
};
template <>
struct fidl::ostream::Formatter<::test_bits::FlexibleBits> {
  static std::ostream& Format(std::ostream& os, const ::test_bits::FlexibleBits& value);
};
template <>
struct fidl::ostream::Formatter<::test_bits::EmptyBits> {
  static std::ostream& Format(std::ostream& os, const ::test_bits::EmptyBits& value);
};

namespace test_bits {

std::ostream& operator<<(std::ostream& os, const ::test_bits::MyBits& value);

std::ostream& operator<<(std::ostream& os, const ::test_bits::StrictBits& value);

std::ostream& operator<<(std::ostream& os, const ::test_bits::FlexibleBits& value);

std::ostream& operator<<(std::ostream& os, const ::test_bits::EmptyBits& value);

}  // namespace test_bits

#ifdef __Fuchsia__

#endif  // __Fuchsia__

#pragma clang diagnostic pop
