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

// fidl_experiment = output_index_json

#pragma once

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

#include <iostream>

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

template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayFieldsResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayFieldsResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayUnionResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayUnionResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayTableResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayTableResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayFieldsErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayFieldsErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayFieldsErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayFieldsErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayUnionErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayUnionErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayUnionErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayUnionErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayTableErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayTableErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayTableErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayTableErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayFieldsResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayFieldsResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayFieldsResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayFieldsResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayUnionResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayUnionResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayUnionResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayUnionResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayTableResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayTableResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayTableResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayTableResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayFieldsErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayFieldsErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayFieldsErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayFieldsErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayUnionErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayUnionErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayUnionErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayUnionErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayTableErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayTableErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayTableErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayTableErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolStrictEventFieldsRequest> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictEventFieldsRequest& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolStrictEventUnionRequest> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictEventUnionRequest& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolStrictEventTableRequest> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictEventTableRequest& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolFlexibleEventFieldsRequest> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleEventFieldsRequest& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolFlexibleEventUnionRequest> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleEventUnionRequest& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsProtocolFlexibleEventTableRequest> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleEventTableRequest& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayFieldsResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayFieldsResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayUnionResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayUnionResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayTableResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayTableResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayFieldsErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayFieldsErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayFieldsErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayFieldsErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayUnionErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayUnionErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayUnionErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayUnionErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayTableErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayTableErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayTableErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayTableErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictEventFieldsRequest> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictEventFieldsRequest& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictEventUnionRequest> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictEventUnionRequest& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictEventTableRequest> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictEventTableRequest& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarProtocolFlexibleEventFieldsRequest> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolFlexibleEventFieldsRequest& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarProtocolFlexibleEventUnionRequest> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolFlexibleEventUnionRequest& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarProtocolFlexibleEventTableRequest> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolFlexibleEventTableRequest& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayFieldsResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayFieldsResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayUnionResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayUnionResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayTableResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayTableResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayFieldsErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayFieldsErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayFieldsErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayFieldsErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayUnionErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayUnionErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayUnionErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayUnionErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayTableErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayTableErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayTableErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayTableErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictEventFieldsRequest> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictEventFieldsRequest& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictEventUnionRequest> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictEventUnionRequest& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictEventTableRequest> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictEventTableRequest& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayFieldsResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayFieldsResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayUnionResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayUnionResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayTableResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayTableResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayFieldsErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayFieldsErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayFieldsErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayFieldsErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayUnionErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayUnionErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayUnionErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayUnionErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayTableErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayTableErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayTableErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayTableErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayFieldsResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayFieldsResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayFieldsResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayFieldsResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayUnionResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayUnionResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayUnionResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayUnionResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayTableResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayTableResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayTableResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayTableResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayFieldsErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayFieldsErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayFieldsErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayFieldsErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayUnionErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayUnionErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayUnionErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayUnionErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayTableErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayTableErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayTableErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayTableErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayFieldsResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayFieldsResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayUnionResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayUnionResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayTableResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayTableResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayFieldsErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayFieldsErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayFieldsErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayFieldsErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayUnionErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayUnionErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayUnionErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayUnionErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayTableErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayTableErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayTableErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayTableErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayFieldsResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayFieldsResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayUnionResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayUnionResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayTableResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayTableResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayFieldsErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayFieldsErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayFieldsErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayFieldsErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayUnionErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayUnionErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayUnionErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayUnionErrResult& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayTableErrResponse> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayTableErrResponse& value);
};
template <>
struct fidl::ostream::Formatter<::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayTableErrResult> {
  static std::ostream& Format(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayTableErrResult& value);
};

