/**
 * Autogenerated by Thrift for thrift/compiler/test/fixtures/py3/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/py3/gen-py3cpp/module_types.h"

namespace apache { namespace thrift {

template <> struct TEnumDataStorage<::py3::simple::AnEnum> {
  using type = ::py3::simple::AnEnum;
  static constexpr const std::size_t size = 5;
  static constexpr std::array<type, size> values = { {
      type::None,
      type::ONE,
      type::TWO,
      type::THREE,
      type::FOUR,
  }};
  static constexpr std::array<std::string_view, size> names = { {
      "None"sv,
      "ONE"sv,
      "TWO"sv,
      "THREE"sv,
      "FOUR"sv,
  }};
};

template <> struct TEnumDataStorage<::py3::simple::AnEnumRenamed> {
  using type = ::py3::simple::AnEnumRenamed;
  static constexpr const std::size_t size = 3;
  static constexpr std::array<type, size> values = { {
      type::name,
      type::value,
      type::normal,
  }};
  static constexpr std::array<std::string_view, size> names = { {
      "name"sv,
      "value"sv,
      "normal"sv,
  }};
};

template <> struct TEnumDataStorage<::py3::simple::Flags> {
  using type = ::py3::simple::Flags;
  static constexpr const std::size_t size = 4;
  static constexpr std::array<type, size> values = { {
      type::flag_A,
      type::flag_B,
      type::flag_C,
      type::flag_D,
  }};
  static constexpr std::array<std::string_view, size> names = { {
      "flag_A"sv,
      "flag_B"sv,
      "flag_C"sv,
      "flag_D"sv,
  }};
};

template <> struct TEnumDataStorage<::py3::simple::detail::AdaptedUnion::Type> {
  using type = ::py3::simple::detail::AdaptedUnion::Type;
  static constexpr const std::size_t size = 1;
  static constexpr std::array<type, size> values = { {
      type::best,
  }};
  static constexpr std::array<std::string_view, size> names = { {
      "best"sv,
  }};
};

template <> struct TEnumDataStorage<::py3::simple::BinaryUnion::Type> {
  using type = ::py3::simple::BinaryUnion::Type;
  static constexpr const std::size_t size = 1;
  static constexpr std::array<type, size> values = { {
      type::iobuf_val,
  }};
  static constexpr std::array<std::string_view, size> names = { {
      "iobuf_val"sv,
  }};
};

template <> struct TStructDataStorage<::py3::simple::SimpleException> {
  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<::py3::simple::OptionalRefStruct> {
  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<::py3::simple::SimpleStruct> {
  static constexpr const std::size_t fields_size = 9;
  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<::py3::simple::HiddenTypeFieldsStruct> {
  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<::py3::simple::detail::AdaptedUnion> {
  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<::py3::simple::HiddenException> {
  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<::py3::simple::ComplexStruct> {
  static constexpr const std::size_t fields_size = 9;
  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<::py3::simple::BinaryUnion> {
  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<::py3::simple::BinaryUnionStruct> {
  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
