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

// fidl_experiment = output_index_json

#pragma once

#include <fidl/test.encapsulatedstructs/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_encapsulatedstructs::Int8Int32> {
  static std::ostream& Format(std::ostream& os, const ::test_encapsulatedstructs::Int8Int32& value);
};
template <>
struct fidl::ostream::Formatter<::test_encapsulatedstructs::Int16Int8> {
  static std::ostream& Format(std::ostream& os, const ::test_encapsulatedstructs::Int16Int8& value);
};
template <>
struct fidl::ostream::Formatter<::test_encapsulatedstructs::ArrayInt16Int8> {
  static std::ostream& Format(std::ostream& os, const ::test_encapsulatedstructs::ArrayInt16Int8& value);
};
template <>
struct fidl::ostream::Formatter<::test_encapsulatedstructs::StructPaddingTestStruct> {
  static std::ostream& Format(std::ostream& os, const ::test_encapsulatedstructs::StructPaddingTestStruct& value);
};
#ifdef __Fuchsia__

template <>
struct fidl::ostream::Formatter<::test_encapsulatedstructs::NonInlineStructTestStruct> {
  static std::ostream& Format(std::ostream& os, const ::test_encapsulatedstructs::NonInlineStructTestStruct& value);
};

#endif  // __Fuchsia__

#ifdef __Fuchsia__

template <>
struct fidl::ostream::Formatter<::test_encapsulatedstructs::TopLevelStruct> {
  static std::ostream& Format(std::ostream& os, const ::test_encapsulatedstructs::TopLevelStruct& value);
};

#endif  // __Fuchsia__

namespace test_encapsulatedstructs {

std::ostream& operator<<(std::ostream& os, const ::test_encapsulatedstructs::Int8Int32& value);

std::ostream& operator<<(std::ostream& os, const ::test_encapsulatedstructs::Int16Int8& value);

std::ostream& operator<<(std::ostream& os, const ::test_encapsulatedstructs::ArrayInt16Int8& value);

std::ostream& operator<<(std::ostream& os, const ::test_encapsulatedstructs::StructPaddingTestStruct& value);

#ifdef __Fuchsia__

std::ostream& operator<<(std::ostream& os, const ::test_encapsulatedstructs::NonInlineStructTestStruct& value);

#endif  // __Fuchsia__

#ifdef __Fuchsia__

std::ostream& operator<<(std::ostream& os, const ::test_encapsulatedstructs::TopLevelStruct& value);

#endif  // __Fuchsia__

}  // namespace test_encapsulatedstructs

#ifdef __Fuchsia__

#endif  // __Fuchsia__

#pragma clang diagnostic pop