namespace test_unknowninteractions {

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayFieldsResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayUnionResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayTableResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayFieldsErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayFieldsErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayUnionErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayUnionErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayTableErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictTwoWayTableErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayFieldsResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayFieldsResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayUnionResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayUnionResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayTableResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayTableResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayFieldsErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayFieldsErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayUnionErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayUnionErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayTableErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleTwoWayTableErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictEventFieldsRequest& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictEventUnionRequest& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolStrictEventTableRequest& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleEventFieldsRequest& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleEventUnionRequest& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsProtocolFlexibleEventTableRequest& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayFieldsResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayUnionResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayTableResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayFieldsErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayFieldsErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayUnionErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayUnionErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayTableErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictTwoWayTableErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictEventFieldsRequest& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictEventUnionRequest& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolStrictEventTableRequest& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolFlexibleEventFieldsRequest& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolFlexibleEventUnionRequest& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarProtocolFlexibleEventTableRequest& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayFieldsResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayUnionResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayTableResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayFieldsErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayFieldsErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayUnionErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayUnionErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayTableErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictTwoWayTableErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictEventFieldsRequest& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictEventUnionRequest& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedProtocolStrictEventTableRequest& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayFieldsResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayUnionResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayTableResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayFieldsErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayFieldsErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayUnionErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayUnionErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayTableErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolStrictTwoWayTableErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayFieldsResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayFieldsResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayUnionResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayUnionResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayTableResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayTableResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayFieldsErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayFieldsErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayUnionErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayUnionErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayTableErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsDriverProtocolFlexibleTwoWayTableErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayFieldsResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayUnionResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayTableResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayFieldsErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayFieldsErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayUnionErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayUnionErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayTableErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsAjarDriverProtocolStrictTwoWayTableErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayFieldsResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayUnionResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayTableResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayFieldsErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayFieldsErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayUnionErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayUnionErrResult& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayTableErrResponse& value);

std::ostream& operator<<(std::ostream& os, const ::test_unknowninteractions::UnknownInteractionsClosedDriverProtocolStrictTwoWayTableErrResult& value);

}  // namespace test_unknowninteractions

#ifdef __Fuchsia__

template <>
struct fidl::ostream::Formatter<::fidl::ClientEnd<::test_unknowninteractions::UnknownInteractionsProtocol>> {
  static std::ostream& Format(std::ostream& os, const ::fidl::ClientEnd<::test_unknowninteractions::UnknownInteractionsProtocol>& value) {
    return os << "ClientEnd<" << "test_unknowninteractions::UnknownInteractionsProtocol" << ">(" << value.channel().get() << ")";
  }
};

template <>
struct fidl::ostream::Formatter<::fidl::ServerEnd<::test_unknowninteractions::UnknownInteractionsProtocol>> {
  static std::ostream& Format(std::ostream& os, const ::fidl::ServerEnd<::test_unknowninteractions::UnknownInteractionsProtocol>& value) {
    return os << "ServerEnd<" << "test_unknowninteractions::UnknownInteractionsProtocol" << ">(" << value.channel().get() << ")";
  }
};
template <>
struct fidl::ostream::Formatter<::fidl::ClientEnd<::test_unknowninteractions::UnknownInteractionsAjarProtocol>> {
  static std::ostream& Format(std::ostream& os, const ::fidl::ClientEnd<::test_unknowninteractions::UnknownInteractionsAjarProtocol>& value) {
    return os << "ClientEnd<" << "test_unknowninteractions::UnknownInteractionsAjarProtocol" << ">(" << value.channel().get() << ")";
  }
};

