/**
 * Autogenerated by Thrift for /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_fbthrift/fbthrift/work/fbthrift-2025.01.13.00/thrift/lib/thrift/protocol.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/lib/thrift/gen-cpp2/id_types.h"
#include "thrift/lib/thrift/gen-cpp2/protocol_detail_types.h"
#include "thrift/lib/thrift/gen-cpp2/type_types.h"
#include "thrift/lib/thrift/gen-cpp2/standard_types.h"
#include "folly/container/F14Map.h"
#include "thrift/lib/thrift/detail/id.h"

namespace apache {
namespace thrift {
namespace ident {
struct full;
struct fields;
struct values;
struct wireType;
struct data;
struct protocol;
struct data;
struct values;
struct keys;
} // namespace ident
namespace detail {
#ifndef APACHE_THRIFT_ACCESSOR_full
#define APACHE_THRIFT_ACCESSOR_full
APACHE_THRIFT_DEFINE_ACCESSOR(full);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_fields
#define APACHE_THRIFT_ACCESSOR_fields
APACHE_THRIFT_DEFINE_ACCESSOR(fields);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_values
#define APACHE_THRIFT_ACCESSOR_values
APACHE_THRIFT_DEFINE_ACCESSOR(values);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_wireType
#define APACHE_THRIFT_ACCESSOR_wireType
APACHE_THRIFT_DEFINE_ACCESSOR(wireType);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_data
#define APACHE_THRIFT_ACCESSOR_data
APACHE_THRIFT_DEFINE_ACCESSOR(data);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_protocol
#define APACHE_THRIFT_ACCESSOR_protocol
APACHE_THRIFT_DEFINE_ACCESSOR(protocol);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_data
#define APACHE_THRIFT_ACCESSOR_data
APACHE_THRIFT_DEFINE_ACCESSOR(data);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_values
#define APACHE_THRIFT_ACCESSOR_values
APACHE_THRIFT_DEFINE_ACCESSOR(values);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_keys
#define APACHE_THRIFT_ACCESSOR_keys
APACHE_THRIFT_DEFINE_ACCESSOR(keys);
#endif
} // namespace detail
} // namespace thrift
} // namespace apache

// BEGIN declare_enums

// END declare_enums
// BEGIN forward_declare
namespace apache::thrift::protocol {
class MaskedData;
class EncodedValue;
class MaskedProtocolData;
} // namespace apache::thrift::protocol
// 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::protocol {
using ::apache::thrift::detail::operator!=;
using ::apache::thrift::detail::operator>;
using ::apache::thrift::detail::operator<=;
using ::apache::thrift::detail::operator>=;

/** Glean {"file": "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_fbthrift/fbthrift/work/fbthrift-2025.01.13.00/thrift/lib/thrift/protocol.thrift", "name": "Object", "kind": "typedef" } */
typedef ::apache::thrift::protocol::detail::Object Object;
/** Glean {"file": "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_fbthrift/fbthrift/work/fbthrift-2025.01.13.00/thrift/lib/thrift/protocol.thrift", "name": "Value", "kind": "typedef" } */
typedef ::apache::thrift::protocol::detail::Value Value;

