/**
 * Autogenerated by Thrift for thrift/compiler/test/fixtures/mcpp2-compare/src/module.thrift
 *
 * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 *  @generated @nocommit
 */
#pragma once

#include <thrift/lib/cpp2/gen/module_data_h.h>

#include "thrift/compiler/test/fixtures/mcpp2-compare/gen-cpp2/module_types.h"

namespace apache { namespace thrift {

template <> struct TEnumDataStorage<::some::valid::ns::MyEnumA> {
  using type = ::some::valid::ns::MyEnumA;
  static constexpr const std::size_t size = 3;
  static constexpr std::array<type, size> values = { {
      type::fieldA,
      type::fieldB,
      type::fieldC,
  }};
  static constexpr std::array<std::string_view, size> names = { {
      "fieldA"sv,
      "fieldB"sv,
      "fieldC"sv,
  }};
};

template <> struct TEnumDataStorage<::some::valid::ns::AnnotatedEnum> {
  using type = ::some::valid::ns::AnnotatedEnum;
  static constexpr const std::size_t size = 3;
  static constexpr std::array<type, size> values = { {
      type::FIELDA,
      type::FIELDB,
      type::FIELDC,
  }};
  static constexpr std::array<std::string_view, size> names = { {
      "FIELDA"sv,
      "FIELDB"sv,
      "FIELDC"sv,
  }};
};

template <> struct TEnumDataStorage<::some::valid::ns::AnnotatedEnum2> {
  using type = ::some::valid::ns::AnnotatedEnum2;
  static constexpr const std::size_t size = 3;
  static constexpr std::array<type, size> values = { {
      type::FIELDA,
      type::FIELDB,
      type::FIELDC,
  }};
  static constexpr std::array<std::string_view, size> names = { {
      "FIELDA"sv,
      "FIELDB"sv,
      "FIELDC"sv,
  }};
};

template <> struct TEnumDataStorage<::some::valid::ns::MyEnumB> {
  using type = ::some::valid::ns::MyEnumB;
  static constexpr const std::size_t size = 1;
  static constexpr std::array<type, size> values = { {
      type::AField,
  }};
  static constexpr std::array<std::string_view, size> names = { {
      "AField"sv,
  }};
};

template <> struct TEnumDataStorage<::some::valid::ns::SimpleUnion::Type> {
  using type = ::some::valid::ns::SimpleUnion::Type;
  static constexpr const std::size_t size = 2;
  static constexpr std::array<type, size> values = { {
      type::intValue,
      type::stringValue,
  }};
  static constexpr std::array<std::string_view, size> names = { {
      "intValue"sv,
      "stringValue"sv,
  }};
};

template <> struct TEnumDataStorage<::some::valid::ns::ComplexUnion::Type> {
  using type = ::some::valid::ns::ComplexUnion::Type;
  static constexpr const std::size_t size = 28;
  static constexpr std::array<type, size> values = { {
      type::intValue,
      type::opt_intValue,
      type::stringValue,
      type::opt_stringValue,
      type::intValue2,
      type::intValue3,
      type::doubelValue,
      type::boolValue,
      type::union_list,
      type::union_set,
      type::union_map,
      type::opt_union_map,
      type::enum_field,
      type::enum_container,
      type::a_struct,
      type::a_set_struct,
      type::a_union,
      type::opt_a_union,
      type::a_union_list,
      type::a_union_typedef,
      type::a_union_typedef_list,
      type::MyBinaryField,
      type::MyBinaryField2,
      type::MyBinaryListField4,
      type::ref_field,
      type::ref_field2,
      type::excp_field,
      type::MyCustomField,
  }};
  static constexpr std::array<std::string_view, size> names = { {
      "intValue"sv,
      "opt_intValue"sv,
      "stringValue"sv,
      "opt_stringValue"sv,
      "intValue2"sv,
      "intValue3"sv,
      "doubelValue"sv,
      "boolValue"sv,
      "union_list"sv,
      "union_set"sv,
      "union_map"sv,
      "opt_union_map"sv,
      "enum_field"sv,
      "enum_container"sv,
      "a_struct"sv,
      "a_set_struct"sv,
      "a_union"sv,
      "opt_a_union"sv,
      "a_union_list"sv,
      "a_union_typedef"sv,
      "a_union_typedef_list"sv,
      "MyBinaryField"sv,
      "MyBinaryField2"sv,
      "MyBinaryListField4"sv,
      "ref_field"sv,
      "ref_field2"sv,
      "excp_field"sv,
      "MyCustomField"sv,
  }};
};

template <> struct TEnumDataStorage<::some::valid::ns::FloatUnion::Type> {
  using type = ::some::valid::ns::FloatUnion::Type;
  static constexpr const std::size_t size = 2;
  static constexpr std::array<type, size> values = { {
      type::floatSide,
      type::doubleSide,
  }};
  static constexpr std::array<std::string_view, size> names = { {
      "floatSide"sv,
      "doubleSide"sv,
  }};
};

template <> struct TStructDataStorage<::some::valid::ns::Empty> {
  static constexpr const std::size_t fields_size = 0;
  static const std::string_view name;
  static const std::array<std::string_view, fields_size> fields_names;
  static const std::array<int16_t, fields_size> fields_ids;
  static const std::array<protocol::TType, fields_size> fields_types;

 private:
  // The following fields describe internal storage metadata, and are private to
  // prevent user logic from accessing them, but they can be inspected by
  // debuggers.
  static const std::array<std::string_view, fields_size> storage_names;
  // -1 if the field has no isset.
  static const std::array<int, fields_size> isset_indexes;
};

template <> struct TStructDataStorage<::some::valid::ns::ASimpleStruct> {
  static constexpr const std::size_t fields_size = 1;
  static const std::string_view name;
  static const std::array<std::string_view, fields_size> fields_names;
  static const std::array<int16_t, fields_size> fields_ids;
  static const std::array<protocol::TType, fields_size> fields_types;

 private:
  // The following fields describe internal storage metadata, and are private to
  // prevent user logic from accessing them, but they can be inspected by
  // debuggers.
  static const std::array<std::string_view, fields_size> storage_names;
  // -1 if the field has no isset.
  static const std::array<int, fields_size> isset_indexes;
};

template <> struct TStructDataStorage<::some::valid::ns::ASimpleStructNoexcept> {
  static constexpr const std::size_t fields_size = 1;
  static const std::string_view name;
  static const std::array<std::string_view, fields_size> fields_names;
  static const std::array<int16_t, fields_size> fields_ids;
  static const std::array<protocol::TType, fields_size> fields_types;

 private:
  // The following fields describe internal storage metadata, and are private to
  // prevent user logic from accessing them, but they can be inspected by
  // debuggers.
  static const std::array<std::string_view, fields_size> storage_names;
  // -1 if the field has no isset.
  static const std::array<int, fields_size> isset_indexes;
};

template <> struct TStructDataStorage<::some::valid::ns::MyStruct> {
  static constexpr const std::size_t fields_size = 11;
  static const std::string_view name;
  static const std::array<std::string_view, fields_size> fields_names;
  static const std::array<int16_t, fields_size> fields_ids;
  static const std::array<protocol::TType, fields_size> fields_types;

 private:
  // The following fields describe internal storage metadata, and are private to
  // prevent user logic from accessing them, but they can be inspected by
  // debuggers.
  static const std::array<std::string_view, fields_size> storage_names;
  // -1 if the field has no isset.
  static const std::array<int, fields_size> isset_indexes;
};

template <> struct TStructDataStorage<::some::valid::ns::SimpleUnion> {
  static constexpr const std::size_t fields_size = 2;
  static const std::string_view name;
  static const std::array<std::string_view, fields_size> fields_names;
  static const std::array<int16_t, fields_size> fields_ids;
  static const std::array<protocol::TType, fields_size> fields_types;

 private:
  // The following fields describe internal storage metadata, and are private to
  // prevent user logic from accessing them, but they can be inspected by
  // debuggers.
  static const std::array<std::string_view, fields_size> storage_names;
  // -1 if the field has no isset.
  static const std::array<int, fields_size> isset_indexes;
};

template <> struct TStructDataStorage<::some::valid::ns::ComplexUnion> {
  static constexpr const std::size_t fields_size = 28;
  static const std::string_view name;
  static const std::array<std::string_view, fields_size> fields_names;
  static const std::array<int16_t, fields_size> fields_ids;
  static const std::array<protocol::TType, fields_size> fields_types;

 private:
  // The following fields describe internal storage metadata, and are private to
  // prevent user logic from accessing them, but they can be inspected by
  // debuggers.
  static const std::array<std::string_view, fields_size> storage_names;
  // -1 if the field has no isset.
  static const std::array<int, fields_size> isset_indexes;
};

template <> struct TStructDataStorage<::some::valid::ns::AnException> {
  static constexpr const std::size_t fields_size = 17;
  static const std::string_view name;
  static const std::array<std::string_view, fields_size> fields_names;
  static const std::array<int16_t, fields_size> fields_ids;
  static const std::array<protocol::TType, fields_size> fields_types;

 private:
  // The following fields describe internal storage metadata, and are private to
  // prevent user logic from accessing them, but they can be inspected by
  // debuggers.
  static const std::array<std::string_view, fields_size> storage_names;
  // -1 if the field has no isset.
  static const std::array<int, fields_size> isset_indexes;
};

template <> struct TStructDataStorage<::some::valid::ns::AnotherException> {
  static constexpr const std::size_t fields_size = 3;
  static const std::string_view name;
  static const std::array<std::string_view, fields_size> fields_names;
  static const std::array<int16_t, fields_size> fields_ids;
  static const std::array<protocol::TType, fields_size> fields_types;

 private:
  // The following fields describe internal storage metadata, and are private to
  // prevent user logic from accessing them, but they can be inspected by
  // debuggers.
  static const std::array<std::string_view, fields_size> storage_names;
  // -1 if the field has no isset.
  static const std::array<int, fields_size> isset_indexes;
};

template <> struct TStructDataStorage<::some::valid::ns::containerStruct> {
  static constexpr const std::size_t fields_size = 46;
  static const std::string_view name;
  static const std::array<std::string_view, fields_size> fields_names;
  static const std::array<int16_t, fields_size> fields_ids;
  static const std::array<protocol::TType, fields_size> fields_types;

 private:
  // The following fields describe internal storage metadata, and are private to
  // prevent user logic from accessing them, but they can be inspected by
  // debuggers.
  static const std::array<std::string_view, fields_size> storage_names;
  // -1 if the field has no isset.
  static const std::array<int, fields_size> isset_indexes;
};

template <> struct TStructDataStorage<::some::valid::ns::MyIncludedStruct> {
  static constexpr const std::size_t fields_size = 4;
  static const std::string_view name;
  static const std::array<std::string_view, fields_size> fields_names;
  static const std::array<int16_t, fields_size> fields_ids;
  static const std::array<protocol::TType, fields_size> fields_types;

 private:
  // The following fields describe internal storage metadata, and are private to
  // prevent user logic from accessing them, but they can be inspected by
  // debuggers.
  static const std::array<std::string_view, fields_size> storage_names;
  // -1 if the field has no isset.
  static const std::array<int, fields_size> isset_indexes;
};

template <> struct TStructDataStorage<::some::valid::ns::AnnotatedStruct> {
  static constexpr const std::size_t fields_size = 40;
  static const std::string_view name;
  static const std::array<std::string_view, fields_size> fields_names;
  static const std::array<int16_t, fields_size> fields_ids;
  static const std::array<protocol::TType, fields_size> fields_types;

 private:
  // The following fields describe internal storage metadata, and are private to
  // prevent user logic from accessing them, but they can be inspected by
  // debuggers.
  static const std::array<std::string_view, fields_size> storage_names;
  // -1 if the field has no isset.
  static const std::array<int, fields_size> isset_indexes;
};

template <> struct TStructDataStorage<::some::valid::ns::ComplexContainerStruct> {
  static constexpr const std::size_t fields_size = 2;
  static const std::string_view name;
  static const std::array<std::string_view, fields_size> fields_names;
  static const std::array<int16_t, fields_size> fields_ids;
  static const std::array<protocol::TType, fields_size> fields_types;

 private:
  // The following fields describe internal storage metadata, and are private to
  // prevent user logic from accessing them, but they can be inspected by
  // debuggers.
  static const std::array<std::string_view, fields_size> storage_names;
  // -1 if the field has no isset.
  static const std::array<int, fields_size> isset_indexes;
};

template <> struct TStructDataStorage<::some::valid::ns::FloatStruct> {
  static constexpr const std::size_t fields_size = 2;
  static const std::string_view name;
  static const std::array<std::string_view, fields_size> fields_names;
  static const std::array<int16_t, fields_size> fields_ids;
  static const std::array<protocol::TType, fields_size> fields_types;

 private:
  // The following fields describe internal storage metadata, and are private to
  // prevent user logic from accessing them, but they can be inspected by
  // debuggers.
  static const std::array<std::string_view, fields_size> storage_names;
  // -1 if the field has no isset.
  static const std::array<int, fields_size> isset_indexes;
};

template <> struct TStructDataStorage<::some::valid::ns::FloatUnion> {
  static constexpr const std::size_t fields_size = 2;
  static const std::string_view name;
  static const std::array<std::string_view, fields_size> fields_names;
  static const std::array<int16_t, fields_size> fields_ids;
  static const std::array<protocol::TType, fields_size> fields_types;

 private:
  // The following fields describe internal storage metadata, and are private to
  // prevent user logic from accessing them, but they can be inspected by
  // debuggers.
  static const std::array<std::string_view, fields_size> storage_names;
  // -1 if the field has no isset.
  static const std::array<int, fields_size> isset_indexes;
};

template <> struct TStructDataStorage<::some::valid::ns::AllRequiredNoExceptMoveCtrStruct> {
  static constexpr const std::size_t fields_size = 1;
  static const std::string_view name;
  static const std::array<std::string_view, fields_size> fields_names;
  static const std::array<int16_t, fields_size> fields_ids;
  static const std::array<protocol::TType, fields_size> fields_types;

 private:
  // The following fields describe internal storage metadata, and are private to
  // prevent user logic from accessing them, but they can be inspected by
  // debuggers.
  static const std::array<std::string_view, fields_size> storage_names;
  // -1 if the field has no isset.
  static const std::array<int, fields_size> isset_indexes;
};

}} // apache::thrift