template <>
struct fidl::ostream::Formatter<::fidl::ServerEnd<::test_unknowninteractions::UnknownInteractionsAjarProtocol>> {
  static std::ostream& Format(std::ostream& os, const ::fidl::ServerEnd<::test_unknowninteractions::UnknownInteractionsAjarProtocol>& value) {
    return os << "ServerEnd<" << "test_unknowninteractions::UnknownInteractionsAjarProtocol" << ">(" << value.channel().get() << ")";
  }
};
template <>
struct fidl::ostream::Formatter<::fidl::ClientEnd<::test_unknowninteractions::UnknownInteractionsClosedProtocol>> {
  static std::ostream& Format(std::ostream& os, const ::fidl::ClientEnd<::test_unknowninteractions::UnknownInteractionsClosedProtocol>& value) {
    return os << "ClientEnd<" << "test_unknowninteractions::UnknownInteractionsClosedProtocol" << ">(" << value.channel().get() << ")";
  }
};

template <>
struct fidl::ostream::Formatter<::fidl::ServerEnd<::test_unknowninteractions::UnknownInteractionsClosedProtocol>> {
  static std::ostream& Format(std::ostream& os, const ::fidl::ServerEnd<::test_unknowninteractions::UnknownInteractionsClosedProtocol>& value) {
    return os << "ServerEnd<" << "test_unknowninteractions::UnknownInteractionsClosedProtocol" << ">(" << value.channel().get() << ")";
  }
};
template <>
struct fidl::ostream::Formatter<::fdf::ClientEnd<::test_unknowninteractions::UnknownInteractionsDriverProtocol>> {
  static std::ostream& Format(std::ostream& os, const ::fdf::ClientEnd<::test_unknowninteractions::UnknownInteractionsDriverProtocol>& value) {
    return os << "ClientEnd<" << "test_unknowninteractions::UnknownInteractionsDriverProtocol" << ">(" << value.channel().get() << ")";
  }
};

template <>
struct fidl::ostream::Formatter<::fdf::ServerEnd<::test_unknowninteractions::UnknownInteractionsDriverProtocol>> {
  static std::ostream& Format(std::ostream& os, const ::fdf::ServerEnd<::test_unknowninteractions::UnknownInteractionsDriverProtocol>& value) {
    return os << "ServerEnd<" << "test_unknowninteractions::UnknownInteractionsDriverProtocol" << ">(" << value.channel().get() << ")";
  }
};
template <>
struct fidl::ostream::Formatter<::fdf::ClientEnd<::test_unknowninteractions::UnknownInteractionsAjarDriverProtocol>> {
  static std::ostream& Format(std::ostream& os, const ::fdf::ClientEnd<::test_unknowninteractions::UnknownInteractionsAjarDriverProtocol>& value) {
    return os << "ClientEnd<" << "test_unknowninteractions::UnknownInteractionsAjarDriverProtocol" << ">(" << value.channel().get() << ")";
  }
};

template <>
struct fidl::ostream::Formatter<::fdf::ServerEnd<::test_unknowninteractions::UnknownInteractionsAjarDriverProtocol>> {
  static std::ostream& Format(std::ostream& os, const ::fdf::ServerEnd<::test_unknowninteractions::UnknownInteractionsAjarDriverProtocol>& value) {
    return os << "ServerEnd<" << "test_unknowninteractions::UnknownInteractionsAjarDriverProtocol" << ">(" << value.channel().get() << ")";
  }
};
template <>
struct fidl::ostream::Formatter<::fdf::ClientEnd<::test_unknowninteractions::UnknownInteractionsClosedDriverProtocol>> {
  static std::ostream& Format(std::ostream& os, const ::fdf::ClientEnd<::test_unknowninteractions::UnknownInteractionsClosedDriverProtocol>& value) {
    return os << "ClientEnd<" << "test_unknowninteractions::UnknownInteractionsClosedDriverProtocol" << ">(" << value.channel().get() << ")";
  }
};

template <>
struct fidl::ostream::Formatter<::fdf::ServerEnd<::test_unknowninteractions::UnknownInteractionsClosedDriverProtocol>> {
  static std::ostream& Format(std::ostream& os, const ::fdf::ServerEnd<::test_unknowninteractions::UnknownInteractionsClosedDriverProtocol>& value) {
    return os << "ServerEnd<" << "test_unknowninteractions::UnknownInteractionsClosedDriverProtocol" << ">(" << value.channel().get() << ")";
  }
};

