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

#pragma once

#include <fidl/test.typealiases/cpp/markers.h>
#include <fidl/test.typealiases/cpp/natural_types.h>
#include <fidl/test.typealiases/cpp/wire_types.h>
#ifdef __Fuchsia__
#include <fidl/test.typealiases/cpp/natural_messaging.h>
#include <fidl/test.typealiases/cpp/wire_messaging.h>
#endif  // __Fuchsia__
#include <fidl/test.someotherlibrary/cpp/type_conversions.h>
#include <lib/fidl/cpp/wire_natural_conversions.h>
namespace fidl {
namespace internal {

#ifdef __Fuchsia__

template <>
struct WireNaturalConversionTraits<
    ::test_typealiases::wire::ExampleOfUseOfAliases,
    ::test_typealiases::ExampleOfUseOfAliases> {
  static ::test_typealiases::ExampleOfUseOfAliases ToNatural(
      ::test_typealiases::wire::ExampleOfUseOfAliases src);
  static ::test_typealiases::wire::ExampleOfUseOfAliases ToWire(
      fidl::AnyArena& arena, ::test_typealiases::ExampleOfUseOfAliases src);
};

template <>
struct NaturalTypeForWireType<::test_typealiases::wire::ExampleOfUseOfAliases> {
  using type = ::test_typealiases::ExampleOfUseOfAliases;
};
template <>
struct WireTypeForNaturalType<::test_typealiases::ExampleOfUseOfAliases> {
  using type = ::test_typealiases::wire::ExampleOfUseOfAliases;
};

#endif  // __Fuchsia__

#ifdef __Fuchsia__

#endif  // __Fuchsia__
}  // namespace internal
}  // namespace fidl
