/**
 * Autogenerated by Thrift for /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_fbthrift/fbthrift/work/fbthrift-2023.05.15.00/thrift/annotation/cpp.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 "thrift/annotation/gen-cpp2/scope_types.h"
#include "thrift/annotation/gen-cpp2/thrift_types.h"

namespace apache {
namespace thrift {
namespace ident {
struct name;
struct template_;
struct type;
struct ref;
struct name;
struct adaptedType;
struct underlyingName;
struct extraNamespace;
struct moveOnly;
struct atomic;
struct name;
struct noinline;
struct type;
} // namespace ident
namespace detail {
#ifndef APACHE_THRIFT_ACCESSOR_name
#define APACHE_THRIFT_ACCESSOR_name
APACHE_THRIFT_DEFINE_ACCESSOR(name);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_template_
#define APACHE_THRIFT_ACCESSOR_template_
APACHE_THRIFT_DEFINE_ACCESSOR(template_);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_type
#define APACHE_THRIFT_ACCESSOR_type
APACHE_THRIFT_DEFINE_ACCESSOR(type);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_ref
#define APACHE_THRIFT_ACCESSOR_ref
APACHE_THRIFT_DEFINE_ACCESSOR(ref);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_name
#define APACHE_THRIFT_ACCESSOR_name
APACHE_THRIFT_DEFINE_ACCESSOR(name);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_adaptedType
#define APACHE_THRIFT_ACCESSOR_adaptedType
APACHE_THRIFT_DEFINE_ACCESSOR(adaptedType);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_underlyingName
#define APACHE_THRIFT_ACCESSOR_underlyingName
APACHE_THRIFT_DEFINE_ACCESSOR(underlyingName);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_extraNamespace
#define APACHE_THRIFT_ACCESSOR_extraNamespace
APACHE_THRIFT_DEFINE_ACCESSOR(extraNamespace);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_moveOnly
#define APACHE_THRIFT_ACCESSOR_moveOnly
APACHE_THRIFT_DEFINE_ACCESSOR(moveOnly);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_atomic
#define APACHE_THRIFT_ACCESSOR_atomic
APACHE_THRIFT_DEFINE_ACCESSOR(atomic);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_name
#define APACHE_THRIFT_ACCESSOR_name
APACHE_THRIFT_DEFINE_ACCESSOR(name);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_noinline
#define APACHE_THRIFT_ACCESSOR_noinline
APACHE_THRIFT_DEFINE_ACCESSOR(noinline);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_type
#define APACHE_THRIFT_ACCESSOR_type
APACHE_THRIFT_DEFINE_ACCESSOR(type);
#endif
} // namespace detail
} // namespace thrift
} // namespace apache

// BEGIN declare_enums
namespace facebook { namespace thrift { namespace annotation { namespace cpp {

enum class RefType {
  Unique = 0,
  Shared = 1,
  SharedMutable = 2,
};



enum class EnumUnderlyingType {
  I8 = 0,
  U8 = 1,
  I16 = 2,
  U16 = 3,
  U32 = 4,
};



}}}} // facebook::thrift::annotation::cpp

namespace std {
template<> struct hash<::facebook::thrift::annotation::cpp::RefType> :
  ::apache::thrift::detail::enum_hash<::facebook::thrift::annotation::cpp::RefType> {};
template<> struct hash<::facebook::thrift::annotation::cpp::EnumUnderlyingType> :
  ::apache::thrift::detail::enum_hash<::facebook::thrift::annotation::cpp::EnumUnderlyingType> {};
} // std

namespace apache { namespace thrift {


template <> struct TEnumDataStorage<::facebook::thrift::annotation::cpp::RefType>;

template <> struct TEnumTraits<::facebook::thrift::annotation::cpp::RefType> {
  using type = ::facebook::thrift::annotation::cpp::RefType;

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

  static bool findName(type value, folly::StringPiece* out) noexcept;
  static bool findValue(folly::StringPiece name, type* out) noexcept;

#if FOLLY_HAS_STRING_VIEW
  static bool findName(type value, std::string_view* out) noexcept {
    folly::StringPiece outp;
    return findName(value, &outp) && ((*out = outp), true);
  }
#endif
  static char const* findName(type value) noexcept {
    folly::StringPiece ret;
    (void)findName(value, &ret);
    return ret.data();
  }
  static constexpr type min() { return type::Unique; }
  static constexpr type max() { return type::SharedMutable; }
};


template <> struct TEnumDataStorage<::facebook::thrift::annotation::cpp::EnumUnderlyingType>;

template <> struct TEnumTraits<::facebook::thrift::annotation::cpp::EnumUnderlyingType> {
  using type = ::facebook::thrift::annotation::cpp::EnumUnderlyingType;

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

  static bool findName(type value, folly::StringPiece* out) noexcept;
  static bool findValue(folly::StringPiece name, type* out) noexcept;

#if FOLLY_HAS_STRING_VIEW
  static bool findName(type value, std::string_view* out) noexcept {
    folly::StringPiece outp;
    return findName(value, &outp) && ((*out = outp), true);
  }
#endif
  static char const* findName(type value) noexcept {
    folly::StringPiece ret;
    (void)findName(value, &ret);
    return ret.data();
  }
  static constexpr type min() { return type::I8; }
  static constexpr type max() { return type::U32; }
};


}} // apache::thrift

namespace facebook { namespace thrift { namespace annotation { namespace cpp {

using _RefType_EnumMapFactory = apache::thrift::detail::TEnumMapFactory<RefType>;
#ifndef ANDROID
[[deprecated("use apache::thrift::util::enumNameSafe, apache::thrift::util::enumName, or apache::thrift::TEnumTraits")]]
extern const _RefType_EnumMapFactory::ValuesToNamesMapType _RefType_VALUES_TO_NAMES;
#endif
using _EnumUnderlyingType_EnumMapFactory = apache::thrift::detail::TEnumMapFactory<EnumUnderlyingType>;
#ifndef ANDROID
[[deprecated("use apache::thrift::util::enumNameSafe, apache::thrift::util::enumName, or apache::thrift::TEnumTraits")]]
extern const _EnumUnderlyingType_EnumMapFactory::ValuesToNamesMapType _EnumUnderlyingType_VALUES_TO_NAMES;
#endif
}}}} // facebook::thrift::annotation::cpp

// END declare_enums
// BEGIN forward_declare
namespace facebook { namespace thrift { namespace annotation { namespace cpp {
class Type;
class Ref;
class Lazy;
class DisableLazyChecksum;
class Adapter;
class PackIsset;
class MinimizePadding;
class TriviallyRelocatable;
class ScopedEnumAsUnionType;
class StrongType;
class FieldInterceptor;
class UseOpEncode;
class EnumType;
class Frozen2Exclude;
class Frozen2RequiresCompleteContainerParams;
}}}} // facebook::thrift::annotation::cpp
// END forward_declare
// BEGIN hash_and_equal_to
// END hash_and_equal_to
namespace facebook { namespace thrift { namespace annotation { namespace cpp {
using ::apache::thrift::detail::operator!=;
using ::apache::thrift::detail::operator>;
using ::apache::thrift::detail::operator<=;
using ::apache::thrift::detail::operator>=;


class Type 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 const char* __fbthrift_thrift_uri();
  static const folly::StringPiece __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static const folly::StringPiece __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::name,
    ::apache::thrift::ident::template_
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::string_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 = Type;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

  Type() {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  Type(apache::thrift::FragileConstructor, ::std::string name__arg, ::std::string template___arg);

  Type(Type&&) noexcept;

  Type(const Type& src);


  Type& operator=(Type&&) noexcept;
  Type& operator=(const Type& src);
 private:
  ::std::string __fbthrift_field_name;
 private:
  ::std::string __fbthrift_field_template_;
 private:
  apache::thrift::detail::isset_bitset<2, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

  bool operator==(const Type&) const;
  bool operator<(const Type&) 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::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> template__ref() const& {
    return {this->__fbthrift_field_template_, __isset.at(1), __isset.bit(1)};
  }

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

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

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

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

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

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

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

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

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

  template <typename T_Type_name_struct_setter = ::std::string>
  [[deprecated("Use `FOO.name_ref() = BAR;` instead of `FOO.set_name(BAR);`")]]
  ::std::string& set_name(T_Type_name_struct_setter&& name_) {
    name_ref() = std::forward<T_Type_name_struct_setter>(name_);
    return __fbthrift_field_name;
  }

  const ::std::string& get_template_() const& {
    return __fbthrift_field_template_;
  }

  ::std::string get_template_() && {
    return std::move(__fbthrift_field_template_);
  }

  template <typename T_Type_template__struct_setter = ::std::string>
  [[deprecated("Use `FOO.template__ref() = BAR;` instead of `FOO.set_template_(BAR);`")]]
  ::std::string& set_template_(T_Type_template__struct_setter&& template__) {
    template__ref() = std::forward<T_Type_template__struct_setter>(template__);
    return __fbthrift_field_template_;
  }

  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<Type>;
  friend void swap(Type& a, Type& b);
};

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


class Ref 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 const char* __fbthrift_thrift_uri();
  static const folly::StringPiece __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static const folly::StringPiece __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::type
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::enum_t<::facebook::thrift::annotation::cpp::RefType>
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 1;

  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 = Ref;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

  Ref() :
      __fbthrift_field_type() {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  Ref(apache::thrift::FragileConstructor, ::facebook::thrift::annotation::cpp::RefType type__arg);

  Ref(Ref&&) = default;

  Ref(const Ref&) = default;


  Ref& operator=(Ref&&) = default;

  Ref& operator=(const Ref&) = default;
 private:
  ::facebook::thrift::annotation::cpp::RefType __fbthrift_field_type;
 private:
  apache::thrift::detail::isset_bitset<1, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

  template <typename..., typename T = ::facebook::thrift::annotation::cpp::RefType>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> type_ref() const& {
    return {this->__fbthrift_field_type, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::facebook::thrift::annotation::cpp::RefType>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> type_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_type), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::facebook::thrift::annotation::cpp::RefType>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> type_ref() & {
    return {this->__fbthrift_field_type, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::facebook::thrift::annotation::cpp::RefType>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> type_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_type), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::facebook::thrift::annotation::cpp::RefType>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> type() const& {
    return {this->__fbthrift_field_type, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::facebook::thrift::annotation::cpp::RefType>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> type() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_type), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::facebook::thrift::annotation::cpp::RefType>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> type() & {
    return {this->__fbthrift_field_type, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::facebook::thrift::annotation::cpp::RefType>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> type() && {
    return {static_cast<T&&>(this->__fbthrift_field_type), __isset.at(0), __isset.bit(0)};
  }

  ::facebook::thrift::annotation::cpp::RefType get_type() const {
    return __fbthrift_field_type;
  }

  [[deprecated("Use `FOO.type_ref() = BAR;` instead of `FOO.set_type(BAR);`")]]
  ::facebook::thrift::annotation::cpp::RefType& set_type(::facebook::thrift::annotation::cpp::RefType type_) {
    type_ref() = type_;
    return __fbthrift_field_type;
  }

  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<Ref>;
  friend void swap(Ref& a, Ref& b);
};

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


class Lazy 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 const char* __fbthrift_thrift_uri();
  static const folly::StringPiece __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static const folly::StringPiece __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::ref
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::bool_t
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 1;

  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 = Lazy;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

  Lazy() :
      __fbthrift_field_ref(false) {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  Lazy(apache::thrift::FragileConstructor, bool ref__arg);

  Lazy(Lazy&&) = default;

  Lazy(const Lazy&) = default;


  Lazy& operator=(Lazy&&) = default;

  Lazy& operator=(const Lazy&) = default;
 private:
  bool __fbthrift_field_ref;
 private:
  apache::thrift::detail::isset_bitset<1, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

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

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

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

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

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

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

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

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

  bool get_ref() const {
    return __fbthrift_field_ref;
  }

  [[deprecated("Use `FOO.ref_ref() = BAR;` instead of `FOO.set_ref(BAR);`")]]
  bool& set_ref(bool ref_) {
    ref_ref() = ref_;
    return __fbthrift_field_ref;
  }

  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<Lazy>;
  friend void swap(Lazy& a, Lazy& b);
};

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


class DisableLazyChecksum 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 const char* __fbthrift_thrift_uri();
  static const folly::StringPiece __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static const folly::StringPiece __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0};
  using __fbthrift_reflection_type_tags = folly::tag_t<
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 0;

  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 = DisableLazyChecksum;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

  DisableLazyChecksum() {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  DisableLazyChecksum(apache::thrift::FragileConstructor);

  DisableLazyChecksum(DisableLazyChecksum&&) = default;

  DisableLazyChecksum(const DisableLazyChecksum&) = default;


  DisableLazyChecksum& operator=(DisableLazyChecksum&&) = default;

  DisableLazyChecksum& operator=(const DisableLazyChecksum&) = default;

 public:

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

  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<DisableLazyChecksum>;
  friend void swap(DisableLazyChecksum& a, DisableLazyChecksum& b);
};

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


class Adapter 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 const char* __fbthrift_thrift_uri();
  static const folly::StringPiece __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static const folly::StringPiece __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::name,
    ::apache::thrift::ident::adaptedType,
    ::apache::thrift::ident::underlyingName,
    ::apache::thrift::ident::extraNamespace,
    ::apache::thrift::ident::moveOnly
  >;

  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::string_t,
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::bool_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 = Adapter;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

  Adapter();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  Adapter(apache::thrift::FragileConstructor, ::std::string name__arg, ::std::string adaptedType__arg, ::std::string underlyingName__arg, ::std::string extraNamespace__arg, bool moveOnly__arg);

  Adapter(Adapter&&) noexcept;

  Adapter(const Adapter& src);


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

  ~Adapter();

 private:
  ::std::string __fbthrift_field_name;
 private:
  ::std::string __fbthrift_field_adaptedType;
 private:
  ::std::string __fbthrift_field_underlyingName;
 private:
  ::std::string __fbthrift_field_extraNamespace;
 private:
  bool __fbthrift_field_moveOnly;
 private:
  apache::thrift::detail::isset_bitset<5, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

  bool operator==(const Adapter&) const;
  bool operator<(const Adapter&) 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::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> adaptedType_ref() const& {
    return {this->__fbthrift_field_adaptedType, __isset.at(1), __isset.bit(1)};
  }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  template <typename..., typename T = bool>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> moveOnly() && {
    return {static_cast<T&&>(this->__fbthrift_field_moveOnly), __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_Adapter_name_struct_setter = ::std::string>
  [[deprecated("Use `FOO.name_ref() = BAR;` instead of `FOO.set_name(BAR);`")]]
  ::std::string& set_name(T_Adapter_name_struct_setter&& name_) {
    name_ref() = std::forward<T_Adapter_name_struct_setter>(name_);
    return __fbthrift_field_name;
  }

  const ::std::string& get_adaptedType() const& {
    return __fbthrift_field_adaptedType;
  }

  ::std::string get_adaptedType() && {
    return std::move(__fbthrift_field_adaptedType);
  }

  template <typename T_Adapter_adaptedType_struct_setter = ::std::string>
  [[deprecated("Use `FOO.adaptedType_ref() = BAR;` instead of `FOO.set_adaptedType(BAR);`")]]
  ::std::string& set_adaptedType(T_Adapter_adaptedType_struct_setter&& adaptedType_) {
    adaptedType_ref() = std::forward<T_Adapter_adaptedType_struct_setter>(adaptedType_);
    return __fbthrift_field_adaptedType;
  }

  const ::std::string& get_underlyingName() const& {
    return __fbthrift_field_underlyingName;
  }

  ::std::string get_underlyingName() && {
    return std::move(__fbthrift_field_underlyingName);
  }

  template <typename T_Adapter_underlyingName_struct_setter = ::std::string>
  [[deprecated("Use `FOO.underlyingName_ref() = BAR;` instead of `FOO.set_underlyingName(BAR);`")]]
  ::std::string& set_underlyingName(T_Adapter_underlyingName_struct_setter&& underlyingName_) {
    underlyingName_ref() = std::forward<T_Adapter_underlyingName_struct_setter>(underlyingName_);
    return __fbthrift_field_underlyingName;
  }

  const ::std::string& get_extraNamespace() const& {
    return __fbthrift_field_extraNamespace;
  }

  ::std::string get_extraNamespace() && {
    return std::move(__fbthrift_field_extraNamespace);
  }

  template <typename T_Adapter_extraNamespace_struct_setter = ::std::string>
  [[deprecated("Use `FOO.extraNamespace_ref() = BAR;` instead of `FOO.set_extraNamespace(BAR);`")]]
  ::std::string& set_extraNamespace(T_Adapter_extraNamespace_struct_setter&& extraNamespace_) {
    extraNamespace_ref() = std::forward<T_Adapter_extraNamespace_struct_setter>(extraNamespace_);
    return __fbthrift_field_extraNamespace;
  }

  bool get_moveOnly() const {
    return __fbthrift_field_moveOnly;
  }

  [[deprecated("Use `FOO.moveOnly_ref() = BAR;` instead of `FOO.set_moveOnly(BAR);`")]]
  bool& set_moveOnly(bool moveOnly_) {
    moveOnly_ref() = moveOnly_;
    return __fbthrift_field_moveOnly;
  }

  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<Adapter>;
  friend void swap(Adapter& a, Adapter& b);
};

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


class PackIsset 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 const char* __fbthrift_thrift_uri();
  static const folly::StringPiece __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static const folly::StringPiece __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::atomic
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::bool_t
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 1;

  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 = PackIsset;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

  PackIsset() :
      __fbthrift_field_atomic(true) {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  PackIsset(apache::thrift::FragileConstructor, bool atomic__arg);

  PackIsset(PackIsset&&) = default;

  PackIsset(const PackIsset&) = default;


  PackIsset& operator=(PackIsset&&) = default;

  PackIsset& operator=(const PackIsset&) = default;
 private:
  bool __fbthrift_field_atomic;
 private:
  apache::thrift::detail::isset_bitset<1, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

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

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

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

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

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

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

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

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

  bool get_atomic() const {
    return __fbthrift_field_atomic;
  }

  [[deprecated("Use `FOO.atomic_ref() = BAR;` instead of `FOO.set_atomic(BAR);`")]]
  bool& set_atomic(bool atomic_) {
    atomic_ref() = atomic_;
    return __fbthrift_field_atomic;
  }

  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<PackIsset>;
  friend void swap(PackIsset& a, PackIsset& b);
};

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


class MinimizePadding 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 const char* __fbthrift_thrift_uri();
  static const folly::StringPiece __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static const folly::StringPiece __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0};
  using __fbthrift_reflection_type_tags = folly::tag_t<
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 0;

  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 = MinimizePadding;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

  MinimizePadding() {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  MinimizePadding(apache::thrift::FragileConstructor);

  MinimizePadding(MinimizePadding&&) = default;

  MinimizePadding(const MinimizePadding&) = default;


  MinimizePadding& operator=(MinimizePadding&&) = default;

  MinimizePadding& operator=(const MinimizePadding&) = default;

 public:

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

  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<MinimizePadding>;
  friend void swap(MinimizePadding& a, MinimizePadding& b);
};

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


class TriviallyRelocatable 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 const char* __fbthrift_thrift_uri();
  static const folly::StringPiece __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static const folly::StringPiece __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0};
  using __fbthrift_reflection_type_tags = folly::tag_t<
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 0;

  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 = TriviallyRelocatable;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

  TriviallyRelocatable() {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  TriviallyRelocatable(apache::thrift::FragileConstructor);

  TriviallyRelocatable(TriviallyRelocatable&&) = default;

  TriviallyRelocatable(const TriviallyRelocatable&) = default;


  TriviallyRelocatable& operator=(TriviallyRelocatable&&) = default;

  TriviallyRelocatable& operator=(const TriviallyRelocatable&) = default;

 public:

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

  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<TriviallyRelocatable>;
  friend void swap(TriviallyRelocatable& a, TriviallyRelocatable& b);
};

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


class ScopedEnumAsUnionType 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 const char* __fbthrift_thrift_uri();
  static const folly::StringPiece __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static const folly::StringPiece __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0};
  using __fbthrift_reflection_type_tags = folly::tag_t<
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 0;

  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 = ScopedEnumAsUnionType;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

  ScopedEnumAsUnionType() {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  ScopedEnumAsUnionType(apache::thrift::FragileConstructor);

  ScopedEnumAsUnionType(ScopedEnumAsUnionType&&) = default;

  ScopedEnumAsUnionType(const ScopedEnumAsUnionType&) = default;


  ScopedEnumAsUnionType& operator=(ScopedEnumAsUnionType&&) = default;

  ScopedEnumAsUnionType& operator=(const ScopedEnumAsUnionType&) = default;

 public:

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

  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<ScopedEnumAsUnionType>;
  friend void swap(ScopedEnumAsUnionType& a, ScopedEnumAsUnionType& b);
};

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


class StrongType 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 const char* __fbthrift_thrift_uri();
  static const folly::StringPiece __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static const folly::StringPiece __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0};
  using __fbthrift_reflection_type_tags = folly::tag_t<
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 0;

  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 = StrongType;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

  StrongType() {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  StrongType(apache::thrift::FragileConstructor);

  StrongType(StrongType&&) = default;

  StrongType(const StrongType&) = default;


  StrongType& operator=(StrongType&&) = default;

  StrongType& operator=(const StrongType&) = default;

 public:

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

  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<StrongType>;
  friend void swap(StrongType& a, StrongType& b);
};

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


class FieldInterceptor 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 const char* __fbthrift_thrift_uri();
  static const folly::StringPiece __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static const folly::StringPiece __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::name,
    ::apache::thrift::ident::noinline
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::bool_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 = FieldInterceptor;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

  FieldInterceptor() :
      __fbthrift_field_noinline() {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  FieldInterceptor(apache::thrift::FragileConstructor, ::std::string name__arg, bool noinline__arg);

  FieldInterceptor(FieldInterceptor&&) noexcept;

  FieldInterceptor(const FieldInterceptor& src);


  FieldInterceptor& operator=(FieldInterceptor&&) noexcept;
  FieldInterceptor& operator=(const FieldInterceptor& src);
 private:
  ::std::string __fbthrift_field_name;
 private:
  bool __fbthrift_field_noinline;
 private:
  apache::thrift::detail::isset_bitset<2, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

  bool operator==(const FieldInterceptor&) const;
  bool operator<(const FieldInterceptor&) 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 = bool>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> noinline_ref() const& {
    return {this->__fbthrift_field_noinline, __isset.at(1), __isset.bit(1)};
  }

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

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

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

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

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

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

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

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

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

  template <typename T_FieldInterceptor_name_struct_setter = ::std::string>
  [[deprecated("Use `FOO.name_ref() = BAR;` instead of `FOO.set_name(BAR);`")]]
  ::std::string& set_name(T_FieldInterceptor_name_struct_setter&& name_) {
    name_ref() = std::forward<T_FieldInterceptor_name_struct_setter>(name_);
    return __fbthrift_field_name;
  }

  bool get_noinline() const {
    return __fbthrift_field_noinline;
  }

  [[deprecated("Use `FOO.noinline_ref() = BAR;` instead of `FOO.set_noinline(BAR);`")]]
  bool& set_noinline(bool noinline_) {
    noinline_ref() = noinline_;
    return __fbthrift_field_noinline;
  }

  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<FieldInterceptor>;
  friend void swap(FieldInterceptor& a, FieldInterceptor& b);
};

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


class UseOpEncode 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 const char* __fbthrift_thrift_uri();
  static const folly::StringPiece __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static const folly::StringPiece __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0};
  using __fbthrift_reflection_type_tags = folly::tag_t<
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 0;

  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 = UseOpEncode;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

  UseOpEncode() {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  UseOpEncode(apache::thrift::FragileConstructor);

  UseOpEncode(UseOpEncode&&) = default;

  UseOpEncode(const UseOpEncode&) = default;


  UseOpEncode& operator=(UseOpEncode&&) = default;

  UseOpEncode& operator=(const UseOpEncode&) = default;

 public:

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

  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<UseOpEncode>;
  friend void swap(UseOpEncode& a, UseOpEncode& b);
};

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


class EnumType 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 const char* __fbthrift_thrift_uri();
  static const folly::StringPiece __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static const folly::StringPiece __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::type
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::enum_t<::facebook::thrift::annotation::cpp::EnumUnderlyingType>
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 1;

  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 = EnumType;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

  EnumType() :
      __fbthrift_field_type() {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  EnumType(apache::thrift::FragileConstructor, ::facebook::thrift::annotation::cpp::EnumUnderlyingType type__arg);

  EnumType(EnumType&&) = default;

  EnumType(const EnumType&) = default;


  EnumType& operator=(EnumType&&) = default;

  EnumType& operator=(const EnumType&) = default;
 private:
  ::facebook::thrift::annotation::cpp::EnumUnderlyingType __fbthrift_field_type;
 private:
  apache::thrift::detail::isset_bitset<1, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

  template <typename..., typename T = ::facebook::thrift::annotation::cpp::EnumUnderlyingType>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> type_ref() const& {
    return {this->__fbthrift_field_type, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::facebook::thrift::annotation::cpp::EnumUnderlyingType>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> type_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_type), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::facebook::thrift::annotation::cpp::EnumUnderlyingType>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> type_ref() & {
    return {this->__fbthrift_field_type, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::facebook::thrift::annotation::cpp::EnumUnderlyingType>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> type_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_type), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::facebook::thrift::annotation::cpp::EnumUnderlyingType>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> type() const& {
    return {this->__fbthrift_field_type, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::facebook::thrift::annotation::cpp::EnumUnderlyingType>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> type() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_type), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::facebook::thrift::annotation::cpp::EnumUnderlyingType>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> type() & {
    return {this->__fbthrift_field_type, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::facebook::thrift::annotation::cpp::EnumUnderlyingType>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> type() && {
    return {static_cast<T&&>(this->__fbthrift_field_type), __isset.at(0), __isset.bit(0)};
  }

  ::facebook::thrift::annotation::cpp::EnumUnderlyingType get_type() const {
    return __fbthrift_field_type;
  }

  [[deprecated("Use `FOO.type_ref() = BAR;` instead of `FOO.set_type(BAR);`")]]
  ::facebook::thrift::annotation::cpp::EnumUnderlyingType& set_type(::facebook::thrift::annotation::cpp::EnumUnderlyingType type_) {
    type_ref() = type_;
    return __fbthrift_field_type;
  }

  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<EnumType>;
  friend void swap(EnumType& a, EnumType& b);
};

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


class Frozen2Exclude 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 const char* __fbthrift_thrift_uri();
  static const folly::StringPiece __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static const folly::StringPiece __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0};
  using __fbthrift_reflection_type_tags = folly::tag_t<
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 0;

  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 = Frozen2Exclude;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

  Frozen2Exclude() {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  Frozen2Exclude(apache::thrift::FragileConstructor);

  Frozen2Exclude(Frozen2Exclude&&) = default;

  Frozen2Exclude(const Frozen2Exclude&) = default;


  Frozen2Exclude& operator=(Frozen2Exclude&&) = default;

  Frozen2Exclude& operator=(const Frozen2Exclude&) = default;

 public:

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

  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<Frozen2Exclude>;
  friend void swap(Frozen2Exclude& a, Frozen2Exclude& b);
};

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


class Frozen2RequiresCompleteContainerParams 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 const char* __fbthrift_thrift_uri();
  static const folly::StringPiece __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static const folly::StringPiece __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0};
  using __fbthrift_reflection_type_tags = folly::tag_t<
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 0;

  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 = Frozen2RequiresCompleteContainerParams;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

  Frozen2RequiresCompleteContainerParams() {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  Frozen2RequiresCompleteContainerParams(apache::thrift::FragileConstructor);

  Frozen2RequiresCompleteContainerParams(Frozen2RequiresCompleteContainerParams&&) = default;

  Frozen2RequiresCompleteContainerParams(const Frozen2RequiresCompleteContainerParams&) = default;


  Frozen2RequiresCompleteContainerParams& operator=(Frozen2RequiresCompleteContainerParams&&) = default;

  Frozen2RequiresCompleteContainerParams& operator=(const Frozen2RequiresCompleteContainerParams&) = default;

 public:

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

  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<Frozen2RequiresCompleteContainerParams>;
  friend void swap(Frozen2RequiresCompleteContainerParams& a, Frozen2RequiresCompleteContainerParams& b);
};

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


}}}} // facebook::thrift::annotation::cpp