namespace fidl {

inline std::ostream& operator<<(std::ostream& os, const ::fidl::ClientEnd<::test_unknowninteractions::UnknownInteractionsProtocol>& value) {
  return fidl::ostream::Formatter<::fidl::ClientEnd<::test_unknowninteractions::UnknownInteractionsProtocol>>::Format(os, value);
}

inline std::ostream& operator<<(std::ostream& os, const ::fidl::ServerEnd<::test_unknowninteractions::UnknownInteractionsProtocol>& value) {
  return fidl::ostream::Formatter<::fidl::ServerEnd<::test_unknowninteractions::UnknownInteractionsProtocol>>::Format(os, value);
}

inline std::ostream& operator<<(std::ostream& os, const ::fidl::ClientEnd<::test_unknowninteractions::UnknownInteractionsAjarProtocol>& value) {
  return fidl::ostream::Formatter<::fidl::ClientEnd<::test_unknowninteractions::UnknownInteractionsAjarProtocol>>::Format(os, value);
}

inline std::ostream& operator<<(std::ostream& os, const ::fidl::ServerEnd<::test_unknowninteractions::UnknownInteractionsAjarProtocol>& value) {
  return fidl::ostream::Formatter<::fidl::ServerEnd<::test_unknowninteractions::UnknownInteractionsAjarProtocol>>::Format(os, value);
}

inline std::ostream& operator<<(std::ostream& os, const ::fidl::ClientEnd<::test_unknowninteractions::UnknownInteractionsClosedProtocol>& value) {
  return fidl::ostream::Formatter<::fidl::ClientEnd<::test_unknowninteractions::UnknownInteractionsClosedProtocol>>::Format(os, value);
}

inline std::ostream& operator<<(std::ostream& os, const ::fidl::ServerEnd<::test_unknowninteractions::UnknownInteractionsClosedProtocol>& value) {
  return fidl::ostream::Formatter<::fidl::ServerEnd<::test_unknowninteractions::UnknownInteractionsClosedProtocol>>::Format(os, value);
}
}  // namespace fidl
namespace fdf {

inline std::ostream& operator<<(std::ostream& os, const ::fdf::ClientEnd<::test_unknowninteractions::UnknownInteractionsDriverProtocol>& value) {
  return fidl::ostream::Formatter<::fdf::ClientEnd<::test_unknowninteractions::UnknownInteractionsDriverProtocol>>::Format(os, value);
}

inline std::ostream& operator<<(std::ostream& os, const ::fdf::ServerEnd<::test_unknowninteractions::UnknownInteractionsDriverProtocol>& value) {
  return fidl::ostream::Formatter<::fdf::ServerEnd<::test_unknowninteractions::UnknownInteractionsDriverProtocol>>::Format(os, value);
}

inline std::ostream& operator<<(std::ostream& os, const ::fdf::ClientEnd<::test_unknowninteractions::UnknownInteractionsAjarDriverProtocol>& value) {
  return fidl::ostream::Formatter<::fdf::ClientEnd<::test_unknowninteractions::UnknownInteractionsAjarDriverProtocol>>::Format(os, value);
}

inline std::ostream& operator<<(std::ostream& os, const ::fdf::ServerEnd<::test_unknowninteractions::UnknownInteractionsAjarDriverProtocol>& value) {
  return fidl::ostream::Formatter<::fdf::ServerEnd<::test_unknowninteractions::UnknownInteractionsAjarDriverProtocol>>::Format(os, value);
}

inline std::ostream& operator<<(std::ostream& os, const ::fdf::ClientEnd<::test_unknowninteractions::UnknownInteractionsClosedDriverProtocol>& value) {
  return fidl::ostream::Formatter<::fdf::ClientEnd<::test_unknowninteractions::UnknownInteractionsClosedDriverProtocol>>::Format(os, value);
}

inline std::ostream& operator<<(std::ostream& os, const ::fdf::ServerEnd<::test_unknowninteractions::UnknownInteractionsClosedDriverProtocol>& value) {
  return fidl::ostream::Formatter<::fdf::ServerEnd<::test_unknowninteractions::UnknownInteractionsClosedDriverProtocol>>::Format(os, value);
}
}  // namespace fdf

#endif  // __Fuchsia__

#pragma clang diagnostic pop
