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

// fidl_experiment = output_index_json

#include <fidl/test.transitivedependencies/cpp/type_conversions.h>

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

namespace fidl {
namespace internal {

::test_transitivedependencies::Baz WireNaturalConversionTraits<::test_transitivedependencies::wire::Baz, ::test_transitivedependencies::Baz>::ToNatural(::test_transitivedependencies::wire::Baz src) {
  return ::test_transitivedependencies::Baz(WireNaturalConversionTraits<::test_middle::wire::Bar, ::test_middle::Bar>::ToNatural(std::move(src.g)));
}
::test_transitivedependencies::wire::Baz WireNaturalConversionTraits<::test_transitivedependencies::wire::Baz, ::test_transitivedependencies::Baz>::ToWire(fidl::AnyArena& arena, ::test_transitivedependencies::Baz src) {
  return ::test_transitivedependencies::wire::Baz{
      .g = WireNaturalConversionTraits<::test_middle::wire::Bar, ::test_middle::Bar>::ToWire(arena, std::move(src.g())),
  };
}

#ifdef __Fuchsia__

#endif  // __Fuchsia__
#pragma clang diagnostic pop

}  // namespace internal
}  // namespace fidl
