/**
 * Autogenerated by Thrift for /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_fbthrift/fbthrift/work/fbthrift-2024.07.29.00/thrift/lib/thrift/reflection.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_types_h.h>


#include <unordered_map>

namespace apache {
namespace thrift {
namespace ident {
struct isRequired;
struct type;
struct name;
struct annotations;
struct order;
struct name;
struct fields;
struct mapKeyType;
struct valueType;
struct enumValues;
struct dataTypes;
struct names;
} // namespace ident
namespace detail {
#ifndef APACHE_THRIFT_ACCESSOR_isRequired
#define APACHE_THRIFT_ACCESSOR_isRequired
APACHE_THRIFT_DEFINE_ACCESSOR(isRequired);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_type
#define APACHE_THRIFT_ACCESSOR_type
APACHE_THRIFT_DEFINE_ACCESSOR(type);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_name
#define APACHE_THRIFT_ACCESSOR_name
APACHE_THRIFT_DEFINE_ACCESSOR(name);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_annotations
#define APACHE_THRIFT_ACCESSOR_annotations
APACHE_THRIFT_DEFINE_ACCESSOR(annotations);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_order
#define APACHE_THRIFT_ACCESSOR_order
APACHE_THRIFT_DEFINE_ACCESSOR(order);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_name
#define APACHE_THRIFT_ACCESSOR_name
APACHE_THRIFT_DEFINE_ACCESSOR(name);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_fields
#define APACHE_THRIFT_ACCESSOR_fields
APACHE_THRIFT_DEFINE_ACCESSOR(fields);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_mapKeyType
#define APACHE_THRIFT_ACCESSOR_mapKeyType
APACHE_THRIFT_DEFINE_ACCESSOR(mapKeyType);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_valueType
#define APACHE_THRIFT_ACCESSOR_valueType
APACHE_THRIFT_DEFINE_ACCESSOR(valueType);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_enumValues
#define APACHE_THRIFT_ACCESSOR_enumValues
APACHE_THRIFT_DEFINE_ACCESSOR(enumValues);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_dataTypes
#define APACHE_THRIFT_ACCESSOR_dataTypes
APACHE_THRIFT_DEFINE_ACCESSOR(dataTypes);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_names
#define APACHE_THRIFT_ACCESSOR_names
APACHE_THRIFT_DEFINE_ACCESSOR(names);
#endif
} // namespace detail
} // namespace thrift
} // namespace apache

// BEGIN declare_enums
namespace apache::thrift::reflection {

enum class Type {
  TYPE_VOID = 0,
  TYPE_STRING = 1,
  TYPE_BOOL = 2,
  TYPE_BYTE = 3,
  TYPE_I16 = 4,
  TYPE_I32 = 5,
  TYPE_I64 = 6,
  TYPE_DOUBLE = 7,
  TYPE_ENUM = 8,
  TYPE_LIST = 9,
  TYPE_SET = 10,
  TYPE_MAP = 11,
  TYPE_STRUCT = 12,
  TYPE_SERVICE = 13,
  TYPE_PROGRAM = 14,
  TYPE_FLOAT = 15,
};



} // namespace apache::thrift::reflection

namespace std {
template<> struct hash<::apache::thrift::reflection::Type> :
  ::apache::thrift::detail::enum_hash<::apache::thrift::reflection::Type> {};
} // std

namespace apache { namespace thrift {


template <> struct TEnumDataStorage<::apache::thrift::reflection::Type>;

template <> struct TEnumTraits<::apache::thrift::reflection::Type> {
  using type = ::apache::thrift::reflection::Type;

  static constexpr std::size_t const size = 16;
  static folly::Range<type const*> const values;
  static folly::Range<std::string_view const*> const names;

  static bool findName(type value, std::string_view* out) noexcept;
  static bool findValue(std::string_view name, type* out) noexcept;

  static char const* findName(type value) noexcept {
    std::string_view ret;
    (void)findName(value, &ret);
    return ret.data();
  }
  static constexpr type min() { return type::TYPE_VOID; }
  static constexpr type max() { return type::TYPE_FLOAT; }
};


}} // apache::thrift


// END declare_enums
// BEGIN forward_declare
namespace apache::thrift::reflection {
class StructField;
class DataType;
class Schema;
} // namespace apache::thrift::reflection
// END forward_declare
namespace apache::thrift::detail::annotation {
} // namespace apache::thrift::detail::annotation

namespace apache::thrift::detail::qualifier {
} // namespace apache::thrift::detail::qualifier

// BEGIN hash_and_equal_to
// END hash_and_equal_to
namespace apache::thrift::reflection {
using ::apache::thrift::detail::operator!=;
using ::apache::thrift::detail::operator>;
using ::apache::thrift::detail::operator<=;
using ::apache::thrift::detail::operator>=;


class StructField final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::isRequired,
    ::apache::thrift::ident::type,
    ::apache::thrift::ident::name,
    ::apache::thrift::ident::annotations,
    ::apache::thrift::ident::order
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2,3,4,5};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::bool_t,
    ::apache::thrift::type::i64_t,
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::cpp_type<std::unordered_map<::std::string, ::std::string>, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::string_t>>,
    ::apache::thrift::type::i16_t
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 5;

  template<class T>
  using __fbthrift_id = ::apache::thrift::type::field_id<__fbthrift_reflection_field_id_list[folly::to_underlying(T::value)]>;

  template<class T>
  using __fbthrift_type_tag = ::apache::thrift::detail::at<__fbthrift_reflection_type_tags, T::value>;

  template<class T>
  using __fbthrift_ident = ::apache::thrift::detail::at<__fbthrift_reflection_ident_list, T::value>;

  template<class T> using __fbthrift_ordinal = ::apache::thrift::type::ordinal_tag<
    ::apache::thrift::detail::getFieldOrdinal<T,
                                              __fbthrift_reflection_ident_list,
                                              __fbthrift_reflection_type_tags>(
      __fbthrift_reflection_field_id_list
    )
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

 public:
  using __fbthrift_cpp2_type = StructField;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;
  static constexpr bool __fbthrift_cpp2_uses_op_encode =
    false;


 public:

  StructField();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  StructField(apache::thrift::FragileConstructor, bool isRequired__arg, ::std::int64_t type__arg, ::std::string name__arg, std::unordered_map<::std::string, ::std::string> annotations__arg, ::std::int16_t order__arg);

  StructField(StructField&&) noexcept;

  StructField(const StructField& src);


  StructField& operator=(StructField&&) noexcept;
  StructField& operator=(const StructField& src);

  ~StructField();

 private:
  bool __fbthrift_field_isRequired;
 private:
  ::std::int64_t __fbthrift_field_type;
 private:
  ::std::string __fbthrift_field_name;
 private:
  std::unordered_map<::std::string, ::std::string> __fbthrift_field_annotations;
 private:
  ::std::int16_t __fbthrift_field_order;
 private:
  apache::thrift::detail::isset_bitset<5, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

  bool operator==(const StructField&) const;
  bool operator<(const StructField&) const;

  template <typename..., typename T = bool>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> isRequired_ref() const& {
    return {this->__fbthrift_field_isRequired, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = bool>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> isRequired_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_isRequired), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = bool>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> isRequired_ref() & {
    return {this->__fbthrift_field_isRequired, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = bool>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> isRequired_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_isRequired), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = bool>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> isRequired() const& {
    return {this->__fbthrift_field_isRequired, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = bool>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> isRequired() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_isRequired), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = bool>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> isRequired() & {
    return {this->__fbthrift_field_isRequired, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = bool>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> isRequired() && {
    return {static_cast<T&&>(this->__fbthrift_field_isRequired), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> type_ref() const& {
    return {this->__fbthrift_field_type, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> type_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_type), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> type_ref() & {
    return {this->__fbthrift_field_type, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> type_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_type), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> type() const& {
    return {this->__fbthrift_field_type, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> type() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_type), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> type() & {
    return {this->__fbthrift_field_type, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> type() && {
    return {static_cast<T&&>(this->__fbthrift_field_type), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> name_ref() const& {
    return {this->__fbthrift_field_name, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> name_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_name), __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> name_ref() & {
    return {this->__fbthrift_field_name, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> name_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_name), __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> name() const& {
    return {this->__fbthrift_field_name, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> name() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_name), __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> name() & {
    return {this->__fbthrift_field_name, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> name() && {
    return {static_cast<T&&>(this->__fbthrift_field_name), __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> annotations_ref() const& {
    return {this->__fbthrift_field_annotations, __isset.at(3), __isset.bit(3)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> annotations_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_annotations), __isset.at(3), __isset.bit(3)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> annotations_ref() & {
    return {this->__fbthrift_field_annotations, __isset.at(3), __isset.bit(3)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> annotations_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_annotations), __isset.at(3), __isset.bit(3)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> annotations() const& {
    return {this->__fbthrift_field_annotations, __isset.at(3), __isset.bit(3)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> annotations() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_annotations), __isset.at(3), __isset.bit(3)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> annotations() & {
    return {this->__fbthrift_field_annotations, __isset.at(3), __isset.bit(3)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> annotations() && {
    return {static_cast<T&&>(this->__fbthrift_field_annotations), __isset.at(3), __isset.bit(3)};
  }

  template <typename..., typename T = ::std::int16_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> order_ref() const& {
    return {this->__fbthrift_field_order, __isset.at(4), __isset.bit(4)};
  }

  template <typename..., typename T = ::std::int16_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> order_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_order), __isset.at(4), __isset.bit(4)};
  }

  template <typename..., typename T = ::std::int16_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> order_ref() & {
    return {this->__fbthrift_field_order, __isset.at(4), __isset.bit(4)};
  }

  template <typename..., typename T = ::std::int16_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> order_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_order), __isset.at(4), __isset.bit(4)};
  }

  template <typename..., typename T = ::std::int16_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> order() const& {
    return {this->__fbthrift_field_order, __isset.at(4), __isset.bit(4)};
  }

  template <typename..., typename T = ::std::int16_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> order() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_order), __isset.at(4), __isset.bit(4)};
  }

  template <typename..., typename T = ::std::int16_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> order() & {
    return {this->__fbthrift_field_order, __isset.at(4), __isset.bit(4)};
  }

  template <typename..., typename T = ::std::int16_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> order() && {
    return {static_cast<T&&>(this->__fbthrift_field_order), __isset.at(4), __isset.bit(4)};
  }

  bool get_isRequired() const {
    return __fbthrift_field_isRequired;
  }

  [[deprecated("Use `FOO.isRequired_ref() = BAR;` instead of `FOO.set_isRequired(BAR);`")]]
  bool& set_isRequired(bool isRequired_) {
    isRequired_ref() = isRequired_;
    return __fbthrift_field_isRequired;
  }

  ::std::int64_t get_type() const {
    return __fbthrift_field_type;
  }

  [[deprecated("Use `FOO.type_ref() = BAR;` instead of `FOO.set_type(BAR);`")]]
  ::std::int64_t& set_type(::std::int64_t type_) {
    type_ref() = type_;
    return __fbthrift_field_type;
  }

  const ::std::string& get_name() const& {
    return __fbthrift_field_name;
  }

  ::std::string get_name() && {
    return std::move(__fbthrift_field_name);
  }

  template <typename T_StructField_name_struct_setter = ::std::string>
  [[deprecated("Use `FOO.name_ref() = BAR;` instead of `FOO.set_name(BAR);`")]]
  ::std::string& set_name(T_StructField_name_struct_setter&& name_) {
    name_ref() = std::forward<T_StructField_name_struct_setter>(name_);
    return __fbthrift_field_name;
  }
  const std::unordered_map<::std::string, ::std::string>* get_annotations() const&;
  std::unordered_map<::std::string, ::std::string>* get_annotations() &;
  std::unordered_map<::std::string, ::std::string>* get_annotations() && = delete;

  template <typename T_StructField_annotations_struct_setter = std::unordered_map<::std::string, ::std::string>>
  [[deprecated("Use `FOO.annotations_ref() = BAR;` instead of `FOO.set_annotations(BAR);`")]]
  std::unordered_map<::std::string, ::std::string>& set_annotations(T_StructField_annotations_struct_setter&& annotations_) {
    annotations_ref() = std::forward<T_StructField_annotations_struct_setter>(annotations_);
    return __fbthrift_field_annotations;
  }

  ::std::int16_t get_order() const {
    return __fbthrift_field_order;
  }

  [[deprecated("Use `FOO.order_ref() = BAR;` instead of `FOO.set_order(BAR);`")]]
  ::std::int16_t& set_order(::std::int16_t order_) {
    order_ref() = order_;
    return __fbthrift_field_order;
  }

  template <class Protocol_>
  unsigned long read(Protocol_* iprot);
  template <class Protocol_>
  uint32_t serializedSize(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t serializedSizeZC(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t write(Protocol_* prot_) const;

 private:
  template <class Protocol_>
  void readNoXfer(Protocol_* iprot);

  friend class ::apache::thrift::Cpp2Ops<StructField>;
  friend void swap(StructField& a, StructField& b);
};

template <class Protocol_>
unsigned long StructField::read(Protocol_* iprot) {
  auto _xferStart = iprot->getCursorPosition();
  readNoXfer(iprot);
  return iprot->getCursorPosition() - _xferStart;
}


class DataType final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::name,
    ::apache::thrift::ident::fields,
    ::apache::thrift::ident::mapKeyType,
    ::apache::thrift::ident::valueType,
    ::apache::thrift::ident::enumValues
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2,3,4,5};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::cpp_type<std::unordered_map<::std::int16_t, ::apache::thrift::reflection::StructField>, ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::apache::thrift::reflection::StructField>>>,
    ::apache::thrift::type::i64_t,
    ::apache::thrift::type::i64_t,
    ::apache::thrift::type::cpp_type<std::unordered_map<::std::string, ::std::int32_t>, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::i32_t>>
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 5;

  template<class T>
  using __fbthrift_id = ::apache::thrift::type::field_id<__fbthrift_reflection_field_id_list[folly::to_underlying(T::value)]>;

  template<class T>
  using __fbthrift_type_tag = ::apache::thrift::detail::at<__fbthrift_reflection_type_tags, T::value>;

  template<class T>
  using __fbthrift_ident = ::apache::thrift::detail::at<__fbthrift_reflection_ident_list, T::value>;

  template<class T> using __fbthrift_ordinal = ::apache::thrift::type::ordinal_tag<
    ::apache::thrift::detail::getFieldOrdinal<T,
                                              __fbthrift_reflection_ident_list,
                                              __fbthrift_reflection_type_tags>(
      __fbthrift_reflection_field_id_list
    )
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

 public:
  using __fbthrift_cpp2_type = DataType;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;
  static constexpr bool __fbthrift_cpp2_uses_op_encode =
    false;


 public:

  DataType();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  DataType(apache::thrift::FragileConstructor, ::std::string name__arg, std::unordered_map<::std::int16_t, ::apache::thrift::reflection::StructField> fields__arg, ::std::int64_t mapKeyType__arg, ::std::int64_t valueType__arg, std::unordered_map<::std::string, ::std::int32_t> enumValues__arg);

  DataType(DataType&&) noexcept;

  DataType(const DataType& src);


  DataType& operator=(DataType&&) noexcept;
  DataType& operator=(const DataType& src);

  ~DataType();

 private:
  ::std::string __fbthrift_field_name;
 private:
  std::unordered_map<::std::int16_t, ::apache::thrift::reflection::StructField> __fbthrift_field_fields;
 private:
  ::std::int64_t __fbthrift_field_mapKeyType;
 private:
  ::std::int64_t __fbthrift_field_valueType;
 private:
  std::unordered_map<::std::string, ::std::int32_t> __fbthrift_field_enumValues;
 private:
  apache::thrift::detail::isset_bitset<5, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

  bool operator==(const DataType&) const;
  bool operator<(const DataType&) const;

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> name_ref() const& {
    return {this->__fbthrift_field_name, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> name_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_name), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> name_ref() & {
    return {this->__fbthrift_field_name, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> name_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_name), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> name() const& {
    return {this->__fbthrift_field_name, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> name() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_name), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> name() & {
    return {this->__fbthrift_field_name, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> name() && {
    return {static_cast<T&&>(this->__fbthrift_field_name), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = std::unordered_map<::std::int16_t, ::apache::thrift::reflection::StructField>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> fields_ref() const& {
    return {this->__fbthrift_field_fields, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = std::unordered_map<::std::int16_t, ::apache::thrift::reflection::StructField>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> fields_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_fields), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = std::unordered_map<::std::int16_t, ::apache::thrift::reflection::StructField>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> fields_ref() & {
    return {this->__fbthrift_field_fields, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = std::unordered_map<::std::int16_t, ::apache::thrift::reflection::StructField>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> fields_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_fields), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = std::unordered_map<::std::int16_t, ::apache::thrift::reflection::StructField>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> fields() const& {
    return {this->__fbthrift_field_fields, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = std::unordered_map<::std::int16_t, ::apache::thrift::reflection::StructField>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> fields() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_fields), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = std::unordered_map<::std::int16_t, ::apache::thrift::reflection::StructField>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> fields() & {
    return {this->__fbthrift_field_fields, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = std::unordered_map<::std::int16_t, ::apache::thrift::reflection::StructField>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> fields() && {
    return {static_cast<T&&>(this->__fbthrift_field_fields), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> mapKeyType_ref() const& {
    return {this->__fbthrift_field_mapKeyType, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> mapKeyType_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapKeyType), __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> mapKeyType_ref() & {
    return {this->__fbthrift_field_mapKeyType, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> mapKeyType_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapKeyType), __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> mapKeyType() const& {
    return {this->__fbthrift_field_mapKeyType, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> mapKeyType() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapKeyType), __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> mapKeyType() & {
    return {this->__fbthrift_field_mapKeyType, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> mapKeyType() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapKeyType), __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> valueType_ref() const& {
    return {this->__fbthrift_field_valueType, __isset.at(3), __isset.bit(3)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> valueType_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_valueType), __isset.at(3), __isset.bit(3)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> valueType_ref() & {
    return {this->__fbthrift_field_valueType, __isset.at(3), __isset.bit(3)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> valueType_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_valueType), __isset.at(3), __isset.bit(3)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> valueType() const& {
    return {this->__fbthrift_field_valueType, __isset.at(3), __isset.bit(3)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> valueType() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_valueType), __isset.at(3), __isset.bit(3)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> valueType() & {
    return {this->__fbthrift_field_valueType, __isset.at(3), __isset.bit(3)};
  }

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> valueType() && {
    return {static_cast<T&&>(this->__fbthrift_field_valueType), __isset.at(3), __isset.bit(3)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> enumValues_ref() const& {
    return {this->__fbthrift_field_enumValues, __isset.at(4), __isset.bit(4)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> enumValues_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_enumValues), __isset.at(4), __isset.bit(4)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> enumValues_ref() & {
    return {this->__fbthrift_field_enumValues, __isset.at(4), __isset.bit(4)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> enumValues_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_enumValues), __isset.at(4), __isset.bit(4)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> enumValues() const& {
    return {this->__fbthrift_field_enumValues, __isset.at(4), __isset.bit(4)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> enumValues() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_enumValues), __isset.at(4), __isset.bit(4)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> enumValues() & {
    return {this->__fbthrift_field_enumValues, __isset.at(4), __isset.bit(4)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> enumValues() && {
    return {static_cast<T&&>(this->__fbthrift_field_enumValues), __isset.at(4), __isset.bit(4)};
  }

  const ::std::string& get_name() const& {
    return __fbthrift_field_name;
  }

  ::std::string get_name() && {
    return std::move(__fbthrift_field_name);
  }

  template <typename T_DataType_name_struct_setter = ::std::string>
  [[deprecated("Use `FOO.name_ref() = BAR;` instead of `FOO.set_name(BAR);`")]]
  ::std::string& set_name(T_DataType_name_struct_setter&& name_) {
    name_ref() = std::forward<T_DataType_name_struct_setter>(name_);
    return __fbthrift_field_name;
  }
  const std::unordered_map<::std::int16_t, ::apache::thrift::reflection::StructField>* get_fields() const&;
  std::unordered_map<::std::int16_t, ::apache::thrift::reflection::StructField>* get_fields() &;
  std::unordered_map<::std::int16_t, ::apache::thrift::reflection::StructField>* get_fields() && = delete;

  template <typename T_DataType_fields_struct_setter = std::unordered_map<::std::int16_t, ::apache::thrift::reflection::StructField>>
  [[deprecated("Use `FOO.fields_ref() = BAR;` instead of `FOO.set_fields(BAR);`")]]
  std::unordered_map<::std::int16_t, ::apache::thrift::reflection::StructField>& set_fields(T_DataType_fields_struct_setter&& fields_) {
    fields_ref() = std::forward<T_DataType_fields_struct_setter>(fields_);
    return __fbthrift_field_fields;
  }

  const ::std::int64_t* get_mapKeyType() const& {
    return mapKeyType_ref() ? std::addressof(__fbthrift_field_mapKeyType) : nullptr;
  }

  ::std::int64_t* get_mapKeyType() & {
    return mapKeyType_ref() ? std::addressof(__fbthrift_field_mapKeyType) : nullptr;
  }
  ::std::int64_t* get_mapKeyType() && = delete;

  [[deprecated("Use `FOO.mapKeyType_ref() = BAR;` instead of `FOO.set_mapKeyType(BAR);`")]]
  ::std::int64_t& set_mapKeyType(::std::int64_t mapKeyType_) {
    mapKeyType_ref() = mapKeyType_;
    return __fbthrift_field_mapKeyType;
  }

  const ::std::int64_t* get_valueType() const& {
    return valueType_ref() ? std::addressof(__fbthrift_field_valueType) : nullptr;
  }

  ::std::int64_t* get_valueType() & {
    return valueType_ref() ? std::addressof(__fbthrift_field_valueType) : nullptr;
  }
  ::std::int64_t* get_valueType() && = delete;

  [[deprecated("Use `FOO.valueType_ref() = BAR;` instead of `FOO.set_valueType(BAR);`")]]
  ::std::int64_t& set_valueType(::std::int64_t valueType_) {
    valueType_ref() = valueType_;
    return __fbthrift_field_valueType;
  }
  const std::unordered_map<::std::string, ::std::int32_t>* get_enumValues() const&;
  std::unordered_map<::std::string, ::std::int32_t>* get_enumValues() &;
  std::unordered_map<::std::string, ::std::int32_t>* get_enumValues() && = delete;

  template <typename T_DataType_enumValues_struct_setter = std::unordered_map<::std::string, ::std::int32_t>>
  [[deprecated("Use `FOO.enumValues_ref() = BAR;` instead of `FOO.set_enumValues(BAR);`")]]
  std::unordered_map<::std::string, ::std::int32_t>& set_enumValues(T_DataType_enumValues_struct_setter&& enumValues_) {
    enumValues_ref() = std::forward<T_DataType_enumValues_struct_setter>(enumValues_);
    return __fbthrift_field_enumValues;
  }

  template <class Protocol_>
  unsigned long read(Protocol_* iprot);
  template <class Protocol_>
  uint32_t serializedSize(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t serializedSizeZC(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t write(Protocol_* prot_) const;

 private:
  template <class Protocol_>
  void readNoXfer(Protocol_* iprot);

  friend class ::apache::thrift::Cpp2Ops<DataType>;
  friend void swap(DataType& a, DataType& b);
};

template <class Protocol_>
unsigned long DataType::read(Protocol_* iprot) {
  auto _xferStart = iprot->getCursorPosition();
  readNoXfer(iprot);
  return iprot->getCursorPosition() - _xferStart;
}


class Schema final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::dataTypes,
    ::apache::thrift::ident::names
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::cpp_type<std::unordered_map<::std::int64_t, ::apache::thrift::reflection::DataType>, ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::apache::thrift::reflection::DataType>>>,
    ::apache::thrift::type::cpp_type<std::unordered_map<::std::string, ::std::int64_t>, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::i64_t>>
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 2;

  template<class T>
  using __fbthrift_id = ::apache::thrift::type::field_id<__fbthrift_reflection_field_id_list[folly::to_underlying(T::value)]>;

  template<class T>
  using __fbthrift_type_tag = ::apache::thrift::detail::at<__fbthrift_reflection_type_tags, T::value>;

  template<class T>
  using __fbthrift_ident = ::apache::thrift::detail::at<__fbthrift_reflection_ident_list, T::value>;

  template<class T> using __fbthrift_ordinal = ::apache::thrift::type::ordinal_tag<
    ::apache::thrift::detail::getFieldOrdinal<T,
                                              __fbthrift_reflection_ident_list,
                                              __fbthrift_reflection_type_tags>(
      __fbthrift_reflection_field_id_list
    )
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

 public:
  using __fbthrift_cpp2_type = Schema;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;
  static constexpr bool __fbthrift_cpp2_uses_op_encode =
    false;


 public:

  Schema();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  Schema(apache::thrift::FragileConstructor, std::unordered_map<::std::int64_t, ::apache::thrift::reflection::DataType> dataTypes__arg, std::unordered_map<::std::string, ::std::int64_t> names__arg);

  Schema(Schema&&) noexcept;

  Schema(const Schema& src);


  Schema& operator=(Schema&&) noexcept;
  Schema& operator=(const Schema& src);

  ~Schema();

 private:
  std::unordered_map<::std::int64_t, ::apache::thrift::reflection::DataType> __fbthrift_field_dataTypes;
 private:
  std::unordered_map<::std::string, ::std::int64_t> __fbthrift_field_names;
 private:
  apache::thrift::detail::isset_bitset<2, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

  bool operator==(const Schema&) const;
  bool operator<(const Schema&) const;

  template <typename..., typename T = std::unordered_map<::std::int64_t, ::apache::thrift::reflection::DataType>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> dataTypes_ref() const& {
    return {this->__fbthrift_field_dataTypes, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = std::unordered_map<::std::int64_t, ::apache::thrift::reflection::DataType>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> dataTypes_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_dataTypes), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = std::unordered_map<::std::int64_t, ::apache::thrift::reflection::DataType>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> dataTypes_ref() & {
    return {this->__fbthrift_field_dataTypes, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = std::unordered_map<::std::int64_t, ::apache::thrift::reflection::DataType>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> dataTypes_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_dataTypes), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = std::unordered_map<::std::int64_t, ::apache::thrift::reflection::DataType>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> dataTypes() const& {
    return {this->__fbthrift_field_dataTypes, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = std::unordered_map<::std::int64_t, ::apache::thrift::reflection::DataType>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> dataTypes() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_dataTypes), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = std::unordered_map<::std::int64_t, ::apache::thrift::reflection::DataType>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> dataTypes() & {
    return {this->__fbthrift_field_dataTypes, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = std::unordered_map<::std::int64_t, ::apache::thrift::reflection::DataType>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> dataTypes() && {
    return {static_cast<T&&>(this->__fbthrift_field_dataTypes), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> names_ref() const& {
    return {this->__fbthrift_field_names, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> names_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_names), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> names_ref() & {
    return {this->__fbthrift_field_names, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> names_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_names), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> names() const& {
    return {this->__fbthrift_field_names, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> names() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_names), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> names() & {
    return {this->__fbthrift_field_names, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = std::unordered_map<::std::string, ::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> names() && {
    return {static_cast<T&&>(this->__fbthrift_field_names), __isset.at(1), __isset.bit(1)};
  }
  const std::unordered_map<::std::int64_t, ::apache::thrift::reflection::DataType>& get_dataTypes() const&;
  std::unordered_map<::std::int64_t, ::apache::thrift::reflection::DataType> get_dataTypes() &&;

  template <typename T_Schema_dataTypes_struct_setter = std::unordered_map<::std::int64_t, ::apache::thrift::reflection::DataType>>
  [[deprecated("Use `FOO.dataTypes_ref() = BAR;` instead of `FOO.set_dataTypes(BAR);`")]]
  std::unordered_map<::std::int64_t, ::apache::thrift::reflection::DataType>& set_dataTypes(T_Schema_dataTypes_struct_setter&& dataTypes_) {
    dataTypes_ref() = std::forward<T_Schema_dataTypes_struct_setter>(dataTypes_);
    return __fbthrift_field_dataTypes;
  }
  const std::unordered_map<::std::string, ::std::int64_t>& get_names() const&;
  std::unordered_map<::std::string, ::std::int64_t> get_names() &&;

  template <typename T_Schema_names_struct_setter = std::unordered_map<::std::string, ::std::int64_t>>
  [[deprecated("Use `FOO.names_ref() = BAR;` instead of `FOO.set_names(BAR);`")]]
  std::unordered_map<::std::string, ::std::int64_t>& set_names(T_Schema_names_struct_setter&& names_) {
    names_ref() = std::forward<T_Schema_names_struct_setter>(names_);
    return __fbthrift_field_names;
  }

  template <class Protocol_>
  unsigned long read(Protocol_* iprot);
  template <class Protocol_>
  uint32_t serializedSize(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t serializedSizeZC(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t write(Protocol_* prot_) const;

 private:
  template <class Protocol_>
  void readNoXfer(Protocol_* iprot);

  friend class ::apache::thrift::Cpp2Ops<Schema>;
  friend void swap(Schema& a, Schema& b);
};

template <class Protocol_>
unsigned long Schema::read(Protocol_* iprot) {
  auto _xferStart = iprot->getCursorPosition();
  readNoXfer(iprot);
  return iprot->getCursorPosition() - _xferStart;
}


} // namespace apache::thrift::reflection