/** Glean {"file": "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_fbthrift/fbthrift/work/fbthrift-2025.01.13.00/thrift/lib/thrift/protocol.thrift", "name": "MaskedData", "kind": "union" } */
class MaskedData 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 const char* __fbthrift_thrift_uri();
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "protocol";
  }
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::full,
    ::apache::thrift::ident::fields,
    ::apache::thrift::ident::values
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2,3};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::adapted<::apache::thrift::type::detail::StrongIntegerAdapter<::apache::thrift::type::ValueId>, ::apache::thrift::type::i64_t>,
    ::apache::thrift::type::cpp_type<folly::F14VectorMap<::apache::thrift::type::FieldId, ::apache::thrift::protocol::MaskedData>, ::apache::thrift::type::map<::apache::thrift::type::adapted<::apache::thrift::type::detail::StrongIntegerAdapter<::apache::thrift::type::FieldId>, ::apache::thrift::type::i16_t>, ::apache::thrift::type::union_t<::apache::thrift::protocol::MaskedData>>>,
    ::apache::thrift::type::cpp_type<folly::F14VectorMap<::apache::thrift::type::ValueId, ::apache::thrift::protocol::MaskedData>, ::apache::thrift::type::map<::apache::thrift::type::adapted<::apache::thrift::type::detail::StrongIntegerAdapter<::apache::thrift::type::ValueId>, ::apache::thrift::type::i64_t>, ::apache::thrift::type::union_t<::apache::thrift::protocol::MaskedData>>>
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 3;

  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_destruct();
  bool __fbthrift_is_empty() const;

 public:
  using __fbthrift_cpp2_type = MaskedData;
  static constexpr bool __fbthrift_cpp2_is_union =
    true;
  static constexpr bool __fbthrift_cpp2_uses_op_encode =
    true;


 public:
  enum Type : int {
    __EMPTY__ = 0,
    full = 1,
    fields = 2,
    values = 3,
  } ;

  MaskedData()
      : type_(folly::to_underlying(Type::__EMPTY__)) {}

  MaskedData(MaskedData&& rhs) noexcept
      : type_(folly::to_underlying(Type::__EMPTY__)) {
    if (this == &rhs) { return; }
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return;
      }
      case Type::full:
      {
        set_full(std::move(rhs.value_.full));
        break;
      }
      case Type::fields:
      {
        set_fields(std::move(*rhs.value_.fields));
        break;
      }
      case Type::values:
      {
        set_values(std::move(*rhs.value_.values));
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
    apache::thrift::clear(rhs);
  }

  MaskedData(const MaskedData& rhs);

  MaskedData& operator=(MaskedData&& rhs) noexcept {
    if (this == &rhs) { return *this; }
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        __fbthrift_clear();
        return *this;
      }
      case Type::full:
      {
        set_full(std::move(rhs.value_.full));
        break;
      }
      case Type::fields:
      {
        set_fields(std::move(*rhs.value_.fields));
        break;
      }
      case Type::values:
      {
        set_values(std::move(*rhs.value_.values));
        break;
      }
      default:
      {
        assert(false);
        __fbthrift_clear();
      }
    }
    apache::thrift::clear(rhs);
    return *this;
  }

  MaskedData& operator=(const MaskedData& rhs);

  ~MaskedData();

  union storage_type {
    ::apache::thrift::type::ValueId full;
    ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::FieldId, ::apache::thrift::protocol::MaskedData>> fields;
    ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::ValueId, ::apache::thrift::protocol::MaskedData>> values;

    storage_type() {}
    ~storage_type() {}
  } ;

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

  /** Glean { "field": "full" } */
  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::type::ValueId& set_full(::apache::thrift::type::ValueId t = ::apache::thrift::type::ValueId()) {
    using T0 = ::apache::thrift::type::ValueId;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::full);
    ::new (std::addressof(value_.full)) T(t);
    return value_.full;
  }

  ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::FieldId, ::apache::thrift::protocol::MaskedData>>& set_fields(::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::FieldId, ::apache::thrift::protocol::MaskedData>> t);
  ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::FieldId, ::apache::thrift::protocol::MaskedData>>& set_fields(folly::F14VectorMap<::apache::thrift::type::FieldId, ::apache::thrift::protocol::MaskedData> const &t);
  ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::FieldId, ::apache::thrift::protocol::MaskedData>>& set_fields(folly::F14VectorMap<::apache::thrift::type::FieldId, ::apache::thrift::protocol::MaskedData>&& t);
  /** Glean { "field": "fields" } */
  template<typename... T, typename = ::apache::thrift::safe_overload_t<folly::F14VectorMap<::apache::thrift::type::FieldId, ::apache::thrift::protocol::MaskedData>, T...>> ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::FieldId, ::apache::thrift::protocol::MaskedData>>& set_fields(T&&... t) {
    // defer resolution of ref_ in case ref_::element_type would here be incomplete
    using ref_ = folly::conditional_t<(sizeof...(T) < size_t(-1)), ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::FieldId, ::apache::thrift::protocol::MaskedData>>, void>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::fields);
    ::new (std::addressof(value_.fields)) ref_(new typename ref_::element_type(std::forward<T>(t)...));
    return value_.fields;
  }
  ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::ValueId, ::apache::thrift::protocol::MaskedData>>& set_values(::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::ValueId, ::apache::thrift::protocol::MaskedData>> t);
  ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::ValueId, ::apache::thrift::protocol::MaskedData>>& set_values(folly::F14VectorMap<::apache::thrift::type::ValueId, ::apache::thrift::protocol::MaskedData> const &t);
  ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::ValueId, ::apache::thrift::protocol::MaskedData>>& set_values(folly::F14VectorMap<::apache::thrift::type::ValueId, ::apache::thrift::protocol::MaskedData>&& t);
  /** Glean { "field": "values" } */
  template<typename... T, typename = ::apache::thrift::safe_overload_t<folly::F14VectorMap<::apache::thrift::type::ValueId, ::apache::thrift::protocol::MaskedData>, T...>> ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::ValueId, ::apache::thrift::protocol::MaskedData>>& set_values(T&&... t) {
    // defer resolution of ref_ in case ref_::element_type would here be incomplete
    using ref_ = folly::conditional_t<(sizeof...(T) < size_t(-1)), ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::ValueId, ::apache::thrift::protocol::MaskedData>>, void>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::values);
    ::new (std::addressof(value_.values)) ref_(new typename ref_::element_type(std::forward<T>(t)...));
    return value_.values;
  }

  ::apache::thrift::type::ValueId const& get_full() const {
    if (getType() != Type::full) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.full;
  }

  ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::FieldId, ::apache::thrift::protocol::MaskedData>> const& get_fields() const {
    if (getType() != Type::fields) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.fields;
  }

  ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::ValueId, ::apache::thrift::protocol::MaskedData>> const& get_values() const {
    if (getType() != Type::values) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.values;
  }

  ::apache::thrift::type::ValueId& mutable_full() {
    assert(getType() == Type::full);
    return value_.full;
  }

  ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::FieldId, ::apache::thrift::protocol::MaskedData>>& mutable_fields() {
    assert(getType() == Type::fields);
    return value_.fields;
  }

  ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::ValueId, ::apache::thrift::protocol::MaskedData>>& mutable_values() {
    assert(getType() == Type::values);
    return value_.values;
  }

  template <typename..., typename T = ::apache::thrift::type::ValueId>
  T move_full() {
    assert(getType() == Type::full);
    return std::move(value_.full);
  }

  template <typename..., typename T = ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::FieldId, ::apache::thrift::protocol::MaskedData>>>
  T move_fields() {
    assert(getType() == Type::fields);
    return std::move(value_.fields);
  }

  template <typename..., typename T = ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::ValueId, ::apache::thrift::protocol::MaskedData>>>
  T move_values() {
    assert(getType() == Type::values);
    return std::move(value_.values);
  }

  /** Glean { "field": "full" } */
  template <typename..., typename T = ::apache::thrift::type::ValueId>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> full_ref() const& {
    return {value_.full, type_, folly::to_underlying(Type::full), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "full" } */
  template <typename..., typename T = ::apache::thrift::type::ValueId>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> full_ref() const&& {
    return {std::move(value_.full), type_, folly::to_underlying(Type::full), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "full" } */
  template <typename..., typename T = ::apache::thrift::type::ValueId>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> full_ref() & {
    return {value_.full, type_, folly::to_underlying(Type::full), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "full" } */
  template <typename..., typename T = ::apache::thrift::type::ValueId>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> full_ref() && {
    return {std::move(value_.full), type_, folly::to_underlying(Type::full), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  /** Glean { "field": "fields" } */
  template <typename..., typename T = ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::FieldId, ::apache::thrift::protocol::MaskedData>>>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> fields_ref() const& {
    return {value_.fields, type_, folly::to_underlying(Type::fields), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename T = ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::FieldId, ::apache::thrift::protocol::MaskedData>>>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> fields_ref() const&& {
    return {std::move(value_.fields), type_, folly::to_underlying(Type::fields), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename T = ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::FieldId, ::apache::thrift::protocol::MaskedData>>>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> fields_ref() & {
    return {value_.fields, type_, folly::to_underlying(Type::fields), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename T = ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::FieldId, ::apache::thrift::protocol::MaskedData>>>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> fields_ref() && {
    return {std::move(value_.fields), type_, folly::to_underlying(Type::fields), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  /** Glean { "field": "values" } */
  template <typename..., typename T = ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::ValueId, ::apache::thrift::protocol::MaskedData>>>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> values_ref() const& {
    return {value_.values, type_, folly::to_underlying(Type::values), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "values" } */
  template <typename..., typename T = ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::ValueId, ::apache::thrift::protocol::MaskedData>>>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> values_ref() const&& {
    return {std::move(value_.values), type_, folly::to_underlying(Type::values), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "values" } */
  template <typename..., typename T = ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::ValueId, ::apache::thrift::protocol::MaskedData>>>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> values_ref() & {
    return {value_.values, type_, folly::to_underlying(Type::values), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "values" } */
  template <typename..., typename T = ::std::unique_ptr<folly::F14VectorMap<::apache::thrift::type::ValueId, ::apache::thrift::protocol::MaskedData>>>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> values_ref() && {
    return {std::move(value_.values), type_, folly::to_underlying(Type::values), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  Type getType() const { return static_cast<Type>(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;
 protected:
  storage_type value_;
  std::underlying_type_t<Type> type_;

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

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

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


/** Glean {"file": "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_fbthrift/fbthrift/work/fbthrift-2025.01.13.00/thrift/lib/thrift/protocol.thrift", "name": "EncodedValue", "kind": "struct" } */
class EncodedValue 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 const char* __fbthrift_thrift_uri();
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "protocol";
  }
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::wireType,
    ::apache::thrift::ident::data
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::adapted<::apache::thrift::StaticCastAdapter<::apache::thrift::type::BaseType, ::apache::thrift::type::BaseTypeEnum>, ::apache::thrift::type::enum_t<::apache::thrift::type::BaseTypeEnum>>,
    ::apache::thrift::type::cpp_type<folly::IOBuf, ::apache::thrift::type::binary_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 = EncodedValue;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;
  static constexpr bool __fbthrift_cpp2_uses_op_encode =
    true;


 public:

  EncodedValue();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  EncodedValue(apache::thrift::FragileConstructor, ::apache::thrift::type::BaseType wireType__arg, ::apache::thrift::type::ByteBuffer data__arg);

  EncodedValue(EncodedValue&&) noexcept;
  EncodedValue(const EncodedValue& src);


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

  ~EncodedValue();

 private:
  ::apache::thrift::type::BaseType __fbthrift_field_wireType;
 private:
  ::apache::thrift::type::ByteBuffer __fbthrift_field_data;
 private:
  apache::thrift::detail::isset_bitset<2, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

  /** Glean { "field": "wireType" } */
  template <typename..., typename T = ::apache::thrift::type::BaseType>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> wireType_ref() const& {
    return {this->__fbthrift_field_wireType, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "wireType" } */
  template <typename..., typename T = ::apache::thrift::type::BaseType>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> wireType_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_wireType), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "wireType" } */
  template <typename..., typename T = ::apache::thrift::type::BaseType>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> wireType_ref() & {
    return {this->__fbthrift_field_wireType, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "wireType" } */
  template <typename..., typename T = ::apache::thrift::type::BaseType>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> wireType_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_wireType), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "wireType" } */
  template <typename..., typename T = ::apache::thrift::type::BaseType>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> wireType() const& {
    return {this->__fbthrift_field_wireType, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "wireType" } */
  template <typename..., typename T = ::apache::thrift::type::BaseType>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> wireType() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_wireType), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "wireType" } */
  template <typename..., typename T = ::apache::thrift::type::BaseType>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> wireType() & {
    return {this->__fbthrift_field_wireType, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "wireType" } */
  template <typename..., typename T = ::apache::thrift::type::BaseType>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> wireType() && {
    return {static_cast<T&&>(this->__fbthrift_field_wireType), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "data" } */
  template <typename..., typename T = ::apache::thrift::type::ByteBuffer>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> data_ref() const& {
    return {this->__fbthrift_field_data, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "data" } */
  template <typename..., typename T = ::apache::thrift::type::ByteBuffer>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> data_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_data), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "data" } */
  template <typename..., typename T = ::apache::thrift::type::ByteBuffer>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> data_ref() & {
    return {this->__fbthrift_field_data, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "data" } */
  template <typename..., typename T = ::apache::thrift::type::ByteBuffer>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> data_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_data), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "data" } */
  template <typename..., typename T = ::apache::thrift::type::ByteBuffer>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> data() const& {
    return {this->__fbthrift_field_data, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "data" } */
  template <typename..., typename T = ::apache::thrift::type::ByteBuffer>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> data() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_data), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "data" } */
  template <typename..., typename T = ::apache::thrift::type::ByteBuffer>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> data() & {
    return {this->__fbthrift_field_data, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "data" } */
  template <typename..., typename T = ::apache::thrift::type::ByteBuffer>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> data() && {
    return {static_cast<T&&>(this->__fbthrift_field_data), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "data" } */
  [[deprecated("Use `FOO.data().value();` instead of `FOO.get_data();`")]]
  const ::apache::thrift::type::ByteBuffer& get_data() const& {
    return __fbthrift_field_data;
  }

  /** Glean { "field": "data" } */
  [[deprecated("Use `FOO.data().value();` instead of `FOO.get_data();`")]]
  ::apache::thrift::type::ByteBuffer get_data() && {
    return static_cast<::apache::thrift::type::ByteBuffer&&>(__fbthrift_field_data);
  }

  /** Glean { "field": "data" } */
  template <typename T_EncodedValue_data_struct_setter = ::apache::thrift::type::ByteBuffer>
  [[deprecated("Use `FOO.data() = BAR;` instead of `FOO.set_data(BAR);`")]]
  ::apache::thrift::type::ByteBuffer& set_data(T_EncodedValue_data_struct_setter&& data_) {
    data_ref() = std::forward<T_EncodedValue_data_struct_setter>(data_);
    return __fbthrift_field_data;
  }

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

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


/** Glean {"file": "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_fbthrift/fbthrift/work/fbthrift-2025.01.13.00/thrift/lib/thrift/protocol.thrift", "name": "MaskedProtocolData", "kind": "struct" } */
class MaskedProtocolData 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 const char* __fbthrift_thrift_uri();
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "protocol";
  }
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::protocol,
    ::apache::thrift::ident::data,
    ::apache::thrift::ident::values,
    ::apache::thrift::ident::keys
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2,3,4};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::adapted<::apache::thrift::InlineAdapter<::apache::thrift::type::Protocol>, ::apache::thrift::type::union_t<::apache::thrift::type::ProtocolUnion>>,
    ::apache::thrift::type::union_t<::apache::thrift::protocol::MaskedData>,
    ::apache::thrift::type::list<::apache::thrift::type::struct_t<::apache::thrift::protocol::EncodedValue>>,
    ::apache::thrift::type::list<::apache::thrift::type::adapted<::apache::thrift::protocol::detail::ValueAdapter, ::apache::thrift::type::union_t<::apache::thrift::protocol::detail::detail::Value>>>
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 4;

  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 = MaskedProtocolData;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;
  static constexpr bool __fbthrift_cpp2_uses_op_encode =
    true;


 public:

  MaskedProtocolData();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  MaskedProtocolData(apache::thrift::FragileConstructor, ::apache::thrift::type::Protocol protocol__arg, ::apache::thrift::protocol::MaskedData data__arg, ::std::vector<::apache::thrift::protocol::EncodedValue> values__arg, ::std::vector<::apache::thrift::protocol::Value> keys__arg);

  MaskedProtocolData(MaskedProtocolData&&) noexcept;
  MaskedProtocolData(const MaskedProtocolData& src);


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

  ~MaskedProtocolData();

 private:
  ::apache::thrift::type::Protocol __fbthrift_field_protocol;
 private:
  ::apache::thrift::protocol::MaskedData __fbthrift_field_data;
 private:
  ::std::vector<::apache::thrift::protocol::EncodedValue> __fbthrift_field_values;
 private:
  ::std::vector<::apache::thrift::protocol::Value> __fbthrift_field_keys;
 private:
  apache::thrift::detail::isset_bitset<4, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

  /** Glean { "field": "protocol" } */
  template <typename..., typename T = ::apache::thrift::type::Protocol>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> protocol_ref() const& {
    return {this->__fbthrift_field_protocol, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "protocol" } */
  template <typename..., typename T = ::apache::thrift::type::Protocol>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> protocol_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_protocol), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "protocol" } */
  template <typename..., typename T = ::apache::thrift::type::Protocol>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> protocol_ref() & {
    return {this->__fbthrift_field_protocol, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "protocol" } */
  template <typename..., typename T = ::apache::thrift::type::Protocol>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> protocol_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_protocol), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "protocol" } */
  template <typename..., typename T = ::apache::thrift::type::Protocol>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> protocol() const& {
    return {this->__fbthrift_field_protocol, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "protocol" } */
  template <typename..., typename T = ::apache::thrift::type::Protocol>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> protocol() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_protocol), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "protocol" } */
  template <typename..., typename T = ::apache::thrift::type::Protocol>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> protocol() & {
    return {this->__fbthrift_field_protocol, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "protocol" } */
  template <typename..., typename T = ::apache::thrift::type::Protocol>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> protocol() && {
    return {static_cast<T&&>(this->__fbthrift_field_protocol), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "data" } */
  template <typename..., typename T = ::apache::thrift::protocol::MaskedData>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> data_ref() const& {
    return {this->__fbthrift_field_data, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "data" } */
  template <typename..., typename T = ::apache::thrift::protocol::MaskedData>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> data_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_data), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "data" } */
  template <typename..., typename T = ::apache::thrift::protocol::MaskedData>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> data_ref() & {
    return {this->__fbthrift_field_data, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "data" } */
  template <typename..., typename T = ::apache::thrift::protocol::MaskedData>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> data_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_data), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "data" } */
  template <typename..., typename T = ::apache::thrift::protocol::MaskedData>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> data() const& {
    return {this->__fbthrift_field_data, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "data" } */
  template <typename..., typename T = ::apache::thrift::protocol::MaskedData>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> data() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_data), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "data" } */
  template <typename..., typename T = ::apache::thrift::protocol::MaskedData>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> data() & {
    return {this->__fbthrift_field_data, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "data" } */
  template <typename..., typename T = ::apache::thrift::protocol::MaskedData>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> data() && {
    return {static_cast<T&&>(this->__fbthrift_field_data), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "values" } */
  template <typename..., typename T = ::std::vector<::apache::thrift::protocol::EncodedValue>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> values_ref() const& {
    return {this->__fbthrift_field_values, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "values" } */
  template <typename..., typename T = ::std::vector<::apache::thrift::protocol::EncodedValue>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> values_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_values), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "values" } */
  template <typename..., typename T = ::std::vector<::apache::thrift::protocol::EncodedValue>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> values_ref() & {
    return {this->__fbthrift_field_values, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "values" } */
  template <typename..., typename T = ::std::vector<::apache::thrift::protocol::EncodedValue>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> values_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_values), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "values" } */
  template <typename..., typename T = ::std::vector<::apache::thrift::protocol::EncodedValue>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> values() const& {
    return {this->__fbthrift_field_values, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "values" } */
  template <typename..., typename T = ::std::vector<::apache::thrift::protocol::EncodedValue>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> values() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_values), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "values" } */
  template <typename..., typename T = ::std::vector<::apache::thrift::protocol::EncodedValue>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> values() & {
    return {this->__fbthrift_field_values, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "values" } */
  template <typename..., typename T = ::std::vector<::apache::thrift::protocol::EncodedValue>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> values() && {
    return {static_cast<T&&>(this->__fbthrift_field_values), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "keys" } */
  template <typename..., typename T = ::std::vector<::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> keys_ref() const& {
    return {this->__fbthrift_field_keys, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "keys" } */
  template <typename..., typename T = ::std::vector<::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> keys_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_keys), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "keys" } */
  template <typename..., typename T = ::std::vector<::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> keys_ref() & {
    return {this->__fbthrift_field_keys, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "keys" } */
  template <typename..., typename T = ::std::vector<::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> keys_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_keys), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "keys" } */
  template <typename..., typename T = ::std::vector<::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> keys() const& {
    return {this->__fbthrift_field_keys, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "keys" } */
  template <typename..., typename T = ::std::vector<::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> keys() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_keys), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "keys" } */
  template <typename..., typename T = ::std::vector<::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> keys() & {
    return {this->__fbthrift_field_keys, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "keys" } */
  template <typename..., typename T = ::std::vector<::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> keys() && {
    return {static_cast<T&&>(this->__fbthrift_field_keys), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "data" } */
  [[deprecated("Use `FOO.data().value();` instead of `FOO.get_data();`")]]
  const ::apache::thrift::protocol::MaskedData& get_data() const&;

  /** Glean { "field": "data" } */
  [[deprecated("Use `FOO.data().value();` instead of `FOO.get_data();`")]]
  ::apache::thrift::protocol::MaskedData get_data() &&;

  /** Glean { "field": "data" } */
  template <typename T_MaskedProtocolData_data_struct_setter = ::apache::thrift::protocol::MaskedData>
  [[deprecated("Use `FOO.data() = BAR;` instead of `FOO.set_data(BAR);`")]]
  ::apache::thrift::protocol::MaskedData& set_data(T_MaskedProtocolData_data_struct_setter&& data_) {
    data_ref() = std::forward<T_MaskedProtocolData_data_struct_setter>(data_);
    return __fbthrift_field_data;
  }

  /** Glean { "field": "values" } */
  [[deprecated("Use `FOO.values().value();` instead of `FOO.get_values();`")]]
  const ::std::vector<::apache::thrift::protocol::EncodedValue>& get_values() const&;

  /** Glean { "field": "values" } */
  [[deprecated("Use `FOO.values().value();` instead of `FOO.get_values();`")]]
  ::std::vector<::apache::thrift::protocol::EncodedValue> get_values() &&;

  /** Glean { "field": "values" } */
  template <typename T_MaskedProtocolData_values_struct_setter = ::std::vector<::apache::thrift::protocol::EncodedValue>>
  [[deprecated("Use `FOO.values() = BAR;` instead of `FOO.set_values(BAR);`")]]
  ::std::vector<::apache::thrift::protocol::EncodedValue>& set_values(T_MaskedProtocolData_values_struct_setter&& values_) {
    values_ref() = std::forward<T_MaskedProtocolData_values_struct_setter>(values_);
    return __fbthrift_field_values;
  }

  /** Glean { "field": "keys" } */
  [[deprecated("Use `FOO.keys().value();` instead of `FOO.get_keys();`")]]
  const ::std::vector<::apache::thrift::protocol::Value>& get_keys() const&;

  /** Glean { "field": "keys" } */
  [[deprecated("Use `FOO.keys().value();` instead of `FOO.get_keys();`")]]
  ::std::vector<::apache::thrift::protocol::Value> get_keys() &&;

  /** Glean { "field": "keys" } */
  template <typename T_MaskedProtocolData_keys_struct_setter = ::std::vector<::apache::thrift::protocol::Value>>
  [[deprecated("Use `FOO.keys() = BAR;` instead of `FOO.set_keys(BAR);`")]]
  ::std::vector<::apache::thrift::protocol::Value>& set_keys(T_MaskedProtocolData_keys_struct_setter&& keys_) {
    keys_ref() = std::forward<T_MaskedProtocolData_keys_struct_setter>(keys_);
    return __fbthrift_field_keys;
  }

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

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


} // namespace apache::thrift::protocol

namespace apache { namespace thrift {

template <> struct TEnumDataStorage<::apache::thrift::protocol::MaskedData::Type>;

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

  static constexpr std::size_t const size = 3;
  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();
  }
};
}} // apache::thrift
