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

// fidl_experiment = output_index_json

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

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

namespace fidl {
namespace internal {

::test_structdefaultvalueenumlibraryreference::Foo WireNaturalConversionTraits<::test_structdefaultvalueenumlibraryreference::wire::Foo, ::test_structdefaultvalueenumlibraryreference::Foo>::ToNatural(::test_structdefaultvalueenumlibraryreference::wire::Foo src) {
  return ::test_structdefaultvalueenumlibraryreference::Foo(WireNaturalConversionTraits<::test_dependent::wire::MyEnum, ::test_dependent::MyEnum>::ToNatural(std::move(src.field)));
}
::test_structdefaultvalueenumlibraryreference::wire::Foo WireNaturalConversionTraits<::test_structdefaultvalueenumlibraryreference::wire::Foo, ::test_structdefaultvalueenumlibraryreference::Foo>::ToWire(fidl::AnyArena& arena, ::test_structdefaultvalueenumlibraryreference::Foo src) {
  return ::test_structdefaultvalueenumlibraryreference::wire::Foo{
      .field = WireNaturalConversionTraits<::test_dependent::wire::MyEnum, ::test_dependent::MyEnum>::ToWire(arena, std::move(src.field())),
  };
}

#ifdef __Fuchsia__

#endif  // __Fuchsia__
#pragma clang diagnostic pop

}  // namespace internal
}  // namespace fidl
