/**
 * Autogenerated by Thrift for /opt/local/var/macports/build/_opt_bblocal_var_buildworker_ports_build_ports_devel_fbthrift/fbthrift/work/fbthrift-2024.01.08.00/thrift/lib/thrift/RpcMetadata.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/cpp2/util/ManagedStringView.h"
#include "thrift/lib/thrift/RpcMetadata_extra.h"
#include "folly/container/F14Map.h"

namespace apache {
namespace thrift {
namespace ident {
struct zlibConfig;
struct zstdConfig;
struct codecConfig;
struct compressionSizeLimit;
struct compressionAlgos;
struct useStopTLS;
struct interactionId;
struct interactionName;
struct interactionId;
struct fdSeqNum;
struct numFds;
struct logSampleRatio;
struct logErrorSampleRatio;
struct requestId;
struct routingTarget;
struct protocol;
struct name;
struct kind;
struct clientTimeoutMs;
struct queueTimeoutMs;
struct priority;
struct otherMetadata;
struct crc32c;
struct loadMetric;
struct compression;
struct compressionConfig;
struct interactionId;
struct interactionCreate;
struct clientId;
struct serviceTraceMeta;
struct frameworkMetadata;
struct fdMetadata;
struct loggingContext;
struct tenantId;
struct kind;
struct blame;
struct safety;
struct errorClassification;
struct errorClassification;
struct declaredException;
struct DEPRECATED_proxyException;
struct appUnknownException;
struct anyException;
struct name_utf8;
struct what_utf8;
struct metadata;
struct responseMetadata;
struct exceptionMetadata;
struct queueingTimeMs;
struct queueTimeoutMs;
struct otherMetadata;
struct load;
struct crc32c;
struct compression;
struct payloadMetadata;
struct proxiedPayloadMetadata;
struct streamId;
struct queueMetadata;
struct fdMetadata;
struct frameworkMetadata;
struct name_utf8;
struct what_utf8;
struct category;
struct code;
struct load;
struct name_utf8;
struct what_utf8;
struct code;
struct compression;
struct otherMetadata;
struct payloadMetadata;
struct fdMetadata;
struct agent;
struct hostname;
struct otherMetadata;
struct opaque;
struct interfaceKind;
struct minVersion;
struct maxVersion;
struct dscpToReflect;
struct markToReflect;
struct qosUseCaseId;
struct qosPolicyId;
struct clientMetadata;
struct version;
struct zstdSupported;
struct streamId;
struct headersPayloadContent;
struct transportMetadata;
struct drainCompleteCode;
struct setupResponse;
struct streamHeadersPush;
struct drainCompletePush;
struct interactionTerminate;
struct streamHeadersPush;
struct transportMetadataPush;
struct otherMetadata;
struct compression;
} // namespace ident
namespace detail {
#ifndef APACHE_THRIFT_ACCESSOR_zlibConfig
#define APACHE_THRIFT_ACCESSOR_zlibConfig
APACHE_THRIFT_DEFINE_ACCESSOR(zlibConfig);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_zstdConfig
#define APACHE_THRIFT_ACCESSOR_zstdConfig
APACHE_THRIFT_DEFINE_ACCESSOR(zstdConfig);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_codecConfig
#define APACHE_THRIFT_ACCESSOR_codecConfig
APACHE_THRIFT_DEFINE_ACCESSOR(codecConfig);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_compressionSizeLimit
#define APACHE_THRIFT_ACCESSOR_compressionSizeLimit
APACHE_THRIFT_DEFINE_ACCESSOR(compressionSizeLimit);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_compressionAlgos
#define APACHE_THRIFT_ACCESSOR_compressionAlgos
APACHE_THRIFT_DEFINE_ACCESSOR(compressionAlgos);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_useStopTLS
#define APACHE_THRIFT_ACCESSOR_useStopTLS
APACHE_THRIFT_DEFINE_ACCESSOR(useStopTLS);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_interactionId
#define APACHE_THRIFT_ACCESSOR_interactionId
APACHE_THRIFT_DEFINE_ACCESSOR(interactionId);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_interactionName
#define APACHE_THRIFT_ACCESSOR_interactionName
APACHE_THRIFT_DEFINE_ACCESSOR(interactionName);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_interactionId
#define APACHE_THRIFT_ACCESSOR_interactionId
APACHE_THRIFT_DEFINE_ACCESSOR(interactionId);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_fdSeqNum
#define APACHE_THRIFT_ACCESSOR_fdSeqNum
APACHE_THRIFT_DEFINE_ACCESSOR(fdSeqNum);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_numFds
#define APACHE_THRIFT_ACCESSOR_numFds
APACHE_THRIFT_DEFINE_ACCESSOR(numFds);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_logSampleRatio
#define APACHE_THRIFT_ACCESSOR_logSampleRatio
APACHE_THRIFT_DEFINE_ACCESSOR(logSampleRatio);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_logErrorSampleRatio
#define APACHE_THRIFT_ACCESSOR_logErrorSampleRatio
APACHE_THRIFT_DEFINE_ACCESSOR(logErrorSampleRatio);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_requestId
#define APACHE_THRIFT_ACCESSOR_requestId
APACHE_THRIFT_DEFINE_ACCESSOR(requestId);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_routingTarget
#define APACHE_THRIFT_ACCESSOR_routingTarget
APACHE_THRIFT_DEFINE_ACCESSOR(routingTarget);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_protocol
#define APACHE_THRIFT_ACCESSOR_protocol
APACHE_THRIFT_DEFINE_ACCESSOR(protocol);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_name
#define APACHE_THRIFT_ACCESSOR_name
APACHE_THRIFT_DEFINE_ACCESSOR(name);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_kind
#define APACHE_THRIFT_ACCESSOR_kind
APACHE_THRIFT_DEFINE_ACCESSOR(kind);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_clientTimeoutMs
#define APACHE_THRIFT_ACCESSOR_clientTimeoutMs
APACHE_THRIFT_DEFINE_ACCESSOR(clientTimeoutMs);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_queueTimeoutMs
#define APACHE_THRIFT_ACCESSOR_queueTimeoutMs
APACHE_THRIFT_DEFINE_ACCESSOR(queueTimeoutMs);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_priority
#define APACHE_THRIFT_ACCESSOR_priority
APACHE_THRIFT_DEFINE_ACCESSOR(priority);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_otherMetadata
#define APACHE_THRIFT_ACCESSOR_otherMetadata
APACHE_THRIFT_DEFINE_ACCESSOR(otherMetadata);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_crc32c
#define APACHE_THRIFT_ACCESSOR_crc32c
APACHE_THRIFT_DEFINE_ACCESSOR(crc32c);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_loadMetric
#define APACHE_THRIFT_ACCESSOR_loadMetric
APACHE_THRIFT_DEFINE_ACCESSOR(loadMetric);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_compression
#define APACHE_THRIFT_ACCESSOR_compression
APACHE_THRIFT_DEFINE_ACCESSOR(compression);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_compressionConfig
#define APACHE_THRIFT_ACCESSOR_compressionConfig
APACHE_THRIFT_DEFINE_ACCESSOR(compressionConfig);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_interactionId
#define APACHE_THRIFT_ACCESSOR_interactionId
APACHE_THRIFT_DEFINE_ACCESSOR(interactionId);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_interactionCreate
#define APACHE_THRIFT_ACCESSOR_interactionCreate
APACHE_THRIFT_DEFINE_ACCESSOR(interactionCreate);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_clientId
#define APACHE_THRIFT_ACCESSOR_clientId
APACHE_THRIFT_DEFINE_ACCESSOR(clientId);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_serviceTraceMeta
#define APACHE_THRIFT_ACCESSOR_serviceTraceMeta
APACHE_THRIFT_DEFINE_ACCESSOR(serviceTraceMeta);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_frameworkMetadata
#define APACHE_THRIFT_ACCESSOR_frameworkMetadata
APACHE_THRIFT_DEFINE_ACCESSOR(frameworkMetadata);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_fdMetadata
#define APACHE_THRIFT_ACCESSOR_fdMetadata
APACHE_THRIFT_DEFINE_ACCESSOR(fdMetadata);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_loggingContext
#define APACHE_THRIFT_ACCESSOR_loggingContext
APACHE_THRIFT_DEFINE_ACCESSOR(loggingContext);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_tenantId
#define APACHE_THRIFT_ACCESSOR_tenantId
APACHE_THRIFT_DEFINE_ACCESSOR(tenantId);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_kind
#define APACHE_THRIFT_ACCESSOR_kind
APACHE_THRIFT_DEFINE_ACCESSOR(kind);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_blame
#define APACHE_THRIFT_ACCESSOR_blame
APACHE_THRIFT_DEFINE_ACCESSOR(blame);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_safety
#define APACHE_THRIFT_ACCESSOR_safety
APACHE_THRIFT_DEFINE_ACCESSOR(safety);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_errorClassification
#define APACHE_THRIFT_ACCESSOR_errorClassification
APACHE_THRIFT_DEFINE_ACCESSOR(errorClassification);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_errorClassification
#define APACHE_THRIFT_ACCESSOR_errorClassification
APACHE_THRIFT_DEFINE_ACCESSOR(errorClassification);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_declaredException
#define APACHE_THRIFT_ACCESSOR_declaredException
APACHE_THRIFT_DEFINE_ACCESSOR(declaredException);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_DEPRECATED_proxyException
#define APACHE_THRIFT_ACCESSOR_DEPRECATED_proxyException
APACHE_THRIFT_DEFINE_ACCESSOR(DEPRECATED_proxyException);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_appUnknownException
#define APACHE_THRIFT_ACCESSOR_appUnknownException
APACHE_THRIFT_DEFINE_ACCESSOR(appUnknownException);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_anyException
#define APACHE_THRIFT_ACCESSOR_anyException
APACHE_THRIFT_DEFINE_ACCESSOR(anyException);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_name_utf8
#define APACHE_THRIFT_ACCESSOR_name_utf8
APACHE_THRIFT_DEFINE_ACCESSOR(name_utf8);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_what_utf8
#define APACHE_THRIFT_ACCESSOR_what_utf8
APACHE_THRIFT_DEFINE_ACCESSOR(what_utf8);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_metadata
#define APACHE_THRIFT_ACCESSOR_metadata
APACHE_THRIFT_DEFINE_ACCESSOR(metadata);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_responseMetadata
#define APACHE_THRIFT_ACCESSOR_responseMetadata
APACHE_THRIFT_DEFINE_ACCESSOR(responseMetadata);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_exceptionMetadata
#define APACHE_THRIFT_ACCESSOR_exceptionMetadata
APACHE_THRIFT_DEFINE_ACCESSOR(exceptionMetadata);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_queueingTimeMs
#define APACHE_THRIFT_ACCESSOR_queueingTimeMs
APACHE_THRIFT_DEFINE_ACCESSOR(queueingTimeMs);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_queueTimeoutMs
#define APACHE_THRIFT_ACCESSOR_queueTimeoutMs
APACHE_THRIFT_DEFINE_ACCESSOR(queueTimeoutMs);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_otherMetadata
#define APACHE_THRIFT_ACCESSOR_otherMetadata
APACHE_THRIFT_DEFINE_ACCESSOR(otherMetadata);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_load
#define APACHE_THRIFT_ACCESSOR_load
APACHE_THRIFT_DEFINE_ACCESSOR(load);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_crc32c
#define APACHE_THRIFT_ACCESSOR_crc32c
APACHE_THRIFT_DEFINE_ACCESSOR(crc32c);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_compression
#define APACHE_THRIFT_ACCESSOR_compression
APACHE_THRIFT_DEFINE_ACCESSOR(compression);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_payloadMetadata
#define APACHE_THRIFT_ACCESSOR_payloadMetadata
APACHE_THRIFT_DEFINE_ACCESSOR(payloadMetadata);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_proxiedPayloadMetadata
#define APACHE_THRIFT_ACCESSOR_proxiedPayloadMetadata
APACHE_THRIFT_DEFINE_ACCESSOR(proxiedPayloadMetadata);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_streamId
#define APACHE_THRIFT_ACCESSOR_streamId
APACHE_THRIFT_DEFINE_ACCESSOR(streamId);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_queueMetadata
#define APACHE_THRIFT_ACCESSOR_queueMetadata
APACHE_THRIFT_DEFINE_ACCESSOR(queueMetadata);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_fdMetadata
#define APACHE_THRIFT_ACCESSOR_fdMetadata
APACHE_THRIFT_DEFINE_ACCESSOR(fdMetadata);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_frameworkMetadata
#define APACHE_THRIFT_ACCESSOR_frameworkMetadata
APACHE_THRIFT_DEFINE_ACCESSOR(frameworkMetadata);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_name_utf8
#define APACHE_THRIFT_ACCESSOR_name_utf8
APACHE_THRIFT_DEFINE_ACCESSOR(name_utf8);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_what_utf8
#define APACHE_THRIFT_ACCESSOR_what_utf8
APACHE_THRIFT_DEFINE_ACCESSOR(what_utf8);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_category
#define APACHE_THRIFT_ACCESSOR_category
APACHE_THRIFT_DEFINE_ACCESSOR(category);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_code
#define APACHE_THRIFT_ACCESSOR_code
APACHE_THRIFT_DEFINE_ACCESSOR(code);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_load
#define APACHE_THRIFT_ACCESSOR_load
APACHE_THRIFT_DEFINE_ACCESSOR(load);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_name_utf8
#define APACHE_THRIFT_ACCESSOR_name_utf8
APACHE_THRIFT_DEFINE_ACCESSOR(name_utf8);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_what_utf8
#define APACHE_THRIFT_ACCESSOR_what_utf8
APACHE_THRIFT_DEFINE_ACCESSOR(what_utf8);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_code
#define APACHE_THRIFT_ACCESSOR_code
APACHE_THRIFT_DEFINE_ACCESSOR(code);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_compression
#define APACHE_THRIFT_ACCESSOR_compression
APACHE_THRIFT_DEFINE_ACCESSOR(compression);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_otherMetadata
#define APACHE_THRIFT_ACCESSOR_otherMetadata
APACHE_THRIFT_DEFINE_ACCESSOR(otherMetadata);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_payloadMetadata
#define APACHE_THRIFT_ACCESSOR_payloadMetadata
APACHE_THRIFT_DEFINE_ACCESSOR(payloadMetadata);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_fdMetadata
#define APACHE_THRIFT_ACCESSOR_fdMetadata
APACHE_THRIFT_DEFINE_ACCESSOR(fdMetadata);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_agent
#define APACHE_THRIFT_ACCESSOR_agent
APACHE_THRIFT_DEFINE_ACCESSOR(agent);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_hostname
#define APACHE_THRIFT_ACCESSOR_hostname
APACHE_THRIFT_DEFINE_ACCESSOR(hostname);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_otherMetadata
#define APACHE_THRIFT_ACCESSOR_otherMetadata
APACHE_THRIFT_DEFINE_ACCESSOR(otherMetadata);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_opaque
#define APACHE_THRIFT_ACCESSOR_opaque
APACHE_THRIFT_DEFINE_ACCESSOR(opaque);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_interfaceKind
#define APACHE_THRIFT_ACCESSOR_interfaceKind
APACHE_THRIFT_DEFINE_ACCESSOR(interfaceKind);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_minVersion
#define APACHE_THRIFT_ACCESSOR_minVersion
APACHE_THRIFT_DEFINE_ACCESSOR(minVersion);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_maxVersion
#define APACHE_THRIFT_ACCESSOR_maxVersion
APACHE_THRIFT_DEFINE_ACCESSOR(maxVersion);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_dscpToReflect
#define APACHE_THRIFT_ACCESSOR_dscpToReflect
APACHE_THRIFT_DEFINE_ACCESSOR(dscpToReflect);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_markToReflect
#define APACHE_THRIFT_ACCESSOR_markToReflect
APACHE_THRIFT_DEFINE_ACCESSOR(markToReflect);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_qosUseCaseId
#define APACHE_THRIFT_ACCESSOR_qosUseCaseId
APACHE_THRIFT_DEFINE_ACCESSOR(qosUseCaseId);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_qosPolicyId
#define APACHE_THRIFT_ACCESSOR_qosPolicyId
APACHE_THRIFT_DEFINE_ACCESSOR(qosPolicyId);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_clientMetadata
#define APACHE_THRIFT_ACCESSOR_clientMetadata
APACHE_THRIFT_DEFINE_ACCESSOR(clientMetadata);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_version
#define APACHE_THRIFT_ACCESSOR_version
APACHE_THRIFT_DEFINE_ACCESSOR(version);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_zstdSupported
#define APACHE_THRIFT_ACCESSOR_zstdSupported
APACHE_THRIFT_DEFINE_ACCESSOR(zstdSupported);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_streamId
#define APACHE_THRIFT_ACCESSOR_streamId
APACHE_THRIFT_DEFINE_ACCESSOR(streamId);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_headersPayloadContent
#define APACHE_THRIFT_ACCESSOR_headersPayloadContent
APACHE_THRIFT_DEFINE_ACCESSOR(headersPayloadContent);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_transportMetadata
#define APACHE_THRIFT_ACCESSOR_transportMetadata
APACHE_THRIFT_DEFINE_ACCESSOR(transportMetadata);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_drainCompleteCode
#define APACHE_THRIFT_ACCESSOR_drainCompleteCode
APACHE_THRIFT_DEFINE_ACCESSOR(drainCompleteCode);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_setupResponse
#define APACHE_THRIFT_ACCESSOR_setupResponse
APACHE_THRIFT_DEFINE_ACCESSOR(setupResponse);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_streamHeadersPush
#define APACHE_THRIFT_ACCESSOR_streamHeadersPush
APACHE_THRIFT_DEFINE_ACCESSOR(streamHeadersPush);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_drainCompletePush
#define APACHE_THRIFT_ACCESSOR_drainCompletePush
APACHE_THRIFT_DEFINE_ACCESSOR(drainCompletePush);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_interactionTerminate
#define APACHE_THRIFT_ACCESSOR_interactionTerminate
APACHE_THRIFT_DEFINE_ACCESSOR(interactionTerminate);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_streamHeadersPush
#define APACHE_THRIFT_ACCESSOR_streamHeadersPush
APACHE_THRIFT_DEFINE_ACCESSOR(streamHeadersPush);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_transportMetadataPush
#define APACHE_THRIFT_ACCESSOR_transportMetadataPush
APACHE_THRIFT_DEFINE_ACCESSOR(transportMetadataPush);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_otherMetadata
#define APACHE_THRIFT_ACCESSOR_otherMetadata
APACHE_THRIFT_DEFINE_ACCESSOR(otherMetadata);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_compression
#define APACHE_THRIFT_ACCESSOR_compression
APACHE_THRIFT_DEFINE_ACCESSOR(compression);
#endif
} // namespace detail
} // namespace thrift
} // namespace apache

// BEGIN declare_enums
namespace apache { namespace thrift {

enum class ProtocolId {
  BINARY = 0,
  COMPACT = 2,
};



enum class RpcKind {
  SINGLE_REQUEST_SINGLE_RESPONSE = 0,
  SINGLE_REQUEST_NO_RESPONSE = 1,
  SINGLE_REQUEST_STREAMING_RESPONSE = 4,
  SINK = 6,
};



enum class RpcPriority {
  HIGH_IMPORTANT = 0,
  HIGH = 1,
  IMPORTANT = 2,
  NORMAL = 3,
  BEST_EFFORT = 4,
  N_PRIORITIES = 5,
};



enum class CompressionAlgorithm {
  NONE = 0,
  ZLIB = 1,
  ZSTD = 2,
};



enum class ErrorKind {
  UNSPECIFIED = 0,
  TRANSIENT = 1,
  STATEFUL = 2,
  PERMANENT = 3,
};



enum class ErrorBlame {
  UNSPECIFIED = 0,
  SERVER = 1,
  CLIENT = 2,
};



enum class ErrorSafety {
  UNSPECIFIED = 0,
  SAFE = 1,
};



enum class ResponseRpcErrorCategory {
  INTERNAL_ERROR = 0,
  INVALID_REQUEST = 1,
  LOADSHEDDING = 2,
  SHUTDOWN = 3,
};



enum class ResponseRpcErrorCode {
  UNKNOWN = 0,
  OVERLOAD = 1,
  TASK_EXPIRED = 2,
  QUEUE_OVERLOADED = 3,
  SHUTDOWN = 4,
  INJECTED_FAILURE = 5,
  REQUEST_PARSING_FAILURE = 6,
  QUEUE_TIMEOUT = 7,
  RESPONSE_TOO_BIG = 8,
  WRONG_RPC_KIND = 9,
  UNKNOWN_METHOD = 10,
  CHECKSUM_MISMATCH = 11,
  INTERRUPTION = 12,
  APP_OVERLOAD = 13,
  UNKNOWN_INTERACTION_ID = 14,
  INTERACTION_CONSTRUCTOR_ERROR = 15,
  UNIMPLEMENTED_METHOD = 16,
  TENANT_QUOTA_EXCEEDED = 17,
};



enum class StreamRpcErrorCode {
  UNKNOWN = 0,
  CREDIT_TIMEOUT = 1,
  CHUNK_TIMEOUT = 2,
};



enum class InterfaceKind {
  USER = 0,
  DEBUGGING = 1,
  MONITORING = 2,
  PROFILING = 3,
};



enum class DrainCompleteCode {
  EXCEEDED_INGRESS_MEM_LIMIT = 1,
};



}} // apache::thrift

namespace std {
template<> struct hash<::apache::thrift::ProtocolId> :
  ::apache::thrift::detail::enum_hash<::apache::thrift::ProtocolId> {};
template<> struct hash<::apache::thrift::RpcKind> :
  ::apache::thrift::detail::enum_hash<::apache::thrift::RpcKind> {};
template<> struct hash<::apache::thrift::RpcPriority> :
  ::apache::thrift::detail::enum_hash<::apache::thrift::RpcPriority> {};
template<> struct hash<::apache::thrift::CompressionAlgorithm> :
  ::apache::thrift::detail::enum_hash<::apache::thrift::CompressionAlgorithm> {};
template<> struct hash<::apache::thrift::ErrorKind> :
  ::apache::thrift::detail::enum_hash<::apache::thrift::ErrorKind> {};
template<> struct hash<::apache::thrift::ErrorBlame> :
  ::apache::thrift::detail::enum_hash<::apache::thrift::ErrorBlame> {};
template<> struct hash<::apache::thrift::ErrorSafety> :
  ::apache::thrift::detail::enum_hash<::apache::thrift::ErrorSafety> {};
template<> struct hash<::apache::thrift::ResponseRpcErrorCategory> :
  ::apache::thrift::detail::enum_hash<::apache::thrift::ResponseRpcErrorCategory> {};
template<> struct hash<::apache::thrift::ResponseRpcErrorCode> :
  ::apache::thrift::detail::enum_hash<::apache::thrift::ResponseRpcErrorCode> {};
template<> struct hash<::apache::thrift::StreamRpcErrorCode> :
  ::apache::thrift::detail::enum_hash<::apache::thrift::StreamRpcErrorCode> {};
template<> struct hash<::apache::thrift::InterfaceKind> :
  ::apache::thrift::detail::enum_hash<::apache::thrift::InterfaceKind> {};
template<> struct hash<::apache::thrift::DrainCompleteCode> :
  ::apache::thrift::detail::enum_hash<::apache::thrift::DrainCompleteCode> {};
} // std

namespace apache { namespace thrift {


template <> struct TEnumDataStorage<::apache::thrift::ProtocolId>;

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

  static constexpr std::size_t const size = 2;
  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::BINARY; }
  static constexpr type max() { return type::COMPACT; }
};


template <> struct TEnumDataStorage<::apache::thrift::RpcKind>;

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

  static constexpr std::size_t const size = 4;
  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::SINGLE_REQUEST_SINGLE_RESPONSE; }
  static constexpr type max() { return type::SINK; }
};


template <> struct TEnumDataStorage<::apache::thrift::RpcPriority>;

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

  static constexpr std::size_t const size = 6;
  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::HIGH_IMPORTANT; }
  static constexpr type max() { return type::N_PRIORITIES; }
};


template <> struct TEnumDataStorage<::apache::thrift::CompressionAlgorithm>;

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

  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::NONE; }
  static constexpr type max() { return type::ZSTD; }
};


template <> struct TEnumDataStorage<::apache::thrift::ErrorKind>;

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

  static constexpr std::size_t const size = 4;
  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::UNSPECIFIED; }
  static constexpr type max() { return type::PERMANENT; }
};


template <> struct TEnumDataStorage<::apache::thrift::ErrorBlame>;

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

  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::UNSPECIFIED; }
  static constexpr type max() { return type::CLIENT; }
};


template <> struct TEnumDataStorage<::apache::thrift::ErrorSafety>;

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

  static constexpr std::size_t const size = 2;
  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::UNSPECIFIED; }
  static constexpr type max() { return type::SAFE; }
};


template <> struct TEnumDataStorage<::apache::thrift::ResponseRpcErrorCategory>;

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

  static constexpr std::size_t const size = 4;
  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::INTERNAL_ERROR; }
  static constexpr type max() { return type::SHUTDOWN; }
};


template <> struct TEnumDataStorage<::apache::thrift::ResponseRpcErrorCode>;

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

  static constexpr std::size_t const size = 18;
  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::UNKNOWN; }
  static constexpr type max() { return type::TENANT_QUOTA_EXCEEDED; }
};


template <> struct TEnumDataStorage<::apache::thrift::StreamRpcErrorCode>;

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

  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::UNKNOWN; }
  static constexpr type max() { return type::CHUNK_TIMEOUT; }
};


template <> struct TEnumDataStorage<::apache::thrift::InterfaceKind>;

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

  static constexpr std::size_t const size = 4;
  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::USER; }
  static constexpr type max() { return type::PROFILING; }
};


template <> struct TEnumDataStorage<::apache::thrift::DrainCompleteCode>;

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

  static constexpr std::size_t const size = 1;
  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::EXCEEDED_INGRESS_MEM_LIMIT; }
  static constexpr type max() { return type::EXCEEDED_INGRESS_MEM_LIMIT; }
};


}} // apache::thrift


// END declare_enums
// BEGIN forward_declare
namespace apache { namespace thrift {
class ZlibCompressionCodecConfig;
class ZstdCompressionCodecConfig;
class CodecConfig;
class CompressionConfig;
class NegotiationParameters;
class InteractionCreate;
class InteractionTerminate;
class FdMetadata;
class LoggingContext;
class RequestRpcMetadata;
class ErrorClassification;
class PayloadResponseMetadata;
class PayloadDeclaredExceptionMetadata;
class PayloadProxyExceptionMetadata;
class PayloadProxiedExceptionMetadata;
class PayloadAppUnknownExceptionMetdata;
class PayloadAnyExceptionMetadata;
class PayloadExceptionMetadata;
class PayloadExceptionMetadataBase;
class PayloadMetadata;
class ProxiedPayloadMetadata;
class QueueMetadata;
class ResponseRpcMetadata;
class ResponseRpcError;
class StreamRpcError;
class StreamPayloadMetadata;
class ClientMetadata;
class RequestSetupMetadata;
class SetupResponse;
class StreamHeadersPush;
class TransportMetadataPush;
class DrainCompletePush;
class ServerPushMetadata;
class ClientPushMetadata;
class HeadersPayloadContent;
class HeadersPayloadMetadata;
}} // apache::thrift
// END forward_declare
namespace apache::thrift::detail::annotation {
} // namespace apache::thrift::detail::annotation

namespace apache::thrift::detail::qualifier {
template<>
struct is_cpp_ref_field_optional<::apache::thrift::RequestRpcMetadata,::apache::thrift::type::field_id<22>> : std::true_type{};
template<>
struct is_cpp_ref_field_optional<::apache::thrift::ResponseRpcMetadata,::apache::thrift::type::field_id<12>> : std::true_type{};
template<>
struct is_cpp_ref_field_optional<::apache::thrift::StreamPayloadMetadata,::apache::thrift::type::field_id<5>> : std::true_type{};
} // namespace apache::thrift::detail::qualifier

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

typedef std::unique_ptr<folly::IOBuf> IOBufPtr;
typedef ::apache::thrift::ManagedStringViewWithConversions ManagedStringViewField;
typedef ::std::string string_4852;

class ZlibCompressionCodecConfig 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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 = ZlibCompressionCodecConfig;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

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

  ZlibCompressionCodecConfig(ZlibCompressionCodecConfig&&) = default;

  ZlibCompressionCodecConfig(const ZlibCompressionCodecConfig&) = default;


  ZlibCompressionCodecConfig& operator=(ZlibCompressionCodecConfig&&) = default;

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

 public:

  bool operator==(const ZlibCompressionCodecConfig&) const;
  bool operator<(const ZlibCompressionCodecConfig&) 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<ZlibCompressionCodecConfig>;
  friend void swap(ZlibCompressionCodecConfig& a, ZlibCompressionCodecConfig& b);
};

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


class ZstdCompressionCodecConfig 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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 = ZstdCompressionCodecConfig;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

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

  ZstdCompressionCodecConfig(ZstdCompressionCodecConfig&&) = default;

  ZstdCompressionCodecConfig(const ZstdCompressionCodecConfig&) = default;


  ZstdCompressionCodecConfig& operator=(ZstdCompressionCodecConfig&&) = default;

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

 public:

  bool operator==(const ZstdCompressionCodecConfig&) const;
  bool operator<(const ZstdCompressionCodecConfig&) 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<ZstdCompressionCodecConfig>;
  friend void swap(ZstdCompressionCodecConfig& a, ZstdCompressionCodecConfig& b);
};

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


class CodecConfig 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::zlibConfig,
    ::apache::thrift::ident::zstdConfig
  >;

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

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

 public:
  using __fbthrift_cpp2_type = CodecConfig;
  static constexpr bool __fbthrift_cpp2_is_union =
    true;


 public:
  enum Type : int {
    __EMPTY__ = 0,
    zlibConfig = 1,
    zstdConfig = 2,
  } ;

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

  CodecConfig(CodecConfig&& rhs) noexcept
      : type_(folly::to_underlying(Type::__EMPTY__)) {
    if (this == &rhs) { return; }
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return;
      }
      case Type::zlibConfig:
      {
        set_zlibConfig(std::move(rhs.value_.zlibConfig));
        break;
      }
      case Type::zstdConfig:
      {
        set_zstdConfig(std::move(rhs.value_.zstdConfig));
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
    apache::thrift::clear(rhs);
  }

  CodecConfig(const CodecConfig& rhs)
      : type_(folly::to_underlying(Type::__EMPTY__)) {
    if (this == &rhs) { return; }
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return;
      }
      case Type::zlibConfig:
      {
        set_zlibConfig(rhs.value_.zlibConfig);
        break;
      }
      case Type::zstdConfig:
      {
        set_zstdConfig(rhs.value_.zstdConfig);
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
  }

  CodecConfig& operator=(CodecConfig&& rhs) noexcept {
    if (this == &rhs) { return *this; }
    __fbthrift_clear();
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return *this;
      }
      case Type::zlibConfig:
      {
        set_zlibConfig(std::move(rhs.value_.zlibConfig));
        break;
      }
      case Type::zstdConfig:
      {
        set_zstdConfig(std::move(rhs.value_.zstdConfig));
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
    apache::thrift::clear(rhs);
    return *this;
  }

  CodecConfig& operator=(const CodecConfig& rhs) {
    if (this == &rhs) { return *this; }
    __fbthrift_clear();
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return *this;
      }
      case Type::zlibConfig:
      {
        set_zlibConfig(rhs.value_.zlibConfig);
        break;
      }
      case Type::zstdConfig:
      {
        set_zstdConfig(rhs.value_.zstdConfig);
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
    return *this;
  }

  ~CodecConfig();

  union storage_type {
    ::apache::thrift::ZlibCompressionCodecConfig zlibConfig;
    ::apache::thrift::ZstdCompressionCodecConfig zstdConfig;

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

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

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::ZlibCompressionCodecConfig& set_zlibConfig(::apache::thrift::ZlibCompressionCodecConfig const &t) {
    using T0 = ::apache::thrift::ZlibCompressionCodecConfig;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::zlibConfig);
    ::new (std::addressof(value_.zlibConfig)) T(t);
    return value_.zlibConfig;
  }

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::ZlibCompressionCodecConfig& set_zlibConfig(::apache::thrift::ZlibCompressionCodecConfig&& t) {
    using T0 = ::apache::thrift::ZlibCompressionCodecConfig;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::zlibConfig);
    ::new (std::addressof(value_.zlibConfig)) T(std::move(t));
    return value_.zlibConfig;
  }

  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::ZlibCompressionCodecConfig, T...>> ::apache::thrift::ZlibCompressionCodecConfig& set_zlibConfig(T&&... t) {
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::zlibConfig);
    ::new (std::addressof(value_.zlibConfig)) ::apache::thrift::ZlibCompressionCodecConfig(std::forward<T>(t)...);
    return value_.zlibConfig;
  }

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::ZstdCompressionCodecConfig& set_zstdConfig(::apache::thrift::ZstdCompressionCodecConfig const &t) {
    using T0 = ::apache::thrift::ZstdCompressionCodecConfig;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::zstdConfig);
    ::new (std::addressof(value_.zstdConfig)) T(t);
    return value_.zstdConfig;
  }

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::ZstdCompressionCodecConfig& set_zstdConfig(::apache::thrift::ZstdCompressionCodecConfig&& t) {
    using T0 = ::apache::thrift::ZstdCompressionCodecConfig;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::zstdConfig);
    ::new (std::addressof(value_.zstdConfig)) T(std::move(t));
    return value_.zstdConfig;
  }

  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::ZstdCompressionCodecConfig, T...>> ::apache::thrift::ZstdCompressionCodecConfig& set_zstdConfig(T&&... t) {
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::zstdConfig);
    ::new (std::addressof(value_.zstdConfig)) ::apache::thrift::ZstdCompressionCodecConfig(std::forward<T>(t)...);
    return value_.zstdConfig;
  }

  ::apache::thrift::ZlibCompressionCodecConfig const& get_zlibConfig() const {
    if (getType() != Type::zlibConfig) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.zlibConfig;
  }

  ::apache::thrift::ZstdCompressionCodecConfig const& get_zstdConfig() const {
    if (getType() != Type::zstdConfig) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.zstdConfig;
  }

  ::apache::thrift::ZlibCompressionCodecConfig& mutable_zlibConfig() {
    assert(getType() == Type::zlibConfig);
    return value_.zlibConfig;
  }

  ::apache::thrift::ZstdCompressionCodecConfig& mutable_zstdConfig() {
    assert(getType() == Type::zstdConfig);
    return value_.zstdConfig;
  }

  ::apache::thrift::ZlibCompressionCodecConfig move_zlibConfig() {
    assert(getType() == Type::zlibConfig);
    return std::move(value_.zlibConfig);
  }

  ::apache::thrift::ZstdCompressionCodecConfig move_zstdConfig() {
    assert(getType() == Type::zstdConfig);
    return std::move(value_.zstdConfig);
  }

  template <typename..., typename T = ::apache::thrift::ZlibCompressionCodecConfig>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> zlibConfig_ref() const& {
    return {value_.zlibConfig, type_, folly::to_underlying(Type::zlibConfig), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::ZlibCompressionCodecConfig>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> zlibConfig_ref() const&& {
    return {std::move(value_.zlibConfig), type_, folly::to_underlying(Type::zlibConfig), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::ZlibCompressionCodecConfig>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> zlibConfig_ref() & {
    return {value_.zlibConfig, type_, folly::to_underlying(Type::zlibConfig), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::ZlibCompressionCodecConfig>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> zlibConfig_ref() && {
    return {std::move(value_.zlibConfig), type_, folly::to_underlying(Type::zlibConfig), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  template <typename..., typename T = ::apache::thrift::ZstdCompressionCodecConfig>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> zstdConfig_ref() const& {
    return {value_.zstdConfig, type_, folly::to_underlying(Type::zstdConfig), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::ZstdCompressionCodecConfig>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> zstdConfig_ref() const&& {
    return {std::move(value_.zstdConfig), type_, folly::to_underlying(Type::zstdConfig), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::ZstdCompressionCodecConfig>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> zstdConfig_ref() & {
    return {value_.zstdConfig, type_, folly::to_underlying(Type::zstdConfig), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::ZstdCompressionCodecConfig>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> zstdConfig_ref() && {
    return {std::move(value_.zstdConfig), type_, folly::to_underlying(Type::zstdConfig), 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<CodecConfig>;
  friend void swap(CodecConfig& a, CodecConfig& b);
};

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


class CompressionConfig 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::codecConfig,
    ::apache::thrift::ident::compressionSizeLimit
  >;

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

  static constexpr std::size_t __fbthrift_field_size_v = 2;

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

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

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

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

 public:
  using __fbthrift_cpp2_type = CompressionConfig;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

  CompressionConfig() :
      __fbthrift_field_compressionSizeLimit() {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  CompressionConfig(apache::thrift::FragileConstructor, ::apache::thrift::CodecConfig codecConfig__arg, ::std::int64_t compressionSizeLimit__arg);

  CompressionConfig(CompressionConfig&&) noexcept;

  CompressionConfig(const CompressionConfig& src);


  CompressionConfig& operator=(CompressionConfig&&) noexcept;
  CompressionConfig& operator=(const CompressionConfig& src);
 private:
  ::apache::thrift::CodecConfig __fbthrift_field_codecConfig;
 private:
  ::std::int64_t __fbthrift_field_compressionSizeLimit;
 private:
  apache::thrift::detail::isset_bitset<2, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

  template <typename..., typename T = ::apache::thrift::CodecConfig>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> codecConfig_ref() const& {
    return {this->__fbthrift_field_codecConfig, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::CodecConfig>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> codecConfig_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_codecConfig), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::CodecConfig>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> codecConfig_ref() & {
    return {this->__fbthrift_field_codecConfig, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::CodecConfig>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> codecConfig_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_codecConfig), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::CodecConfig>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> codecConfig() const& {
    return {this->__fbthrift_field_codecConfig, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::CodecConfig>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> codecConfig() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_codecConfig), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::CodecConfig>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> codecConfig() & {
    return {this->__fbthrift_field_codecConfig, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::CodecConfig>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> codecConfig() && {
    return {static_cast<T&&>(this->__fbthrift_field_codecConfig), __isset.at(0), __isset.bit(0)};
  }

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

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

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

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

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

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

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

  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> compressionSizeLimit() && {
    return {static_cast<T&&>(this->__fbthrift_field_compressionSizeLimit), __isset.at(1), __isset.bit(1)};
  }
  const ::apache::thrift::CodecConfig* get_codecConfig() const&;
  ::apache::thrift::CodecConfig* get_codecConfig() &;
  ::apache::thrift::CodecConfig* get_codecConfig() && = delete;

  template <typename T_CompressionConfig_codecConfig_struct_setter = ::apache::thrift::CodecConfig>
  [[deprecated("Use `FOO.codecConfig_ref() = BAR;` instead of `FOO.set_codecConfig(BAR);`")]]
  ::apache::thrift::CodecConfig& set_codecConfig(T_CompressionConfig_codecConfig_struct_setter&& codecConfig_) {
    codecConfig_ref() = std::forward<T_CompressionConfig_codecConfig_struct_setter>(codecConfig_);
    return __fbthrift_field_codecConfig;
  }

  const ::std::int64_t* get_compressionSizeLimit() const& {
    return compressionSizeLimit_ref() ? std::addressof(__fbthrift_field_compressionSizeLimit) : nullptr;
  }

  ::std::int64_t* get_compressionSizeLimit() & {
    return compressionSizeLimit_ref() ? std::addressof(__fbthrift_field_compressionSizeLimit) : nullptr;
  }
  ::std::int64_t* get_compressionSizeLimit() && = delete;

  [[deprecated("Use `FOO.compressionSizeLimit_ref() = BAR;` instead of `FOO.set_compressionSizeLimit(BAR);`")]]
  ::std::int64_t& set_compressionSizeLimit(::std::int64_t compressionSizeLimit_) {
    compressionSizeLimit_ref() = compressionSizeLimit_;
    return __fbthrift_field_compressionSizeLimit;
  }

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

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


class NegotiationParameters 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::compressionAlgos,
    ::apache::thrift::ident::useStopTLS
  >;

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


 public:

  NegotiationParameters() :
      __fbthrift_field_compressionAlgos(),
      __fbthrift_field_useStopTLS() {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  NegotiationParameters(apache::thrift::FragileConstructor, std::uint64_t compressionAlgos__arg, bool useStopTLS__arg);

  NegotiationParameters(NegotiationParameters&&) = default;

  NegotiationParameters(const NegotiationParameters&) = default;


  NegotiationParameters& operator=(NegotiationParameters&&) = default;

  NegotiationParameters& operator=(const NegotiationParameters&) = default;
 private:
  std::uint64_t __fbthrift_field_compressionAlgos;
 private:
  bool __fbthrift_field_useStopTLS;
 private:
  apache::thrift::detail::isset_bitset<2, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

  template <typename..., typename T = std::uint64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> compressionAlgos_ref() const& {
    return {this->__fbthrift_field_compressionAlgos, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = std::uint64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> compressionAlgos_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_compressionAlgos), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = std::uint64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> compressionAlgos_ref() & {
    return {this->__fbthrift_field_compressionAlgos, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = std::uint64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> compressionAlgos_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_compressionAlgos), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = std::uint64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> compressionAlgos() const& {
    return {this->__fbthrift_field_compressionAlgos, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = std::uint64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> compressionAlgos() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_compressionAlgos), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = std::uint64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> compressionAlgos() & {
    return {this->__fbthrift_field_compressionAlgos, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = std::uint64_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> compressionAlgos() && {
    return {static_cast<T&&>(this->__fbthrift_field_compressionAlgos), __isset.at(0), __isset.bit(0)};
  }

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

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

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

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

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

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

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

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

  const std::uint64_t* get_compressionAlgos() const& {
    return compressionAlgos_ref() ? std::addressof(__fbthrift_field_compressionAlgos) : nullptr;
  }

  std::uint64_t* get_compressionAlgos() & {
    return compressionAlgos_ref() ? std::addressof(__fbthrift_field_compressionAlgos) : nullptr;
  }
  std::uint64_t* get_compressionAlgos() && = delete;

  [[deprecated("Use `FOO.compressionAlgos_ref() = BAR;` instead of `FOO.set_compressionAlgos(BAR);`")]]
  std::uint64_t& set_compressionAlgos(std::uint64_t compressionAlgos_) {
    compressionAlgos_ref() = compressionAlgos_;
    return __fbthrift_field_compressionAlgos;
  }

  const bool* get_useStopTLS() const& {
    return useStopTLS_ref() ? std::addressof(__fbthrift_field_useStopTLS) : nullptr;
  }

  bool* get_useStopTLS() & {
    return useStopTLS_ref() ? std::addressof(__fbthrift_field_useStopTLS) : nullptr;
  }
  bool* get_useStopTLS() && = delete;

  [[deprecated("Use `FOO.useStopTLS_ref() = BAR;` instead of `FOO.set_useStopTLS(BAR);`")]]
  bool& set_useStopTLS(bool useStopTLS_) {
    useStopTLS_ref() = useStopTLS_;
    return __fbthrift_field_useStopTLS;
  }

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

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


class InteractionCreate 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::interactionId,
    ::apache::thrift::ident::interactionName
  >;

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


 public:

  InteractionCreate();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  InteractionCreate(apache::thrift::FragileConstructor, ::std::int64_t interactionId__arg, ::apache::thrift::ManagedStringViewField interactionName__arg);

  InteractionCreate(InteractionCreate&&) noexcept;

  InteractionCreate(const InteractionCreate& src);


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

  ~InteractionCreate();

 private:
  ::std::int64_t __fbthrift_field_interactionId;
 private:
  ::apache::thrift::ManagedStringViewField __fbthrift_field_interactionName;
 private:
  apache::thrift::detail::isset_bitset<2, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  ::std::int64_t get_interactionId() const {
    return __fbthrift_field_interactionId;
  }

  [[deprecated("Use `FOO.interactionId_ref() = BAR;` instead of `FOO.set_interactionId(BAR);`")]]
  ::std::int64_t& set_interactionId(::std::int64_t interactionId_) {
    interactionId_ref() = interactionId_;
    return __fbthrift_field_interactionId;
  }

  const ::apache::thrift::ManagedStringViewField& get_interactionName() const& {
    return __fbthrift_field_interactionName;
  }

  ::apache::thrift::ManagedStringViewField get_interactionName() && {
    return std::move(__fbthrift_field_interactionName);
  }

  template <typename T_InteractionCreate_interactionName_struct_setter = ::apache::thrift::ManagedStringViewField>
  [[deprecated("Use `FOO.interactionName_ref() = BAR;` instead of `FOO.set_interactionName(BAR);`")]]
  ::apache::thrift::ManagedStringViewField& set_interactionName(T_InteractionCreate_interactionName_struct_setter&& interactionName_) {
    interactionName_ref() = std::forward<T_InteractionCreate_interactionName_struct_setter>(interactionName_);
    return __fbthrift_field_interactionName;
  }

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

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


class InteractionTerminate 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::interactionId
  >;

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


 public:

  InteractionTerminate() :
      __fbthrift_field_interactionId() {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  InteractionTerminate(apache::thrift::FragileConstructor, ::std::int64_t interactionId__arg);

  InteractionTerminate(InteractionTerminate&&) = default;

  InteractionTerminate(const InteractionTerminate&) = default;


  InteractionTerminate& operator=(InteractionTerminate&&) = default;

  InteractionTerminate& operator=(const InteractionTerminate&) = default;
 private:
  ::std::int64_t __fbthrift_field_interactionId;
 private:
  apache::thrift::detail::isset_bitset<1, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

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

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

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

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

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

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

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

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

  ::std::int64_t get_interactionId() const {
    return __fbthrift_field_interactionId;
  }

  [[deprecated("Use `FOO.interactionId_ref() = BAR;` instead of `FOO.set_interactionId(BAR);`")]]
  ::std::int64_t& set_interactionId(::std::int64_t interactionId_) {
    interactionId_ref() = interactionId_;
    return __fbthrift_field_interactionId;
  }

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

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


class FdMetadata 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::fdSeqNum,
    ::apache::thrift::ident::numFds
  >;

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


 public:

  FdMetadata() :
      __fbthrift_field_fdSeqNum(),
      __fbthrift_field_numFds() {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  FdMetadata(apache::thrift::FragileConstructor, ::std::int64_t fdSeqNum__arg, ::std::int32_t numFds__arg);

  FdMetadata(FdMetadata&&) = default;

  FdMetadata(const FdMetadata&) = default;


  FdMetadata& operator=(FdMetadata&&) = default;

  FdMetadata& operator=(const FdMetadata&) = default;
 private:
  ::std::int64_t __fbthrift_field_fdSeqNum;
 private:
  ::std::int32_t __fbthrift_field_numFds;
 private:
  apache::thrift::detail::isset_bitset<2, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

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

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

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

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

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

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

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

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

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> numFds_ref() const& {
    return {this->__fbthrift_field_numFds, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> numFds_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_numFds), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> numFds_ref() & {
    return {this->__fbthrift_field_numFds, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> numFds_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_numFds), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> numFds() const& {
    return {this->__fbthrift_field_numFds, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> numFds() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_numFds), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> numFds() & {
    return {this->__fbthrift_field_numFds, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> numFds() && {
    return {static_cast<T&&>(this->__fbthrift_field_numFds), __isset.at(1), __isset.bit(1)};
  }

  const ::std::int64_t* get_fdSeqNum() const& {
    return fdSeqNum_ref() ? std::addressof(__fbthrift_field_fdSeqNum) : nullptr;
  }

  ::std::int64_t* get_fdSeqNum() & {
    return fdSeqNum_ref() ? std::addressof(__fbthrift_field_fdSeqNum) : nullptr;
  }
  ::std::int64_t* get_fdSeqNum() && = delete;

  [[deprecated("Use `FOO.fdSeqNum_ref() = BAR;` instead of `FOO.set_fdSeqNum(BAR);`")]]
  ::std::int64_t& set_fdSeqNum(::std::int64_t fdSeqNum_) {
    fdSeqNum_ref() = fdSeqNum_;
    return __fbthrift_field_fdSeqNum;
  }

  const ::std::int32_t* get_numFds() const& {
    return numFds_ref() ? std::addressof(__fbthrift_field_numFds) : nullptr;
  }

  ::std::int32_t* get_numFds() & {
    return numFds_ref() ? std::addressof(__fbthrift_field_numFds) : nullptr;
  }
  ::std::int32_t* get_numFds() && = delete;

  [[deprecated("Use `FOO.numFds_ref() = BAR;` instead of `FOO.set_numFds(BAR);`")]]
  ::std::int32_t& set_numFds(::std::int32_t numFds_) {
    numFds_ref() = numFds_;
    return __fbthrift_field_numFds;
  }

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

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


class LoggingContext 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::logSampleRatio,
    ::apache::thrift::ident::logErrorSampleRatio,
    ::apache::thrift::ident::requestId,
    ::apache::thrift::ident::routingTarget
  >;

  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::i64_t,
    ::apache::thrift::type::i64_t,
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::string_t
  >;

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


 public:

  LoggingContext();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  LoggingContext(apache::thrift::FragileConstructor, ::std::int64_t logSampleRatio__arg, ::std::int64_t logErrorSampleRatio__arg, ::std::string requestId__arg, ::std::string routingTarget__arg);

  LoggingContext(LoggingContext&&) noexcept;

  LoggingContext(const LoggingContext& src);


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

  ~LoggingContext();

 private:
  ::std::int64_t __fbthrift_field_logSampleRatio;
 private:
  ::std::int64_t __fbthrift_field_logErrorSampleRatio;
 private:
  ::std::string __fbthrift_field_requestId;
 private:
  ::std::string __fbthrift_field_routingTarget;
 private:
  apache::thrift::detail::isset_bitset<4, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  ::std::int64_t get_logSampleRatio() const {
    return __fbthrift_field_logSampleRatio;
  }

  [[deprecated("Use `FOO.logSampleRatio_ref() = BAR;` instead of `FOO.set_logSampleRatio(BAR);`")]]
  ::std::int64_t& set_logSampleRatio(::std::int64_t logSampleRatio_) {
    logSampleRatio_ref() = logSampleRatio_;
    return __fbthrift_field_logSampleRatio;
  }

  ::std::int64_t get_logErrorSampleRatio() const {
    return __fbthrift_field_logErrorSampleRatio;
  }

  [[deprecated("Use `FOO.logErrorSampleRatio_ref() = BAR;` instead of `FOO.set_logErrorSampleRatio(BAR);`")]]
  ::std::int64_t& set_logErrorSampleRatio(::std::int64_t logErrorSampleRatio_) {
    logErrorSampleRatio_ref() = logErrorSampleRatio_;
    return __fbthrift_field_logErrorSampleRatio;
  }

  const ::std::string* get_requestId() const& {
    return requestId_ref() ? std::addressof(__fbthrift_field_requestId) : nullptr;
  }

  ::std::string* get_requestId() & {
    return requestId_ref() ? std::addressof(__fbthrift_field_requestId) : nullptr;
  }
  ::std::string* get_requestId() && = delete;

  template <typename T_LoggingContext_requestId_struct_setter = ::std::string>
  [[deprecated("Use `FOO.requestId_ref() = BAR;` instead of `FOO.set_requestId(BAR);`")]]
  ::std::string& set_requestId(T_LoggingContext_requestId_struct_setter&& requestId_) {
    requestId_ref() = std::forward<T_LoggingContext_requestId_struct_setter>(requestId_);
    return __fbthrift_field_requestId;
  }

  const ::std::string* get_routingTarget() const& {
    return routingTarget_ref() ? std::addressof(__fbthrift_field_routingTarget) : nullptr;
  }

  ::std::string* get_routingTarget() & {
    return routingTarget_ref() ? std::addressof(__fbthrift_field_routingTarget) : nullptr;
  }
  ::std::string* get_routingTarget() && = delete;

  template <typename T_LoggingContext_routingTarget_struct_setter = ::std::string>
  [[deprecated("Use `FOO.routingTarget_ref() = BAR;` instead of `FOO.set_routingTarget(BAR);`")]]
  ::std::string& set_routingTarget(T_LoggingContext_routingTarget_struct_setter&& routingTarget_) {
    routingTarget_ref() = std::forward<T_LoggingContext_routingTarget_struct_setter>(routingTarget_);
    return __fbthrift_field_routingTarget;
  }

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

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


class RequestRpcMetadata 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::protocol,
    ::apache::thrift::ident::name,
    ::apache::thrift::ident::kind,
    ::apache::thrift::ident::clientTimeoutMs,
    ::apache::thrift::ident::queueTimeoutMs,
    ::apache::thrift::ident::priority,
    ::apache::thrift::ident::otherMetadata,
    ::apache::thrift::ident::crc32c,
    ::apache::thrift::ident::loadMetric,
    ::apache::thrift::ident::compression,
    ::apache::thrift::ident::compressionConfig,
    ::apache::thrift::ident::interactionId,
    ::apache::thrift::ident::interactionCreate,
    ::apache::thrift::ident::clientId,
    ::apache::thrift::ident::serviceTraceMeta,
    ::apache::thrift::ident::frameworkMetadata,
    ::apache::thrift::ident::fdMetadata,
    ::apache::thrift::ident::loggingContext,
    ::apache::thrift::ident::tenantId
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2,3,5,6,7,8,11,13,14,15,16,17,18,19,20,22,23,24};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::enum_t<::apache::thrift::ProtocolId>,
    ::apache::thrift::type::cpp_type<::apache::thrift::ManagedStringViewWithConversions, ::apache::thrift::type::string_t>,
    ::apache::thrift::type::enum_t<::apache::thrift::RpcKind>,
    ::apache::thrift::type::i32_t,
    ::apache::thrift::type::i32_t,
    ::apache::thrift::type::enum_t<::apache::thrift::RpcPriority>,
    ::apache::thrift::type::cpp_type<folly::F14NodeMap<::std::string, ::std::string>, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::string_t>>,
    ::apache::thrift::type::cpp_type<std::uint32_t, ::apache::thrift::type::i32_t>,
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::enum_t<::apache::thrift::CompressionAlgorithm>,
    ::apache::thrift::type::struct_t<::apache::thrift::CompressionConfig>,
    ::apache::thrift::type::i64_t,
    ::apache::thrift::type::struct_t<::apache::thrift::InteractionCreate>,
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::cpp_type<std::unique_ptr<folly::IOBuf>, ::apache::thrift::type::binary_t>,
    ::apache::thrift::type::struct_t<::apache::thrift::FdMetadata>,
    ::apache::thrift::type::struct_t<::apache::thrift::LoggingContext>,
    ::apache::thrift::type::string_t
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 19;

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


 public:

  RequestRpcMetadata();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  RequestRpcMetadata(apache::thrift::FragileConstructor, ::apache::thrift::ProtocolId protocol__arg, ::apache::thrift::ManagedStringViewField name__arg, ::apache::thrift::RpcKind kind__arg, ::std::int32_t clientTimeoutMs__arg, ::std::int32_t queueTimeoutMs__arg, ::apache::thrift::RpcPriority priority__arg, folly::F14NodeMap<::std::string, ::std::string> otherMetadata__arg, std::uint32_t crc32c__arg, ::std::string loadMetric__arg, ::apache::thrift::CompressionAlgorithm compression__arg, ::apache::thrift::CompressionConfig compressionConfig__arg, ::std::int64_t interactionId__arg, ::apache::thrift::InteractionCreate interactionCreate__arg, ::std::string clientId__arg, ::std::string serviceTraceMeta__arg, ::apache::thrift::IOBufPtr frameworkMetadata__arg, ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata> fdMetadata__arg, ::apache::thrift::LoggingContext loggingContext__arg, ::std::string tenantId__arg);

  RequestRpcMetadata(RequestRpcMetadata&&) noexcept;
  RequestRpcMetadata(const RequestRpcMetadata& src);


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

  ~RequestRpcMetadata();

 private:
  ::apache::thrift::ProtocolId __fbthrift_field_protocol;
 private:
  ::apache::thrift::ManagedStringViewField __fbthrift_field_name;
 private:
  ::apache::thrift::RpcKind __fbthrift_field_kind;
 private:
  ::std::int32_t __fbthrift_field_clientTimeoutMs;
 private:
  ::std::int32_t __fbthrift_field_queueTimeoutMs;
 private:
  ::apache::thrift::RpcPriority __fbthrift_field_priority;
 private:
  folly::F14NodeMap<::std::string, ::std::string> __fbthrift_field_otherMetadata;
 private:
  std::uint32_t __fbthrift_field_crc32c;
 private:
  ::std::string __fbthrift_field_loadMetric;
 private:
  ::apache::thrift::CompressionAlgorithm __fbthrift_field_compression;
 private:
  ::apache::thrift::CompressionConfig __fbthrift_field_compressionConfig;
 private:
  ::std::int64_t __fbthrift_field_interactionId;
 private:
  ::apache::thrift::InteractionCreate __fbthrift_field_interactionCreate;
 private:
  ::std::string __fbthrift_field_clientId;
 private:
  ::std::string __fbthrift_field_serviceTraceMeta;
 private:
  ::apache::thrift::IOBufPtr __fbthrift_field_frameworkMetadata;
 private:
  ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata> __fbthrift_field_fdMetadata;
 private:
  ::apache::thrift::LoggingContext __fbthrift_field_loggingContext;
 private:
  ::std::string __fbthrift_field_tenantId;
 private:
  apache::thrift::detail::isset_bitset<18, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

  template <typename..., typename T = ::apache::thrift::ProtocolId>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> protocol_ref() const& {
    return {this->__fbthrift_field_protocol, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ProtocolId>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> protocol_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_protocol), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ProtocolId>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> protocol_ref() & {
    return {this->__fbthrift_field_protocol, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ProtocolId>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> protocol_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_protocol), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ProtocolId>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> protocol() const& {
    return {this->__fbthrift_field_protocol, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ProtocolId>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> protocol() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_protocol), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ProtocolId>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> protocol() & {
    return {this->__fbthrift_field_protocol, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ProtocolId>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> protocol() && {
    return {static_cast<T&&>(this->__fbthrift_field_protocol), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ManagedStringViewField>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> name_ref() const& {
    return {this->__fbthrift_field_name, __isset.at(1), __isset.bit(1)};
  }

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

  template <typename..., typename T = ::apache::thrift::ManagedStringViewField>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> name_ref() & {
    return {this->__fbthrift_field_name, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::ManagedStringViewField>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> name_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_name), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::ManagedStringViewField>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> name() const& {
    return {this->__fbthrift_field_name, __isset.at(1), __isset.bit(1)};
  }

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

  template <typename..., typename T = ::apache::thrift::ManagedStringViewField>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> name() & {
    return {this->__fbthrift_field_name, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::ManagedStringViewField>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> name() && {
    return {static_cast<T&&>(this->__fbthrift_field_name), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::RpcKind>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> kind_ref() const& {
    return {this->__fbthrift_field_kind, __isset.at(2), __isset.bit(2)};
  }

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

  template <typename..., typename T = ::apache::thrift::RpcKind>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> kind_ref() & {
    return {this->__fbthrift_field_kind, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::apache::thrift::RpcKind>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> kind_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_kind), __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::apache::thrift::RpcKind>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> kind() const& {
    return {this->__fbthrift_field_kind, __isset.at(2), __isset.bit(2)};
  }

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

  template <typename..., typename T = ::apache::thrift::RpcKind>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> kind() & {
    return {this->__fbthrift_field_kind, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::apache::thrift::RpcKind>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> kind() && {
    return {static_cast<T&&>(this->__fbthrift_field_kind), __isset.at(2), __isset.bit(2)};
  }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  template <typename..., typename T = ::apache::thrift::RpcPriority>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> priority_ref() const& {
    return {this->__fbthrift_field_priority, __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = ::apache::thrift::RpcPriority>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> priority_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_priority), __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = ::apache::thrift::RpcPriority>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> priority_ref() & {
    return {this->__fbthrift_field_priority, __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = ::apache::thrift::RpcPriority>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> priority_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_priority), __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = ::apache::thrift::RpcPriority>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> priority() const& {
    return {this->__fbthrift_field_priority, __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = ::apache::thrift::RpcPriority>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> priority() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_priority), __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = ::apache::thrift::RpcPriority>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> priority() & {
    return {this->__fbthrift_field_priority, __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = ::apache::thrift::RpcPriority>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> priority() && {
    return {static_cast<T&&>(this->__fbthrift_field_priority), __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> otherMetadata_ref() const& {
    return {this->__fbthrift_field_otherMetadata, __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> otherMetadata_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_otherMetadata), __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> otherMetadata_ref() & {
    return {this->__fbthrift_field_otherMetadata, __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> otherMetadata_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_otherMetadata), __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> otherMetadata() const& {
    return {this->__fbthrift_field_otherMetadata, __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> otherMetadata() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_otherMetadata), __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> otherMetadata() & {
    return {this->__fbthrift_field_otherMetadata, __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> otherMetadata() && {
    return {static_cast<T&&>(this->__fbthrift_field_otherMetadata), __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = std::uint32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> crc32c_ref() const& {
    return {this->__fbthrift_field_crc32c, __isset.at(7), __isset.bit(7)};
  }

  template <typename..., typename T = std::uint32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> crc32c_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_crc32c), __isset.at(7), __isset.bit(7)};
  }

  template <typename..., typename T = std::uint32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> crc32c_ref() & {
    return {this->__fbthrift_field_crc32c, __isset.at(7), __isset.bit(7)};
  }

  template <typename..., typename T = std::uint32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> crc32c_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_crc32c), __isset.at(7), __isset.bit(7)};
  }

  template <typename..., typename T = std::uint32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> crc32c() const& {
    return {this->__fbthrift_field_crc32c, __isset.at(7), __isset.bit(7)};
  }

  template <typename..., typename T = std::uint32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> crc32c() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_crc32c), __isset.at(7), __isset.bit(7)};
  }

  template <typename..., typename T = std::uint32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> crc32c() & {
    return {this->__fbthrift_field_crc32c, __isset.at(7), __isset.bit(7)};
  }

  template <typename..., typename T = std::uint32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> crc32c() && {
    return {static_cast<T&&>(this->__fbthrift_field_crc32c), __isset.at(7), __isset.bit(7)};
  }

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

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

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> loadMetric_ref() & {
    return {this->__fbthrift_field_loadMetric, __isset.at(8), __isset.bit(8)};
  }

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

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

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

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> loadMetric() & {
    return {this->__fbthrift_field_loadMetric, __isset.at(8), __isset.bit(8)};
  }

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

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> compression_ref() const& {
    return {this->__fbthrift_field_compression, __isset.at(9), __isset.bit(9)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> compression_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_compression), __isset.at(9), __isset.bit(9)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> compression_ref() & {
    return {this->__fbthrift_field_compression, __isset.at(9), __isset.bit(9)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> compression_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_compression), __isset.at(9), __isset.bit(9)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> compression() const& {
    return {this->__fbthrift_field_compression, __isset.at(9), __isset.bit(9)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> compression() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_compression), __isset.at(9), __isset.bit(9)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> compression() & {
    return {this->__fbthrift_field_compression, __isset.at(9), __isset.bit(9)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> compression() && {
    return {static_cast<T&&>(this->__fbthrift_field_compression), __isset.at(9), __isset.bit(9)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionConfig>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> compressionConfig_ref() const& {
    return {this->__fbthrift_field_compressionConfig, __isset.at(10), __isset.bit(10)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionConfig>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> compressionConfig_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_compressionConfig), __isset.at(10), __isset.bit(10)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionConfig>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> compressionConfig_ref() & {
    return {this->__fbthrift_field_compressionConfig, __isset.at(10), __isset.bit(10)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionConfig>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> compressionConfig_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_compressionConfig), __isset.at(10), __isset.bit(10)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionConfig>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> compressionConfig() const& {
    return {this->__fbthrift_field_compressionConfig, __isset.at(10), __isset.bit(10)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionConfig>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> compressionConfig() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_compressionConfig), __isset.at(10), __isset.bit(10)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionConfig>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> compressionConfig() & {
    return {this->__fbthrift_field_compressionConfig, __isset.at(10), __isset.bit(10)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionConfig>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> compressionConfig() && {
    return {static_cast<T&&>(this->__fbthrift_field_compressionConfig), __isset.at(10), __isset.bit(10)};
  }

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

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

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

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

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

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

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

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

  template <typename..., typename T = ::apache::thrift::InteractionCreate>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> interactionCreate_ref() const& {
    return {this->__fbthrift_field_interactionCreate, __isset.at(12), __isset.bit(12)};
  }

  template <typename..., typename T = ::apache::thrift::InteractionCreate>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> interactionCreate_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_interactionCreate), __isset.at(12), __isset.bit(12)};
  }

  template <typename..., typename T = ::apache::thrift::InteractionCreate>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> interactionCreate_ref() & {
    return {this->__fbthrift_field_interactionCreate, __isset.at(12), __isset.bit(12)};
  }

  template <typename..., typename T = ::apache::thrift::InteractionCreate>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> interactionCreate_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_interactionCreate), __isset.at(12), __isset.bit(12)};
  }

  template <typename..., typename T = ::apache::thrift::InteractionCreate>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> interactionCreate() const& {
    return {this->__fbthrift_field_interactionCreate, __isset.at(12), __isset.bit(12)};
  }

  template <typename..., typename T = ::apache::thrift::InteractionCreate>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> interactionCreate() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_interactionCreate), __isset.at(12), __isset.bit(12)};
  }

  template <typename..., typename T = ::apache::thrift::InteractionCreate>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> interactionCreate() & {
    return {this->__fbthrift_field_interactionCreate, __isset.at(12), __isset.bit(12)};
  }

  template <typename..., typename T = ::apache::thrift::InteractionCreate>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> interactionCreate() && {
    return {static_cast<T&&>(this->__fbthrift_field_interactionCreate), __isset.at(12), __isset.bit(12)};
  }

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

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

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> clientId_ref() & {
    return {this->__fbthrift_field_clientId, __isset.at(13), __isset.bit(13)};
  }

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

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

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

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> clientId() & {
    return {this->__fbthrift_field_clientId, __isset.at(13), __isset.bit(13)};
  }

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

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

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

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> serviceTraceMeta_ref() & {
    return {this->__fbthrift_field_serviceTraceMeta, __isset.at(14), __isset.bit(14)};
  }

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

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

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

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> serviceTraceMeta() & {
    return {this->__fbthrift_field_serviceTraceMeta, __isset.at(14), __isset.bit(14)};
  }

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

  template <typename..., typename T = ::apache::thrift::IOBufPtr>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> frameworkMetadata_ref() const& {
    return {this->__fbthrift_field_frameworkMetadata, __isset.at(15), __isset.bit(15)};
  }

  template <typename..., typename T = ::apache::thrift::IOBufPtr>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> frameworkMetadata_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_frameworkMetadata), __isset.at(15), __isset.bit(15)};
  }

  template <typename..., typename T = ::apache::thrift::IOBufPtr>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> frameworkMetadata_ref() & {
    return {this->__fbthrift_field_frameworkMetadata, __isset.at(15), __isset.bit(15)};
  }

  template <typename..., typename T = ::apache::thrift::IOBufPtr>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> frameworkMetadata_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_frameworkMetadata), __isset.at(15), __isset.bit(15)};
  }

  template <typename..., typename T = ::apache::thrift::IOBufPtr>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> frameworkMetadata() const& {
    return {this->__fbthrift_field_frameworkMetadata, __isset.at(15), __isset.bit(15)};
  }

  template <typename..., typename T = ::apache::thrift::IOBufPtr>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> frameworkMetadata() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_frameworkMetadata), __isset.at(15), __isset.bit(15)};
  }

  template <typename..., typename T = ::apache::thrift::IOBufPtr>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> frameworkMetadata() & {
    return {this->__fbthrift_field_frameworkMetadata, __isset.at(15), __isset.bit(15)};
  }

  template <typename..., typename T = ::apache::thrift::IOBufPtr>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> frameworkMetadata() && {
    return {static_cast<T&&>(this->__fbthrift_field_frameworkMetadata), __isset.at(15), __isset.bit(15)};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<const T&> fdMetadata_ref() const& {
    return ::apache::thrift::optional_boxed_field_ref<const T&>{this->__fbthrift_field_fdMetadata};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<const T&&> fdMetadata_ref() const&& {
    return ::apache::thrift::optional_boxed_field_ref<const T&&>{static_cast<const T&&>(this->__fbthrift_field_fdMetadata)};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<T&> fdMetadata_ref() & {
    return ::apache::thrift::optional_boxed_field_ref<T&>{this->__fbthrift_field_fdMetadata};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<T&&> fdMetadata_ref() && {
    return ::apache::thrift::optional_boxed_field_ref<T&&>{static_cast<T&&>(this->__fbthrift_field_fdMetadata)};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<const T&> fdMetadata() const& {
    return ::apache::thrift::optional_boxed_field_ref<const T&>{this->__fbthrift_field_fdMetadata};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<const T&&> fdMetadata() const&& {
    return ::apache::thrift::optional_boxed_field_ref<const T&&>{static_cast<const T&&>(this->__fbthrift_field_fdMetadata)};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<T&> fdMetadata() & {
    return ::apache::thrift::optional_boxed_field_ref<T&>{this->__fbthrift_field_fdMetadata};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<T&&> fdMetadata() && {
    return ::apache::thrift::optional_boxed_field_ref<T&&>{static_cast<T&&>(this->__fbthrift_field_fdMetadata)};
  }

  template <typename..., typename T = ::apache::thrift::LoggingContext>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> loggingContext_ref() const& {
    return {this->__fbthrift_field_loggingContext, __isset.at(16), __isset.bit(16)};
  }

  template <typename..., typename T = ::apache::thrift::LoggingContext>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> loggingContext_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_loggingContext), __isset.at(16), __isset.bit(16)};
  }

  template <typename..., typename T = ::apache::thrift::LoggingContext>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> loggingContext_ref() & {
    return {this->__fbthrift_field_loggingContext, __isset.at(16), __isset.bit(16)};
  }

  template <typename..., typename T = ::apache::thrift::LoggingContext>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> loggingContext_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_loggingContext), __isset.at(16), __isset.bit(16)};
  }

  template <typename..., typename T = ::apache::thrift::LoggingContext>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> loggingContext() const& {
    return {this->__fbthrift_field_loggingContext, __isset.at(16), __isset.bit(16)};
  }

  template <typename..., typename T = ::apache::thrift::LoggingContext>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> loggingContext() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_loggingContext), __isset.at(16), __isset.bit(16)};
  }

  template <typename..., typename T = ::apache::thrift::LoggingContext>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> loggingContext() & {
    return {this->__fbthrift_field_loggingContext, __isset.at(16), __isset.bit(16)};
  }

  template <typename..., typename T = ::apache::thrift::LoggingContext>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> loggingContext() && {
    return {static_cast<T&&>(this->__fbthrift_field_loggingContext), __isset.at(16), __isset.bit(16)};
  }

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

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

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> tenantId_ref() & {
    return {this->__fbthrift_field_tenantId, __isset.at(17), __isset.bit(17)};
  }

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

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

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

  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> tenantId() & {
    return {this->__fbthrift_field_tenantId, __isset.at(17), __isset.bit(17)};
  }

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

  const ::apache::thrift::ProtocolId* get_protocol() const& {
    return protocol_ref() ? std::addressof(__fbthrift_field_protocol) : nullptr;
  }

  ::apache::thrift::ProtocolId* get_protocol() & {
    return protocol_ref() ? std::addressof(__fbthrift_field_protocol) : nullptr;
  }
  ::apache::thrift::ProtocolId* get_protocol() && = delete;

  [[deprecated("Use `FOO.protocol_ref() = BAR;` instead of `FOO.set_protocol(BAR);`")]]
  ::apache::thrift::ProtocolId& set_protocol(::apache::thrift::ProtocolId protocol_) {
    protocol_ref() = protocol_;
    return __fbthrift_field_protocol;
  }

  const ::apache::thrift::ManagedStringViewField* get_name() const& {
    return name_ref() ? std::addressof(__fbthrift_field_name) : nullptr;
  }

  ::apache::thrift::ManagedStringViewField* get_name() & {
    return name_ref() ? std::addressof(__fbthrift_field_name) : nullptr;
  }
  ::apache::thrift::ManagedStringViewField* get_name() && = delete;

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

  const ::apache::thrift::RpcKind* get_kind() const& {
    return kind_ref() ? std::addressof(__fbthrift_field_kind) : nullptr;
  }

  ::apache::thrift::RpcKind* get_kind() & {
    return kind_ref() ? std::addressof(__fbthrift_field_kind) : nullptr;
  }
  ::apache::thrift::RpcKind* get_kind() && = delete;

  [[deprecated("Use `FOO.kind_ref() = BAR;` instead of `FOO.set_kind(BAR);`")]]
  ::apache::thrift::RpcKind& set_kind(::apache::thrift::RpcKind kind_) {
    kind_ref() = kind_;
    return __fbthrift_field_kind;
  }

  const ::std::int32_t* get_clientTimeoutMs() const& {
    return clientTimeoutMs_ref() ? std::addressof(__fbthrift_field_clientTimeoutMs) : nullptr;
  }

  ::std::int32_t* get_clientTimeoutMs() & {
    return clientTimeoutMs_ref() ? std::addressof(__fbthrift_field_clientTimeoutMs) : nullptr;
  }
  ::std::int32_t* get_clientTimeoutMs() && = delete;

  [[deprecated("Use `FOO.clientTimeoutMs_ref() = BAR;` instead of `FOO.set_clientTimeoutMs(BAR);`")]]
  ::std::int32_t& set_clientTimeoutMs(::std::int32_t clientTimeoutMs_) {
    clientTimeoutMs_ref() = clientTimeoutMs_;
    return __fbthrift_field_clientTimeoutMs;
  }

  const ::std::int32_t* get_queueTimeoutMs() const& {
    return queueTimeoutMs_ref() ? std::addressof(__fbthrift_field_queueTimeoutMs) : nullptr;
  }

  ::std::int32_t* get_queueTimeoutMs() & {
    return queueTimeoutMs_ref() ? std::addressof(__fbthrift_field_queueTimeoutMs) : nullptr;
  }
  ::std::int32_t* get_queueTimeoutMs() && = delete;

  [[deprecated("Use `FOO.queueTimeoutMs_ref() = BAR;` instead of `FOO.set_queueTimeoutMs(BAR);`")]]
  ::std::int32_t& set_queueTimeoutMs(::std::int32_t queueTimeoutMs_) {
    queueTimeoutMs_ref() = queueTimeoutMs_;
    return __fbthrift_field_queueTimeoutMs;
  }

  const ::apache::thrift::RpcPriority* get_priority() const& {
    return priority_ref() ? std::addressof(__fbthrift_field_priority) : nullptr;
  }

  ::apache::thrift::RpcPriority* get_priority() & {
    return priority_ref() ? std::addressof(__fbthrift_field_priority) : nullptr;
  }
  ::apache::thrift::RpcPriority* get_priority() && = delete;

  [[deprecated("Use `FOO.priority_ref() = BAR;` instead of `FOO.set_priority(BAR);`")]]
  ::apache::thrift::RpcPriority& set_priority(::apache::thrift::RpcPriority priority_) {
    priority_ref() = priority_;
    return __fbthrift_field_priority;
  }
  const folly::F14NodeMap<::std::string, ::std::string>* get_otherMetadata() const&;
  folly::F14NodeMap<::std::string, ::std::string>* get_otherMetadata() &;
  folly::F14NodeMap<::std::string, ::std::string>* get_otherMetadata() && = delete;

  template <typename T_RequestRpcMetadata_otherMetadata_struct_setter = folly::F14NodeMap<::std::string, ::std::string>>
  [[deprecated("Use `FOO.otherMetadata_ref() = BAR;` instead of `FOO.set_otherMetadata(BAR);`")]]
  folly::F14NodeMap<::std::string, ::std::string>& set_otherMetadata(T_RequestRpcMetadata_otherMetadata_struct_setter&& otherMetadata_) {
    otherMetadata_ref() = std::forward<T_RequestRpcMetadata_otherMetadata_struct_setter>(otherMetadata_);
    return __fbthrift_field_otherMetadata;
  }

  const std::uint32_t* get_crc32c() const& {
    return crc32c_ref() ? std::addressof(__fbthrift_field_crc32c) : nullptr;
  }

  std::uint32_t* get_crc32c() & {
    return crc32c_ref() ? std::addressof(__fbthrift_field_crc32c) : nullptr;
  }
  std::uint32_t* get_crc32c() && = delete;

  [[deprecated("Use `FOO.crc32c_ref() = BAR;` instead of `FOO.set_crc32c(BAR);`")]]
  std::uint32_t& set_crc32c(std::uint32_t crc32c_) {
    crc32c_ref() = crc32c_;
    return __fbthrift_field_crc32c;
  }

  const ::std::string* get_loadMetric() const& {
    return loadMetric_ref() ? std::addressof(__fbthrift_field_loadMetric) : nullptr;
  }

  ::std::string* get_loadMetric() & {
    return loadMetric_ref() ? std::addressof(__fbthrift_field_loadMetric) : nullptr;
  }
  ::std::string* get_loadMetric() && = delete;

  template <typename T_RequestRpcMetadata_loadMetric_struct_setter = ::std::string>
  [[deprecated("Use `FOO.loadMetric_ref() = BAR;` instead of `FOO.set_loadMetric(BAR);`")]]
  ::std::string& set_loadMetric(T_RequestRpcMetadata_loadMetric_struct_setter&& loadMetric_) {
    loadMetric_ref() = std::forward<T_RequestRpcMetadata_loadMetric_struct_setter>(loadMetric_);
    return __fbthrift_field_loadMetric;
  }

  const ::apache::thrift::CompressionAlgorithm* get_compression() const& {
    return compression_ref() ? std::addressof(__fbthrift_field_compression) : nullptr;
  }

  ::apache::thrift::CompressionAlgorithm* get_compression() & {
    return compression_ref() ? std::addressof(__fbthrift_field_compression) : nullptr;
  }
  ::apache::thrift::CompressionAlgorithm* get_compression() && = delete;

  [[deprecated("Use `FOO.compression_ref() = BAR;` instead of `FOO.set_compression(BAR);`")]]
  ::apache::thrift::CompressionAlgorithm& set_compression(::apache::thrift::CompressionAlgorithm compression_) {
    compression_ref() = compression_;
    return __fbthrift_field_compression;
  }
  const ::apache::thrift::CompressionConfig* get_compressionConfig() const&;
  ::apache::thrift::CompressionConfig* get_compressionConfig() &;
  ::apache::thrift::CompressionConfig* get_compressionConfig() && = delete;

  template <typename T_RequestRpcMetadata_compressionConfig_struct_setter = ::apache::thrift::CompressionConfig>
  [[deprecated("Use `FOO.compressionConfig_ref() = BAR;` instead of `FOO.set_compressionConfig(BAR);`")]]
  ::apache::thrift::CompressionConfig& set_compressionConfig(T_RequestRpcMetadata_compressionConfig_struct_setter&& compressionConfig_) {
    compressionConfig_ref() = std::forward<T_RequestRpcMetadata_compressionConfig_struct_setter>(compressionConfig_);
    return __fbthrift_field_compressionConfig;
  }

  const ::std::int64_t* get_interactionId() const& {
    return interactionId_ref() ? std::addressof(__fbthrift_field_interactionId) : nullptr;
  }

  ::std::int64_t* get_interactionId() & {
    return interactionId_ref() ? std::addressof(__fbthrift_field_interactionId) : nullptr;
  }
  ::std::int64_t* get_interactionId() && = delete;

  [[deprecated("Use `FOO.interactionId_ref() = BAR;` instead of `FOO.set_interactionId(BAR);`")]]
  ::std::int64_t& set_interactionId(::std::int64_t interactionId_) {
    interactionId_ref() = interactionId_;
    return __fbthrift_field_interactionId;
  }
  const ::apache::thrift::InteractionCreate* get_interactionCreate() const&;
  ::apache::thrift::InteractionCreate* get_interactionCreate() &;
  ::apache::thrift::InteractionCreate* get_interactionCreate() && = delete;

  template <typename T_RequestRpcMetadata_interactionCreate_struct_setter = ::apache::thrift::InteractionCreate>
  [[deprecated("Use `FOO.interactionCreate_ref() = BAR;` instead of `FOO.set_interactionCreate(BAR);`")]]
  ::apache::thrift::InteractionCreate& set_interactionCreate(T_RequestRpcMetadata_interactionCreate_struct_setter&& interactionCreate_) {
    interactionCreate_ref() = std::forward<T_RequestRpcMetadata_interactionCreate_struct_setter>(interactionCreate_);
    return __fbthrift_field_interactionCreate;
  }

  const ::std::string* get_clientId() const& {
    return clientId_ref() ? std::addressof(__fbthrift_field_clientId) : nullptr;
  }

  ::std::string* get_clientId() & {
    return clientId_ref() ? std::addressof(__fbthrift_field_clientId) : nullptr;
  }
  ::std::string* get_clientId() && = delete;

  template <typename T_RequestRpcMetadata_clientId_struct_setter = ::std::string>
  [[deprecated("Use `FOO.clientId_ref() = BAR;` instead of `FOO.set_clientId(BAR);`")]]
  ::std::string& set_clientId(T_RequestRpcMetadata_clientId_struct_setter&& clientId_) {
    clientId_ref() = std::forward<T_RequestRpcMetadata_clientId_struct_setter>(clientId_);
    return __fbthrift_field_clientId;
  }

  const ::std::string* get_serviceTraceMeta() const& {
    return serviceTraceMeta_ref() ? std::addressof(__fbthrift_field_serviceTraceMeta) : nullptr;
  }

  ::std::string* get_serviceTraceMeta() & {
    return serviceTraceMeta_ref() ? std::addressof(__fbthrift_field_serviceTraceMeta) : nullptr;
  }
  ::std::string* get_serviceTraceMeta() && = delete;

  template <typename T_RequestRpcMetadata_serviceTraceMeta_struct_setter = ::std::string>
  [[deprecated("Use `FOO.serviceTraceMeta_ref() = BAR;` instead of `FOO.set_serviceTraceMeta(BAR);`")]]
  ::std::string& set_serviceTraceMeta(T_RequestRpcMetadata_serviceTraceMeta_struct_setter&& serviceTraceMeta_) {
    serviceTraceMeta_ref() = std::forward<T_RequestRpcMetadata_serviceTraceMeta_struct_setter>(serviceTraceMeta_);
    return __fbthrift_field_serviceTraceMeta;
  }

  const ::apache::thrift::IOBufPtr* get_frameworkMetadata() const& {
    return frameworkMetadata_ref() ? std::addressof(__fbthrift_field_frameworkMetadata) : nullptr;
  }

  ::apache::thrift::IOBufPtr* get_frameworkMetadata() & {
    return frameworkMetadata_ref() ? std::addressof(__fbthrift_field_frameworkMetadata) : nullptr;
  }
  ::apache::thrift::IOBufPtr* get_frameworkMetadata() && = delete;

  template <typename T_RequestRpcMetadata_frameworkMetadata_struct_setter = ::apache::thrift::IOBufPtr>
  [[deprecated("Use `FOO.frameworkMetadata_ref() = BAR;` instead of `FOO.set_frameworkMetadata(BAR);`")]]
  ::apache::thrift::IOBufPtr& set_frameworkMetadata(T_RequestRpcMetadata_frameworkMetadata_struct_setter&& frameworkMetadata_) {
    frameworkMetadata_ref() = std::forward<T_RequestRpcMetadata_frameworkMetadata_struct_setter>(frameworkMetadata_);
    return __fbthrift_field_frameworkMetadata;
  }
  const ::apache::thrift::LoggingContext* get_loggingContext() const&;
  ::apache::thrift::LoggingContext* get_loggingContext() &;
  ::apache::thrift::LoggingContext* get_loggingContext() && = delete;

  template <typename T_RequestRpcMetadata_loggingContext_struct_setter = ::apache::thrift::LoggingContext>
  [[deprecated("Use `FOO.loggingContext_ref() = BAR;` instead of `FOO.set_loggingContext(BAR);`")]]
  ::apache::thrift::LoggingContext& set_loggingContext(T_RequestRpcMetadata_loggingContext_struct_setter&& loggingContext_) {
    loggingContext_ref() = std::forward<T_RequestRpcMetadata_loggingContext_struct_setter>(loggingContext_);
    return __fbthrift_field_loggingContext;
  }

  const ::std::string* get_tenantId() const& {
    return tenantId_ref() ? std::addressof(__fbthrift_field_tenantId) : nullptr;
  }

  ::std::string* get_tenantId() & {
    return tenantId_ref() ? std::addressof(__fbthrift_field_tenantId) : nullptr;
  }
  ::std::string* get_tenantId() && = delete;

  template <typename T_RequestRpcMetadata_tenantId_struct_setter = ::std::string>
  [[deprecated("Use `FOO.tenantId_ref() = BAR;` instead of `FOO.set_tenantId(BAR);`")]]
  ::std::string& set_tenantId(T_RequestRpcMetadata_tenantId_struct_setter&& tenantId_) {
    tenantId_ref() = std::forward<T_RequestRpcMetadata_tenantId_struct_setter>(tenantId_);
    return __fbthrift_field_tenantId;
  }

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

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


class ErrorClassification 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::kind,
    ::apache::thrift::ident::blame,
    ::apache::thrift::ident::safety
  >;

  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::enum_t<::apache::thrift::ErrorKind>,
    ::apache::thrift::type::enum_t<::apache::thrift::ErrorBlame>,
    ::apache::thrift::type::enum_t<::apache::thrift::ErrorSafety>
  >;

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

 public:
  using __fbthrift_cpp2_type = ErrorClassification;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

  ErrorClassification() :
      __fbthrift_field_kind(),
      __fbthrift_field_blame(),
      __fbthrift_field_safety() {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  ErrorClassification(apache::thrift::FragileConstructor, ::apache::thrift::ErrorKind kind__arg, ::apache::thrift::ErrorBlame blame__arg, ::apache::thrift::ErrorSafety safety__arg);

  ErrorClassification(ErrorClassification&&) = default;

  ErrorClassification(const ErrorClassification&) = default;


  ErrorClassification& operator=(ErrorClassification&&) = default;

  ErrorClassification& operator=(const ErrorClassification&) = default;
 private:
  ::apache::thrift::ErrorKind __fbthrift_field_kind;
 private:
  ::apache::thrift::ErrorBlame __fbthrift_field_blame;
 private:
  ::apache::thrift::ErrorSafety __fbthrift_field_safety;
 private:
  apache::thrift::detail::isset_bitset<3, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

  template <typename..., typename T = ::apache::thrift::ErrorKind>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> kind_ref() const& {
    return {this->__fbthrift_field_kind, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorKind>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> kind_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_kind), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorKind>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> kind_ref() & {
    return {this->__fbthrift_field_kind, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorKind>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> kind_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_kind), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorKind>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> kind() const& {
    return {this->__fbthrift_field_kind, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorKind>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> kind() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_kind), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorKind>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> kind() & {
    return {this->__fbthrift_field_kind, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorKind>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> kind() && {
    return {static_cast<T&&>(this->__fbthrift_field_kind), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorBlame>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> blame_ref() const& {
    return {this->__fbthrift_field_blame, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorBlame>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> blame_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_blame), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorBlame>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> blame_ref() & {
    return {this->__fbthrift_field_blame, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorBlame>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> blame_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_blame), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorBlame>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> blame() const& {
    return {this->__fbthrift_field_blame, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorBlame>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> blame() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_blame), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorBlame>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> blame() & {
    return {this->__fbthrift_field_blame, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorBlame>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> blame() && {
    return {static_cast<T&&>(this->__fbthrift_field_blame), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorSafety>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> safety_ref() const& {
    return {this->__fbthrift_field_safety, __isset.at(2), __isset.bit(2)};
  }

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

  template <typename..., typename T = ::apache::thrift::ErrorSafety>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> safety_ref() & {
    return {this->__fbthrift_field_safety, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorSafety>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> safety_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_safety), __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorSafety>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> safety() const& {
    return {this->__fbthrift_field_safety, __isset.at(2), __isset.bit(2)};
  }

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

  template <typename..., typename T = ::apache::thrift::ErrorSafety>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> safety() & {
    return {this->__fbthrift_field_safety, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorSafety>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> safety() && {
    return {static_cast<T&&>(this->__fbthrift_field_safety), __isset.at(2), __isset.bit(2)};
  }

  const ::apache::thrift::ErrorKind* get_kind() const& {
    return kind_ref() ? std::addressof(__fbthrift_field_kind) : nullptr;
  }

  ::apache::thrift::ErrorKind* get_kind() & {
    return kind_ref() ? std::addressof(__fbthrift_field_kind) : nullptr;
  }
  ::apache::thrift::ErrorKind* get_kind() && = delete;

  [[deprecated("Use `FOO.kind_ref() = BAR;` instead of `FOO.set_kind(BAR);`")]]
  ::apache::thrift::ErrorKind& set_kind(::apache::thrift::ErrorKind kind_) {
    kind_ref() = kind_;
    return __fbthrift_field_kind;
  }

  const ::apache::thrift::ErrorBlame* get_blame() const& {
    return blame_ref() ? std::addressof(__fbthrift_field_blame) : nullptr;
  }

  ::apache::thrift::ErrorBlame* get_blame() & {
    return blame_ref() ? std::addressof(__fbthrift_field_blame) : nullptr;
  }
  ::apache::thrift::ErrorBlame* get_blame() && = delete;

  [[deprecated("Use `FOO.blame_ref() = BAR;` instead of `FOO.set_blame(BAR);`")]]
  ::apache::thrift::ErrorBlame& set_blame(::apache::thrift::ErrorBlame blame_) {
    blame_ref() = blame_;
    return __fbthrift_field_blame;
  }

  const ::apache::thrift::ErrorSafety* get_safety() const& {
    return safety_ref() ? std::addressof(__fbthrift_field_safety) : nullptr;
  }

  ::apache::thrift::ErrorSafety* get_safety() & {
    return safety_ref() ? std::addressof(__fbthrift_field_safety) : nullptr;
  }
  ::apache::thrift::ErrorSafety* get_safety() && = delete;

  [[deprecated("Use `FOO.safety_ref() = BAR;` instead of `FOO.set_safety(BAR);`")]]
  ::apache::thrift::ErrorSafety& set_safety(::apache::thrift::ErrorSafety safety_) {
    safety_ref() = safety_;
    return __fbthrift_field_safety;
  }

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

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


class PayloadResponseMetadata 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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 = PayloadResponseMetadata;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

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

  PayloadResponseMetadata(PayloadResponseMetadata&&) = default;

  PayloadResponseMetadata(const PayloadResponseMetadata&) = default;


  PayloadResponseMetadata& operator=(PayloadResponseMetadata&&) = default;

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

 public:

  bool operator==(const PayloadResponseMetadata&) const;
  bool operator<(const PayloadResponseMetadata&) 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<PayloadResponseMetadata>;
  friend void swap(PayloadResponseMetadata& a, PayloadResponseMetadata& b);
};

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


class PayloadDeclaredExceptionMetadata 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::errorClassification
  >;

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

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


 public:

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

  PayloadDeclaredExceptionMetadata(PayloadDeclaredExceptionMetadata&&) = default;

  PayloadDeclaredExceptionMetadata(const PayloadDeclaredExceptionMetadata&) = default;


  PayloadDeclaredExceptionMetadata& operator=(PayloadDeclaredExceptionMetadata&&) = default;

  PayloadDeclaredExceptionMetadata& operator=(const PayloadDeclaredExceptionMetadata&) = default;
 private:
  ::apache::thrift::ErrorClassification __fbthrift_field_errorClassification;
 private:
  apache::thrift::detail::isset_bitset<1, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

  template <typename..., typename T = ::apache::thrift::ErrorClassification>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> errorClassification_ref() const& {
    return {this->__fbthrift_field_errorClassification, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorClassification>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> errorClassification_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_errorClassification), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorClassification>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> errorClassification_ref() & {
    return {this->__fbthrift_field_errorClassification, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorClassification>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> errorClassification_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_errorClassification), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorClassification>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> errorClassification() const& {
    return {this->__fbthrift_field_errorClassification, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorClassification>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> errorClassification() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_errorClassification), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorClassification>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> errorClassification() & {
    return {this->__fbthrift_field_errorClassification, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorClassification>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> errorClassification() && {
    return {static_cast<T&&>(this->__fbthrift_field_errorClassification), __isset.at(0), __isset.bit(0)};
  }
  const ::apache::thrift::ErrorClassification* get_errorClassification() const&;
  ::apache::thrift::ErrorClassification* get_errorClassification() &;
  ::apache::thrift::ErrorClassification* get_errorClassification() && = delete;

  template <typename T_PayloadDeclaredExceptionMetadata_errorClassification_struct_setter = ::apache::thrift::ErrorClassification>
  [[deprecated("Use `FOO.errorClassification_ref() = BAR;` instead of `FOO.set_errorClassification(BAR);`")]]
  ::apache::thrift::ErrorClassification& set_errorClassification(T_PayloadDeclaredExceptionMetadata_errorClassification_struct_setter&& errorClassification_) {
    errorClassification_ref() = std::forward<T_PayloadDeclaredExceptionMetadata_errorClassification_struct_setter>(errorClassification_);
    return __fbthrift_field_errorClassification;
  }

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

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


class PayloadProxyExceptionMetadata 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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 = PayloadProxyExceptionMetadata;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

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

  PayloadProxyExceptionMetadata(PayloadProxyExceptionMetadata&&) = default;

  PayloadProxyExceptionMetadata(const PayloadProxyExceptionMetadata&) = default;


  PayloadProxyExceptionMetadata& operator=(PayloadProxyExceptionMetadata&&) = default;

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

 public:

  bool operator==(const PayloadProxyExceptionMetadata&) const;
  bool operator<(const PayloadProxyExceptionMetadata&) 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<PayloadProxyExceptionMetadata>;
  friend void swap(PayloadProxyExceptionMetadata& a, PayloadProxyExceptionMetadata& b);
};

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


class PayloadProxiedExceptionMetadata 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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 = PayloadProxiedExceptionMetadata;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

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

  PayloadProxiedExceptionMetadata(PayloadProxiedExceptionMetadata&&) = default;

  PayloadProxiedExceptionMetadata(const PayloadProxiedExceptionMetadata&) = default;


  PayloadProxiedExceptionMetadata& operator=(PayloadProxiedExceptionMetadata&&) = default;

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

 public:

  bool operator==(const PayloadProxiedExceptionMetadata&) const;
  bool operator<(const PayloadProxiedExceptionMetadata&) 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<PayloadProxiedExceptionMetadata>;
  friend void swap(PayloadProxiedExceptionMetadata& a, PayloadProxiedExceptionMetadata& b);
};

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


class PayloadAppUnknownExceptionMetdata 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::errorClassification
  >;

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

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


 public:

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

  PayloadAppUnknownExceptionMetdata(PayloadAppUnknownExceptionMetdata&&) = default;

  PayloadAppUnknownExceptionMetdata(const PayloadAppUnknownExceptionMetdata&) = default;


  PayloadAppUnknownExceptionMetdata& operator=(PayloadAppUnknownExceptionMetdata&&) = default;

  PayloadAppUnknownExceptionMetdata& operator=(const PayloadAppUnknownExceptionMetdata&) = default;
 private:
  ::apache::thrift::ErrorClassification __fbthrift_field_errorClassification;
 private:
  apache::thrift::detail::isset_bitset<1, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

  template <typename..., typename T = ::apache::thrift::ErrorClassification>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> errorClassification_ref() const& {
    return {this->__fbthrift_field_errorClassification, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorClassification>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> errorClassification_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_errorClassification), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorClassification>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> errorClassification_ref() & {
    return {this->__fbthrift_field_errorClassification, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorClassification>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> errorClassification_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_errorClassification), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorClassification>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> errorClassification() const& {
    return {this->__fbthrift_field_errorClassification, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorClassification>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> errorClassification() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_errorClassification), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorClassification>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> errorClassification() & {
    return {this->__fbthrift_field_errorClassification, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::ErrorClassification>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> errorClassification() && {
    return {static_cast<T&&>(this->__fbthrift_field_errorClassification), __isset.at(0), __isset.bit(0)};
  }
  const ::apache::thrift::ErrorClassification* get_errorClassification() const&;
  ::apache::thrift::ErrorClassification* get_errorClassification() &;
  ::apache::thrift::ErrorClassification* get_errorClassification() && = delete;

  template <typename T_PayloadAppUnknownExceptionMetdata_errorClassification_struct_setter = ::apache::thrift::ErrorClassification>
  [[deprecated("Use `FOO.errorClassification_ref() = BAR;` instead of `FOO.set_errorClassification(BAR);`")]]
  ::apache::thrift::ErrorClassification& set_errorClassification(T_PayloadAppUnknownExceptionMetdata_errorClassification_struct_setter&& errorClassification_) {
    errorClassification_ref() = std::forward<T_PayloadAppUnknownExceptionMetdata_errorClassification_struct_setter>(errorClassification_);
    return __fbthrift_field_errorClassification;
  }

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

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


class PayloadAnyExceptionMetadata 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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 = PayloadAnyExceptionMetadata;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

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

  PayloadAnyExceptionMetadata(PayloadAnyExceptionMetadata&&) = default;

  PayloadAnyExceptionMetadata(const PayloadAnyExceptionMetadata&) = default;


  PayloadAnyExceptionMetadata& operator=(PayloadAnyExceptionMetadata&&) = default;

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

 public:

  bool operator==(const PayloadAnyExceptionMetadata&) const;
  bool operator<(const PayloadAnyExceptionMetadata&) 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<PayloadAnyExceptionMetadata>;
  friend void swap(PayloadAnyExceptionMetadata& a, PayloadAnyExceptionMetadata& b);
};

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


class PayloadExceptionMetadata 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::declaredException,
    ::apache::thrift::ident::DEPRECATED_proxyException,
    ::apache::thrift::ident::appUnknownException,
    ::apache::thrift::ident::anyException
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2,6,7};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::struct_t<::apache::thrift::PayloadDeclaredExceptionMetadata>,
    ::apache::thrift::type::struct_t<::apache::thrift::PayloadProxyExceptionMetadata>,
    ::apache::thrift::type::struct_t<::apache::thrift::PayloadAppUnknownExceptionMetdata>,
    ::apache::thrift::type::struct_t<::apache::thrift::PayloadAnyExceptionMetadata>
  >;

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

 public:
  using __fbthrift_cpp2_type = PayloadExceptionMetadata;
  static constexpr bool __fbthrift_cpp2_is_union =
    true;


 public:
  enum Type : int {
    __EMPTY__ = 0,
    declaredException = 1,
    DEPRECATED_proxyException = 2,
    appUnknownException = 6,
    anyException = 7,
  } ;

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

  PayloadExceptionMetadata(PayloadExceptionMetadata&& rhs) noexcept
      : type_(folly::to_underlying(Type::__EMPTY__)) {
    if (this == &rhs) { return; }
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return;
      }
      case Type::declaredException:
      {
        set_declaredException(std::move(rhs.value_.declaredException));
        break;
      }
      case Type::DEPRECATED_proxyException:
      {
        set_DEPRECATED_proxyException(std::move(rhs.value_.DEPRECATED_proxyException));
        break;
      }
      case Type::appUnknownException:
      {
        set_appUnknownException(std::move(rhs.value_.appUnknownException));
        break;
      }
      case Type::anyException:
      {
        set_anyException(std::move(rhs.value_.anyException));
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
    apache::thrift::clear(rhs);
  }

  PayloadExceptionMetadata(const PayloadExceptionMetadata& rhs)
      : type_(folly::to_underlying(Type::__EMPTY__)) {
    if (this == &rhs) { return; }
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return;
      }
      case Type::declaredException:
      {
        set_declaredException(rhs.value_.declaredException);
        break;
      }
      case Type::DEPRECATED_proxyException:
      {
        set_DEPRECATED_proxyException(rhs.value_.DEPRECATED_proxyException);
        break;
      }
      case Type::appUnknownException:
      {
        set_appUnknownException(rhs.value_.appUnknownException);
        break;
      }
      case Type::anyException:
      {
        set_anyException(rhs.value_.anyException);
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
  }

  PayloadExceptionMetadata& operator=(PayloadExceptionMetadata&& rhs) noexcept {
    if (this == &rhs) { return *this; }
    __fbthrift_clear();
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return *this;
      }
      case Type::declaredException:
      {
        set_declaredException(std::move(rhs.value_.declaredException));
        break;
      }
      case Type::DEPRECATED_proxyException:
      {
        set_DEPRECATED_proxyException(std::move(rhs.value_.DEPRECATED_proxyException));
        break;
      }
      case Type::appUnknownException:
      {
        set_appUnknownException(std::move(rhs.value_.appUnknownException));
        break;
      }
      case Type::anyException:
      {
        set_anyException(std::move(rhs.value_.anyException));
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
    apache::thrift::clear(rhs);
    return *this;
  }

  PayloadExceptionMetadata& operator=(const PayloadExceptionMetadata& rhs) {
    if (this == &rhs) { return *this; }
    __fbthrift_clear();
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return *this;
      }
      case Type::declaredException:
      {
        set_declaredException(rhs.value_.declaredException);
        break;
      }
      case Type::DEPRECATED_proxyException:
      {
        set_DEPRECATED_proxyException(rhs.value_.DEPRECATED_proxyException);
        break;
      }
      case Type::appUnknownException:
      {
        set_appUnknownException(rhs.value_.appUnknownException);
        break;
      }
      case Type::anyException:
      {
        set_anyException(rhs.value_.anyException);
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
    return *this;
  }

  ~PayloadExceptionMetadata();

  union storage_type {
    ::apache::thrift::PayloadDeclaredExceptionMetadata declaredException;
    ::apache::thrift::PayloadProxyExceptionMetadata DEPRECATED_proxyException;
    ::apache::thrift::PayloadAppUnknownExceptionMetdata appUnknownException;
    ::apache::thrift::PayloadAnyExceptionMetadata anyException;

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

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

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::PayloadDeclaredExceptionMetadata& set_declaredException(::apache::thrift::PayloadDeclaredExceptionMetadata const &t) {
    using T0 = ::apache::thrift::PayloadDeclaredExceptionMetadata;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::declaredException);
    ::new (std::addressof(value_.declaredException)) T(t);
    return value_.declaredException;
  }

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::PayloadDeclaredExceptionMetadata& set_declaredException(::apache::thrift::PayloadDeclaredExceptionMetadata&& t) {
    using T0 = ::apache::thrift::PayloadDeclaredExceptionMetadata;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::declaredException);
    ::new (std::addressof(value_.declaredException)) T(std::move(t));
    return value_.declaredException;
  }

  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::PayloadDeclaredExceptionMetadata, T...>> ::apache::thrift::PayloadDeclaredExceptionMetadata& set_declaredException(T&&... t) {
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::declaredException);
    ::new (std::addressof(value_.declaredException)) ::apache::thrift::PayloadDeclaredExceptionMetadata(std::forward<T>(t)...);
    return value_.declaredException;
  }

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::PayloadProxyExceptionMetadata& set_DEPRECATED_proxyException(::apache::thrift::PayloadProxyExceptionMetadata const &t) {
    using T0 = ::apache::thrift::PayloadProxyExceptionMetadata;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::DEPRECATED_proxyException);
    ::new (std::addressof(value_.DEPRECATED_proxyException)) T(t);
    return value_.DEPRECATED_proxyException;
  }

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::PayloadProxyExceptionMetadata& set_DEPRECATED_proxyException(::apache::thrift::PayloadProxyExceptionMetadata&& t) {
    using T0 = ::apache::thrift::PayloadProxyExceptionMetadata;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::DEPRECATED_proxyException);
    ::new (std::addressof(value_.DEPRECATED_proxyException)) T(std::move(t));
    return value_.DEPRECATED_proxyException;
  }

  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::PayloadProxyExceptionMetadata, T...>> ::apache::thrift::PayloadProxyExceptionMetadata& set_DEPRECATED_proxyException(T&&... t) {
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::DEPRECATED_proxyException);
    ::new (std::addressof(value_.DEPRECATED_proxyException)) ::apache::thrift::PayloadProxyExceptionMetadata(std::forward<T>(t)...);
    return value_.DEPRECATED_proxyException;
  }

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::PayloadAppUnknownExceptionMetdata& set_appUnknownException(::apache::thrift::PayloadAppUnknownExceptionMetdata const &t) {
    using T0 = ::apache::thrift::PayloadAppUnknownExceptionMetdata;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::appUnknownException);
    ::new (std::addressof(value_.appUnknownException)) T(t);
    return value_.appUnknownException;
  }

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::PayloadAppUnknownExceptionMetdata& set_appUnknownException(::apache::thrift::PayloadAppUnknownExceptionMetdata&& t) {
    using T0 = ::apache::thrift::PayloadAppUnknownExceptionMetdata;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::appUnknownException);
    ::new (std::addressof(value_.appUnknownException)) T(std::move(t));
    return value_.appUnknownException;
  }

  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::PayloadAppUnknownExceptionMetdata, T...>> ::apache::thrift::PayloadAppUnknownExceptionMetdata& set_appUnknownException(T&&... t) {
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::appUnknownException);
    ::new (std::addressof(value_.appUnknownException)) ::apache::thrift::PayloadAppUnknownExceptionMetdata(std::forward<T>(t)...);
    return value_.appUnknownException;
  }

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::PayloadAnyExceptionMetadata& set_anyException(::apache::thrift::PayloadAnyExceptionMetadata const &t) {
    using T0 = ::apache::thrift::PayloadAnyExceptionMetadata;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::anyException);
    ::new (std::addressof(value_.anyException)) T(t);
    return value_.anyException;
  }

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::PayloadAnyExceptionMetadata& set_anyException(::apache::thrift::PayloadAnyExceptionMetadata&& t) {
    using T0 = ::apache::thrift::PayloadAnyExceptionMetadata;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::anyException);
    ::new (std::addressof(value_.anyException)) T(std::move(t));
    return value_.anyException;
  }

  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::PayloadAnyExceptionMetadata, T...>> ::apache::thrift::PayloadAnyExceptionMetadata& set_anyException(T&&... t) {
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::anyException);
    ::new (std::addressof(value_.anyException)) ::apache::thrift::PayloadAnyExceptionMetadata(std::forward<T>(t)...);
    return value_.anyException;
  }

  ::apache::thrift::PayloadDeclaredExceptionMetadata const& get_declaredException() const {
    if (getType() != Type::declaredException) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.declaredException;
  }

  ::apache::thrift::PayloadProxyExceptionMetadata const& get_DEPRECATED_proxyException() const {
    if (getType() != Type::DEPRECATED_proxyException) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.DEPRECATED_proxyException;
  }

  ::apache::thrift::PayloadAppUnknownExceptionMetdata const& get_appUnknownException() const {
    if (getType() != Type::appUnknownException) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.appUnknownException;
  }

  ::apache::thrift::PayloadAnyExceptionMetadata const& get_anyException() const {
    if (getType() != Type::anyException) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.anyException;
  }

  ::apache::thrift::PayloadDeclaredExceptionMetadata& mutable_declaredException() {
    assert(getType() == Type::declaredException);
    return value_.declaredException;
  }

  ::apache::thrift::PayloadProxyExceptionMetadata& mutable_DEPRECATED_proxyException() {
    assert(getType() == Type::DEPRECATED_proxyException);
    return value_.DEPRECATED_proxyException;
  }

  ::apache::thrift::PayloadAppUnknownExceptionMetdata& mutable_appUnknownException() {
    assert(getType() == Type::appUnknownException);
    return value_.appUnknownException;
  }

  ::apache::thrift::PayloadAnyExceptionMetadata& mutable_anyException() {
    assert(getType() == Type::anyException);
    return value_.anyException;
  }

  ::apache::thrift::PayloadDeclaredExceptionMetadata move_declaredException() {
    assert(getType() == Type::declaredException);
    return std::move(value_.declaredException);
  }

  ::apache::thrift::PayloadProxyExceptionMetadata move_DEPRECATED_proxyException() {
    assert(getType() == Type::DEPRECATED_proxyException);
    return std::move(value_.DEPRECATED_proxyException);
  }

  ::apache::thrift::PayloadAppUnknownExceptionMetdata move_appUnknownException() {
    assert(getType() == Type::appUnknownException);
    return std::move(value_.appUnknownException);
  }

  ::apache::thrift::PayloadAnyExceptionMetadata move_anyException() {
    assert(getType() == Type::anyException);
    return std::move(value_.anyException);
  }

  template <typename..., typename T = ::apache::thrift::PayloadDeclaredExceptionMetadata>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> declaredException_ref() const& {
    return {value_.declaredException, type_, folly::to_underlying(Type::declaredException), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::PayloadDeclaredExceptionMetadata>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> declaredException_ref() const&& {
    return {std::move(value_.declaredException), type_, folly::to_underlying(Type::declaredException), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::PayloadDeclaredExceptionMetadata>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> declaredException_ref() & {
    return {value_.declaredException, type_, folly::to_underlying(Type::declaredException), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::PayloadDeclaredExceptionMetadata>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> declaredException_ref() && {
    return {std::move(value_.declaredException), type_, folly::to_underlying(Type::declaredException), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  template <typename..., typename T = ::apache::thrift::PayloadProxyExceptionMetadata>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> DEPRECATED_proxyException_ref() const& {
    return {value_.DEPRECATED_proxyException, type_, folly::to_underlying(Type::DEPRECATED_proxyException), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::PayloadProxyExceptionMetadata>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> DEPRECATED_proxyException_ref() const&& {
    return {std::move(value_.DEPRECATED_proxyException), type_, folly::to_underlying(Type::DEPRECATED_proxyException), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::PayloadProxyExceptionMetadata>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> DEPRECATED_proxyException_ref() & {
    return {value_.DEPRECATED_proxyException, type_, folly::to_underlying(Type::DEPRECATED_proxyException), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::PayloadProxyExceptionMetadata>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> DEPRECATED_proxyException_ref() && {
    return {std::move(value_.DEPRECATED_proxyException), type_, folly::to_underlying(Type::DEPRECATED_proxyException), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  template <typename..., typename T = ::apache::thrift::PayloadAppUnknownExceptionMetdata>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> appUnknownException_ref() const& {
    return {value_.appUnknownException, type_, folly::to_underlying(Type::appUnknownException), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::PayloadAppUnknownExceptionMetdata>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> appUnknownException_ref() const&& {
    return {std::move(value_.appUnknownException), type_, folly::to_underlying(Type::appUnknownException), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::PayloadAppUnknownExceptionMetdata>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> appUnknownException_ref() & {
    return {value_.appUnknownException, type_, folly::to_underlying(Type::appUnknownException), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::PayloadAppUnknownExceptionMetdata>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> appUnknownException_ref() && {
    return {std::move(value_.appUnknownException), type_, folly::to_underlying(Type::appUnknownException), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  template <typename..., typename T = ::apache::thrift::PayloadAnyExceptionMetadata>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> anyException_ref() const& {
    return {value_.anyException, type_, folly::to_underlying(Type::anyException), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::PayloadAnyExceptionMetadata>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> anyException_ref() const&& {
    return {std::move(value_.anyException), type_, folly::to_underlying(Type::anyException), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::PayloadAnyExceptionMetadata>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> anyException_ref() & {
    return {value_.anyException, type_, folly::to_underlying(Type::anyException), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::PayloadAnyExceptionMetadata>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> anyException_ref() && {
    return {std::move(value_.anyException), type_, folly::to_underlying(Type::anyException), 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<PayloadExceptionMetadata>;
  friend void swap(PayloadExceptionMetadata& a, PayloadExceptionMetadata& b);
};

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


class PayloadExceptionMetadataBase 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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_utf8,
    ::apache::thrift::ident::what_utf8,
    ::apache::thrift::ident::metadata
  >;

  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::string_t,
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::union_t<::apache::thrift::PayloadExceptionMetadata>
  >;

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

 public:
  using __fbthrift_cpp2_type = PayloadExceptionMetadataBase;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

  PayloadExceptionMetadataBase();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  PayloadExceptionMetadataBase(apache::thrift::FragileConstructor, ::std::string name_utf8__arg, ::std::string what_utf8__arg, ::apache::thrift::PayloadExceptionMetadata metadata__arg);

  PayloadExceptionMetadataBase(PayloadExceptionMetadataBase&&) noexcept;

  PayloadExceptionMetadataBase(const PayloadExceptionMetadataBase& src);


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

  ~PayloadExceptionMetadataBase();

 private:
  ::std::string __fbthrift_field_name_utf8;
 private:
  ::std::string __fbthrift_field_what_utf8;
 private:
  ::apache::thrift::PayloadExceptionMetadata __fbthrift_field_metadata;
 private:
  apache::thrift::detail::isset_bitset<3, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  template <typename..., typename T = ::apache::thrift::PayloadExceptionMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> metadata_ref() const& {
    return {this->__fbthrift_field_metadata, __isset.at(2), __isset.bit(2)};
  }

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

  template <typename..., typename T = ::apache::thrift::PayloadExceptionMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> metadata_ref() & {
    return {this->__fbthrift_field_metadata, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::apache::thrift::PayloadExceptionMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> metadata_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_metadata), __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::apache::thrift::PayloadExceptionMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> metadata() const& {
    return {this->__fbthrift_field_metadata, __isset.at(2), __isset.bit(2)};
  }

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

  template <typename..., typename T = ::apache::thrift::PayloadExceptionMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> metadata() & {
    return {this->__fbthrift_field_metadata, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::apache::thrift::PayloadExceptionMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> metadata() && {
    return {static_cast<T&&>(this->__fbthrift_field_metadata), __isset.at(2), __isset.bit(2)};
  }

  const ::std::string* get_name_utf8() const& {
    return name_utf8_ref() ? std::addressof(__fbthrift_field_name_utf8) : nullptr;
  }

  ::std::string* get_name_utf8() & {
    return name_utf8_ref() ? std::addressof(__fbthrift_field_name_utf8) : nullptr;
  }
  ::std::string* get_name_utf8() && = delete;

  template <typename T_PayloadExceptionMetadataBase_name_utf8_struct_setter = ::std::string>
  [[deprecated("Use `FOO.name_utf8_ref() = BAR;` instead of `FOO.set_name_utf8(BAR);`")]]
  ::std::string& set_name_utf8(T_PayloadExceptionMetadataBase_name_utf8_struct_setter&& name_utf8_) {
    name_utf8_ref() = std::forward<T_PayloadExceptionMetadataBase_name_utf8_struct_setter>(name_utf8_);
    return __fbthrift_field_name_utf8;
  }

  const ::std::string* get_what_utf8() const& {
    return what_utf8_ref() ? std::addressof(__fbthrift_field_what_utf8) : nullptr;
  }

  ::std::string* get_what_utf8() & {
    return what_utf8_ref() ? std::addressof(__fbthrift_field_what_utf8) : nullptr;
  }
  ::std::string* get_what_utf8() && = delete;

  template <typename T_PayloadExceptionMetadataBase_what_utf8_struct_setter = ::std::string>
  [[deprecated("Use `FOO.what_utf8_ref() = BAR;` instead of `FOO.set_what_utf8(BAR);`")]]
  ::std::string& set_what_utf8(T_PayloadExceptionMetadataBase_what_utf8_struct_setter&& what_utf8_) {
    what_utf8_ref() = std::forward<T_PayloadExceptionMetadataBase_what_utf8_struct_setter>(what_utf8_);
    return __fbthrift_field_what_utf8;
  }
  const ::apache::thrift::PayloadExceptionMetadata* get_metadata() const&;
  ::apache::thrift::PayloadExceptionMetadata* get_metadata() &;
  ::apache::thrift::PayloadExceptionMetadata* get_metadata() && = delete;

  template <typename T_PayloadExceptionMetadataBase_metadata_struct_setter = ::apache::thrift::PayloadExceptionMetadata>
  [[deprecated("Use `FOO.metadata_ref() = BAR;` instead of `FOO.set_metadata(BAR);`")]]
  ::apache::thrift::PayloadExceptionMetadata& set_metadata(T_PayloadExceptionMetadataBase_metadata_struct_setter&& metadata_) {
    metadata_ref() = std::forward<T_PayloadExceptionMetadataBase_metadata_struct_setter>(metadata_);
    return __fbthrift_field_metadata;
  }

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

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


class PayloadMetadata 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::responseMetadata,
    ::apache::thrift::ident::exceptionMetadata
  >;

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

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

 public:
  using __fbthrift_cpp2_type = PayloadMetadata;
  static constexpr bool __fbthrift_cpp2_is_union =
    true;


 public:
  enum Type : int {
    __EMPTY__ = 0,
    responseMetadata = 1,
    exceptionMetadata = 2,
  } ;

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

  PayloadMetadata(PayloadMetadata&& rhs) noexcept
      : type_(folly::to_underlying(Type::__EMPTY__)) {
    if (this == &rhs) { return; }
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return;
      }
      case Type::responseMetadata:
      {
        set_responseMetadata(std::move(rhs.value_.responseMetadata));
        break;
      }
      case Type::exceptionMetadata:
      {
        set_exceptionMetadata(std::move(rhs.value_.exceptionMetadata));
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
    apache::thrift::clear(rhs);
  }

  PayloadMetadata(const PayloadMetadata& rhs)
      : type_(folly::to_underlying(Type::__EMPTY__)) {
    if (this == &rhs) { return; }
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return;
      }
      case Type::responseMetadata:
      {
        set_responseMetadata(rhs.value_.responseMetadata);
        break;
      }
      case Type::exceptionMetadata:
      {
        set_exceptionMetadata(rhs.value_.exceptionMetadata);
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
  }

  PayloadMetadata& operator=(PayloadMetadata&& rhs) noexcept {
    if (this == &rhs) { return *this; }
    __fbthrift_clear();
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return *this;
      }
      case Type::responseMetadata:
      {
        set_responseMetadata(std::move(rhs.value_.responseMetadata));
        break;
      }
      case Type::exceptionMetadata:
      {
        set_exceptionMetadata(std::move(rhs.value_.exceptionMetadata));
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
    apache::thrift::clear(rhs);
    return *this;
  }

  PayloadMetadata& operator=(const PayloadMetadata& rhs) {
    if (this == &rhs) { return *this; }
    __fbthrift_clear();
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return *this;
      }
      case Type::responseMetadata:
      {
        set_responseMetadata(rhs.value_.responseMetadata);
        break;
      }
      case Type::exceptionMetadata:
      {
        set_exceptionMetadata(rhs.value_.exceptionMetadata);
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
    return *this;
  }

  ~PayloadMetadata();

  union storage_type {
    ::apache::thrift::PayloadResponseMetadata responseMetadata;
    ::apache::thrift::PayloadExceptionMetadataBase exceptionMetadata;

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

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

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::PayloadResponseMetadata& set_responseMetadata(::apache::thrift::PayloadResponseMetadata const &t) {
    using T0 = ::apache::thrift::PayloadResponseMetadata;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::responseMetadata);
    ::new (std::addressof(value_.responseMetadata)) T(t);
    return value_.responseMetadata;
  }

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::PayloadResponseMetadata& set_responseMetadata(::apache::thrift::PayloadResponseMetadata&& t) {
    using T0 = ::apache::thrift::PayloadResponseMetadata;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::responseMetadata);
    ::new (std::addressof(value_.responseMetadata)) T(std::move(t));
    return value_.responseMetadata;
  }

  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::PayloadResponseMetadata, T...>> ::apache::thrift::PayloadResponseMetadata& set_responseMetadata(T&&... t) {
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::responseMetadata);
    ::new (std::addressof(value_.responseMetadata)) ::apache::thrift::PayloadResponseMetadata(std::forward<T>(t)...);
    return value_.responseMetadata;
  }

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::PayloadExceptionMetadataBase& set_exceptionMetadata(::apache::thrift::PayloadExceptionMetadataBase const &t) {
    using T0 = ::apache::thrift::PayloadExceptionMetadataBase;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::exceptionMetadata);
    ::new (std::addressof(value_.exceptionMetadata)) T(t);
    return value_.exceptionMetadata;
  }

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::PayloadExceptionMetadataBase& set_exceptionMetadata(::apache::thrift::PayloadExceptionMetadataBase&& t) {
    using T0 = ::apache::thrift::PayloadExceptionMetadataBase;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::exceptionMetadata);
    ::new (std::addressof(value_.exceptionMetadata)) T(std::move(t));
    return value_.exceptionMetadata;
  }

  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::PayloadExceptionMetadataBase, T...>> ::apache::thrift::PayloadExceptionMetadataBase& set_exceptionMetadata(T&&... t) {
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::exceptionMetadata);
    ::new (std::addressof(value_.exceptionMetadata)) ::apache::thrift::PayloadExceptionMetadataBase(std::forward<T>(t)...);
    return value_.exceptionMetadata;
  }

  ::apache::thrift::PayloadResponseMetadata const& get_responseMetadata() const {
    if (getType() != Type::responseMetadata) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.responseMetadata;
  }

  ::apache::thrift::PayloadExceptionMetadataBase const& get_exceptionMetadata() const {
    if (getType() != Type::exceptionMetadata) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.exceptionMetadata;
  }

  ::apache::thrift::PayloadResponseMetadata& mutable_responseMetadata() {
    assert(getType() == Type::responseMetadata);
    return value_.responseMetadata;
  }

  ::apache::thrift::PayloadExceptionMetadataBase& mutable_exceptionMetadata() {
    assert(getType() == Type::exceptionMetadata);
    return value_.exceptionMetadata;
  }

  ::apache::thrift::PayloadResponseMetadata move_responseMetadata() {
    assert(getType() == Type::responseMetadata);
    return std::move(value_.responseMetadata);
  }

  ::apache::thrift::PayloadExceptionMetadataBase move_exceptionMetadata() {
    assert(getType() == Type::exceptionMetadata);
    return std::move(value_.exceptionMetadata);
  }

  template <typename..., typename T = ::apache::thrift::PayloadResponseMetadata>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> responseMetadata_ref() const& {
    return {value_.responseMetadata, type_, folly::to_underlying(Type::responseMetadata), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::PayloadResponseMetadata>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> responseMetadata_ref() const&& {
    return {std::move(value_.responseMetadata), type_, folly::to_underlying(Type::responseMetadata), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::PayloadResponseMetadata>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> responseMetadata_ref() & {
    return {value_.responseMetadata, type_, folly::to_underlying(Type::responseMetadata), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::PayloadResponseMetadata>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> responseMetadata_ref() && {
    return {std::move(value_.responseMetadata), type_, folly::to_underlying(Type::responseMetadata), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  template <typename..., typename T = ::apache::thrift::PayloadExceptionMetadataBase>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> exceptionMetadata_ref() const& {
    return {value_.exceptionMetadata, type_, folly::to_underlying(Type::exceptionMetadata), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::PayloadExceptionMetadataBase>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> exceptionMetadata_ref() const&& {
    return {std::move(value_.exceptionMetadata), type_, folly::to_underlying(Type::exceptionMetadata), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::PayloadExceptionMetadataBase>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> exceptionMetadata_ref() & {
    return {value_.exceptionMetadata, type_, folly::to_underlying(Type::exceptionMetadata), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::PayloadExceptionMetadataBase>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> exceptionMetadata_ref() && {
    return {std::move(value_.exceptionMetadata), type_, folly::to_underlying(Type::exceptionMetadata), 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<PayloadMetadata>;
  friend void swap(PayloadMetadata& a, PayloadMetadata& b);
};

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


class ProxiedPayloadMetadata 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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 = ProxiedPayloadMetadata;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

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

  ProxiedPayloadMetadata(ProxiedPayloadMetadata&&) = default;

  ProxiedPayloadMetadata(const ProxiedPayloadMetadata&) = default;


  ProxiedPayloadMetadata& operator=(ProxiedPayloadMetadata&&) = default;

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

 public:

  bool operator==(const ProxiedPayloadMetadata&) const;
  bool operator<(const ProxiedPayloadMetadata&) 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<ProxiedPayloadMetadata>;
  friend void swap(ProxiedPayloadMetadata& a, ProxiedPayloadMetadata& b);
};

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


class QueueMetadata 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::queueingTimeMs,
    ::apache::thrift::ident::queueTimeoutMs
  >;

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


 public:

  QueueMetadata() :
      __fbthrift_field_queueingTimeMs(),
      __fbthrift_field_queueTimeoutMs() {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  QueueMetadata(apache::thrift::FragileConstructor, ::std::int32_t queueingTimeMs__arg, ::std::int32_t queueTimeoutMs__arg);

  QueueMetadata(QueueMetadata&&) = default;

  QueueMetadata(const QueueMetadata&) = default;


  QueueMetadata& operator=(QueueMetadata&&) = default;

  QueueMetadata& operator=(const QueueMetadata&) = default;
 private:
  ::std::int32_t __fbthrift_field_queueingTimeMs;
 private:
  ::std::int32_t __fbthrift_field_queueTimeoutMs;
 private:
  apache::thrift::detail::isset_bitset<2, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

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

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

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

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

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

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

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

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

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> queueTimeoutMs_ref() const& {
    return {this->__fbthrift_field_queueTimeoutMs, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> queueTimeoutMs_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_queueTimeoutMs), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> queueTimeoutMs_ref() & {
    return {this->__fbthrift_field_queueTimeoutMs, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> queueTimeoutMs_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_queueTimeoutMs), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> queueTimeoutMs() const& {
    return {this->__fbthrift_field_queueTimeoutMs, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> queueTimeoutMs() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_queueTimeoutMs), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> queueTimeoutMs() & {
    return {this->__fbthrift_field_queueTimeoutMs, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> queueTimeoutMs() && {
    return {static_cast<T&&>(this->__fbthrift_field_queueTimeoutMs), __isset.at(1), __isset.bit(1)};
  }

  ::std::int32_t get_queueingTimeMs() const {
    return __fbthrift_field_queueingTimeMs;
  }

  [[deprecated("Use `FOO.queueingTimeMs_ref() = BAR;` instead of `FOO.set_queueingTimeMs(BAR);`")]]
  ::std::int32_t& set_queueingTimeMs(::std::int32_t queueingTimeMs_) {
    queueingTimeMs_ref() = queueingTimeMs_;
    return __fbthrift_field_queueingTimeMs;
  }

  const ::std::int32_t* get_queueTimeoutMs() const& {
    return queueTimeoutMs_ref() ? std::addressof(__fbthrift_field_queueTimeoutMs) : nullptr;
  }

  ::std::int32_t* get_queueTimeoutMs() & {
    return queueTimeoutMs_ref() ? std::addressof(__fbthrift_field_queueTimeoutMs) : nullptr;
  }
  ::std::int32_t* get_queueTimeoutMs() && = delete;

  [[deprecated("Use `FOO.queueTimeoutMs_ref() = BAR;` instead of `FOO.set_queueTimeoutMs(BAR);`")]]
  ::std::int32_t& set_queueTimeoutMs(::std::int32_t queueTimeoutMs_) {
    queueTimeoutMs_ref() = queueTimeoutMs_;
    return __fbthrift_field_queueTimeoutMs;
  }

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

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


class ResponseRpcMetadata 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::otherMetadata,
    ::apache::thrift::ident::load,
    ::apache::thrift::ident::crc32c,
    ::apache::thrift::ident::compression,
    ::apache::thrift::ident::payloadMetadata,
    ::apache::thrift::ident::proxiedPayloadMetadata,
    ::apache::thrift::ident::streamId,
    ::apache::thrift::ident::queueMetadata,
    ::apache::thrift::ident::fdMetadata,
    ::apache::thrift::ident::frameworkMetadata
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,3,4,5,6,7,8,9,10,12,13};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::cpp_type<folly::F14NodeMap<::std::string, ::std::string>, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::string_t>>,
    ::apache::thrift::type::i64_t,
    ::apache::thrift::type::cpp_type<std::uint32_t, ::apache::thrift::type::i32_t>,
    ::apache::thrift::type::enum_t<::apache::thrift::CompressionAlgorithm>,
    ::apache::thrift::type::union_t<::apache::thrift::PayloadMetadata>,
    ::apache::thrift::type::struct_t<::apache::thrift::ProxiedPayloadMetadata>,
    ::apache::thrift::type::i32_t,
    ::apache::thrift::type::struct_t<::apache::thrift::QueueMetadata>,
    ::apache::thrift::type::struct_t<::apache::thrift::FdMetadata>,
    ::apache::thrift::type::cpp_type<std::unique_ptr<folly::IOBuf>, ::apache::thrift::type::binary_t>
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 10;

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


 public:

  ResponseRpcMetadata();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  ResponseRpcMetadata(apache::thrift::FragileConstructor, folly::F14NodeMap<::std::string, ::std::string> otherMetadata__arg, ::std::int64_t load__arg, std::uint32_t crc32c__arg, ::apache::thrift::CompressionAlgorithm compression__arg, ::apache::thrift::PayloadMetadata payloadMetadata__arg, ::apache::thrift::ProxiedPayloadMetadata proxiedPayloadMetadata__arg, ::std::int32_t streamId__arg, ::apache::thrift::QueueMetadata queueMetadata__arg, ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata> fdMetadata__arg, ::apache::thrift::IOBufPtr frameworkMetadata__arg);

  ResponseRpcMetadata(ResponseRpcMetadata&&) noexcept;
  ResponseRpcMetadata(const ResponseRpcMetadata& src);


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

  ~ResponseRpcMetadata();

 private:
  folly::F14NodeMap<::std::string, ::std::string> __fbthrift_field_otherMetadata;
 private:
  ::std::int64_t __fbthrift_field_load;
 private:
  std::uint32_t __fbthrift_field_crc32c;
 private:
  ::apache::thrift::CompressionAlgorithm __fbthrift_field_compression;
 private:
  ::apache::thrift::PayloadMetadata __fbthrift_field_payloadMetadata;
 private:
  ::apache::thrift::ProxiedPayloadMetadata __fbthrift_field_proxiedPayloadMetadata;
 private:
  ::std::int32_t __fbthrift_field_streamId;
 private:
  ::apache::thrift::QueueMetadata __fbthrift_field_queueMetadata;
 private:
  ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata> __fbthrift_field_fdMetadata;
 private:
  ::apache::thrift::IOBufPtr __fbthrift_field_frameworkMetadata;
 private:
  apache::thrift::detail::isset_bitset<9, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> otherMetadata_ref() const& {
    return {this->__fbthrift_field_otherMetadata, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> otherMetadata_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_otherMetadata), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> otherMetadata_ref() & {
    return {this->__fbthrift_field_otherMetadata, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> otherMetadata_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_otherMetadata), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> otherMetadata() const& {
    return {this->__fbthrift_field_otherMetadata, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> otherMetadata() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_otherMetadata), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> otherMetadata() & {
    return {this->__fbthrift_field_otherMetadata, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> otherMetadata() && {
    return {static_cast<T&&>(this->__fbthrift_field_otherMetadata), __isset.at(0), __isset.bit(0)};
  }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> compression_ref() const& {
    return {this->__fbthrift_field_compression, __isset.at(3), __isset.bit(3)};
  }

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

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> compression_ref() & {
    return {this->__fbthrift_field_compression, __isset.at(3), __isset.bit(3)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> compression_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_compression), __isset.at(3), __isset.bit(3)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> compression() const& {
    return {this->__fbthrift_field_compression, __isset.at(3), __isset.bit(3)};
  }

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

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> compression() & {
    return {this->__fbthrift_field_compression, __isset.at(3), __isset.bit(3)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> compression() && {
    return {static_cast<T&&>(this->__fbthrift_field_compression), __isset.at(3), __isset.bit(3)};
  }

  template <typename..., typename T = ::apache::thrift::PayloadMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> payloadMetadata_ref() const& {
    return {this->__fbthrift_field_payloadMetadata, __isset.at(4), __isset.bit(4)};
  }

  template <typename..., typename T = ::apache::thrift::PayloadMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> payloadMetadata_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_payloadMetadata), __isset.at(4), __isset.bit(4)};
  }

  template <typename..., typename T = ::apache::thrift::PayloadMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> payloadMetadata_ref() & {
    return {this->__fbthrift_field_payloadMetadata, __isset.at(4), __isset.bit(4)};
  }

  template <typename..., typename T = ::apache::thrift::PayloadMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> payloadMetadata_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_payloadMetadata), __isset.at(4), __isset.bit(4)};
  }

  template <typename..., typename T = ::apache::thrift::PayloadMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> payloadMetadata() const& {
    return {this->__fbthrift_field_payloadMetadata, __isset.at(4), __isset.bit(4)};
  }

  template <typename..., typename T = ::apache::thrift::PayloadMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> payloadMetadata() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_payloadMetadata), __isset.at(4), __isset.bit(4)};
  }

  template <typename..., typename T = ::apache::thrift::PayloadMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> payloadMetadata() & {
    return {this->__fbthrift_field_payloadMetadata, __isset.at(4), __isset.bit(4)};
  }

  template <typename..., typename T = ::apache::thrift::PayloadMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> payloadMetadata() && {
    return {static_cast<T&&>(this->__fbthrift_field_payloadMetadata), __isset.at(4), __isset.bit(4)};
  }

  template <typename..., typename T = ::apache::thrift::ProxiedPayloadMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> proxiedPayloadMetadata_ref() const& {
    return {this->__fbthrift_field_proxiedPayloadMetadata, __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = ::apache::thrift::ProxiedPayloadMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> proxiedPayloadMetadata_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_proxiedPayloadMetadata), __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = ::apache::thrift::ProxiedPayloadMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> proxiedPayloadMetadata_ref() & {
    return {this->__fbthrift_field_proxiedPayloadMetadata, __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = ::apache::thrift::ProxiedPayloadMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> proxiedPayloadMetadata_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_proxiedPayloadMetadata), __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = ::apache::thrift::ProxiedPayloadMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> proxiedPayloadMetadata() const& {
    return {this->__fbthrift_field_proxiedPayloadMetadata, __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = ::apache::thrift::ProxiedPayloadMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> proxiedPayloadMetadata() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_proxiedPayloadMetadata), __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = ::apache::thrift::ProxiedPayloadMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> proxiedPayloadMetadata() & {
    return {this->__fbthrift_field_proxiedPayloadMetadata, __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = ::apache::thrift::ProxiedPayloadMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> proxiedPayloadMetadata() && {
    return {static_cast<T&&>(this->__fbthrift_field_proxiedPayloadMetadata), __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> streamId_ref() const& {
    return {this->__fbthrift_field_streamId, __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> streamId_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_streamId), __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> streamId_ref() & {
    return {this->__fbthrift_field_streamId, __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> streamId_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_streamId), __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> streamId() const& {
    return {this->__fbthrift_field_streamId, __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> streamId() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_streamId), __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> streamId() & {
    return {this->__fbthrift_field_streamId, __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> streamId() && {
    return {static_cast<T&&>(this->__fbthrift_field_streamId), __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = ::apache::thrift::QueueMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> queueMetadata_ref() const& {
    return {this->__fbthrift_field_queueMetadata, __isset.at(7), __isset.bit(7)};
  }

  template <typename..., typename T = ::apache::thrift::QueueMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> queueMetadata_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_queueMetadata), __isset.at(7), __isset.bit(7)};
  }

  template <typename..., typename T = ::apache::thrift::QueueMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> queueMetadata_ref() & {
    return {this->__fbthrift_field_queueMetadata, __isset.at(7), __isset.bit(7)};
  }

  template <typename..., typename T = ::apache::thrift::QueueMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> queueMetadata_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_queueMetadata), __isset.at(7), __isset.bit(7)};
  }

  template <typename..., typename T = ::apache::thrift::QueueMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> queueMetadata() const& {
    return {this->__fbthrift_field_queueMetadata, __isset.at(7), __isset.bit(7)};
  }

  template <typename..., typename T = ::apache::thrift::QueueMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> queueMetadata() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_queueMetadata), __isset.at(7), __isset.bit(7)};
  }

  template <typename..., typename T = ::apache::thrift::QueueMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> queueMetadata() & {
    return {this->__fbthrift_field_queueMetadata, __isset.at(7), __isset.bit(7)};
  }

  template <typename..., typename T = ::apache::thrift::QueueMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> queueMetadata() && {
    return {static_cast<T&&>(this->__fbthrift_field_queueMetadata), __isset.at(7), __isset.bit(7)};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<const T&> fdMetadata_ref() const& {
    return ::apache::thrift::optional_boxed_field_ref<const T&>{this->__fbthrift_field_fdMetadata};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<const T&&> fdMetadata_ref() const&& {
    return ::apache::thrift::optional_boxed_field_ref<const T&&>{static_cast<const T&&>(this->__fbthrift_field_fdMetadata)};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<T&> fdMetadata_ref() & {
    return ::apache::thrift::optional_boxed_field_ref<T&>{this->__fbthrift_field_fdMetadata};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<T&&> fdMetadata_ref() && {
    return ::apache::thrift::optional_boxed_field_ref<T&&>{static_cast<T&&>(this->__fbthrift_field_fdMetadata)};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<const T&> fdMetadata() const& {
    return ::apache::thrift::optional_boxed_field_ref<const T&>{this->__fbthrift_field_fdMetadata};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<const T&&> fdMetadata() const&& {
    return ::apache::thrift::optional_boxed_field_ref<const T&&>{static_cast<const T&&>(this->__fbthrift_field_fdMetadata)};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<T&> fdMetadata() & {
    return ::apache::thrift::optional_boxed_field_ref<T&>{this->__fbthrift_field_fdMetadata};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<T&&> fdMetadata() && {
    return ::apache::thrift::optional_boxed_field_ref<T&&>{static_cast<T&&>(this->__fbthrift_field_fdMetadata)};
  }

  template <typename..., typename T = ::apache::thrift::IOBufPtr>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> frameworkMetadata_ref() const& {
    return {this->__fbthrift_field_frameworkMetadata, __isset.at(8), __isset.bit(8)};
  }

  template <typename..., typename T = ::apache::thrift::IOBufPtr>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> frameworkMetadata_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_frameworkMetadata), __isset.at(8), __isset.bit(8)};
  }

  template <typename..., typename T = ::apache::thrift::IOBufPtr>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> frameworkMetadata_ref() & {
    return {this->__fbthrift_field_frameworkMetadata, __isset.at(8), __isset.bit(8)};
  }

  template <typename..., typename T = ::apache::thrift::IOBufPtr>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> frameworkMetadata_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_frameworkMetadata), __isset.at(8), __isset.bit(8)};
  }

  template <typename..., typename T = ::apache::thrift::IOBufPtr>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> frameworkMetadata() const& {
    return {this->__fbthrift_field_frameworkMetadata, __isset.at(8), __isset.bit(8)};
  }

  template <typename..., typename T = ::apache::thrift::IOBufPtr>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> frameworkMetadata() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_frameworkMetadata), __isset.at(8), __isset.bit(8)};
  }

  template <typename..., typename T = ::apache::thrift::IOBufPtr>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> frameworkMetadata() & {
    return {this->__fbthrift_field_frameworkMetadata, __isset.at(8), __isset.bit(8)};
  }

  template <typename..., typename T = ::apache::thrift::IOBufPtr>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> frameworkMetadata() && {
    return {static_cast<T&&>(this->__fbthrift_field_frameworkMetadata), __isset.at(8), __isset.bit(8)};
  }
  const folly::F14NodeMap<::std::string, ::std::string>* get_otherMetadata() const&;
  folly::F14NodeMap<::std::string, ::std::string>* get_otherMetadata() &;
  folly::F14NodeMap<::std::string, ::std::string>* get_otherMetadata() && = delete;

  template <typename T_ResponseRpcMetadata_otherMetadata_struct_setter = folly::F14NodeMap<::std::string, ::std::string>>
  [[deprecated("Use `FOO.otherMetadata_ref() = BAR;` instead of `FOO.set_otherMetadata(BAR);`")]]
  folly::F14NodeMap<::std::string, ::std::string>& set_otherMetadata(T_ResponseRpcMetadata_otherMetadata_struct_setter&& otherMetadata_) {
    otherMetadata_ref() = std::forward<T_ResponseRpcMetadata_otherMetadata_struct_setter>(otherMetadata_);
    return __fbthrift_field_otherMetadata;
  }

  const ::std::int64_t* get_load() const& {
    return load_ref() ? std::addressof(__fbthrift_field_load) : nullptr;
  }

  ::std::int64_t* get_load() & {
    return load_ref() ? std::addressof(__fbthrift_field_load) : nullptr;
  }
  ::std::int64_t* get_load() && = delete;

  [[deprecated("Use `FOO.load_ref() = BAR;` instead of `FOO.set_load(BAR);`")]]
  ::std::int64_t& set_load(::std::int64_t load_) {
    load_ref() = load_;
    return __fbthrift_field_load;
  }

  const std::uint32_t* get_crc32c() const& {
    return crc32c_ref() ? std::addressof(__fbthrift_field_crc32c) : nullptr;
  }

  std::uint32_t* get_crc32c() & {
    return crc32c_ref() ? std::addressof(__fbthrift_field_crc32c) : nullptr;
  }
  std::uint32_t* get_crc32c() && = delete;

  [[deprecated("Use `FOO.crc32c_ref() = BAR;` instead of `FOO.set_crc32c(BAR);`")]]
  std::uint32_t& set_crc32c(std::uint32_t crc32c_) {
    crc32c_ref() = crc32c_;
    return __fbthrift_field_crc32c;
  }

  const ::apache::thrift::CompressionAlgorithm* get_compression() const& {
    return compression_ref() ? std::addressof(__fbthrift_field_compression) : nullptr;
  }

  ::apache::thrift::CompressionAlgorithm* get_compression() & {
    return compression_ref() ? std::addressof(__fbthrift_field_compression) : nullptr;
  }
  ::apache::thrift::CompressionAlgorithm* get_compression() && = delete;

  [[deprecated("Use `FOO.compression_ref() = BAR;` instead of `FOO.set_compression(BAR);`")]]
  ::apache::thrift::CompressionAlgorithm& set_compression(::apache::thrift::CompressionAlgorithm compression_) {
    compression_ref() = compression_;
    return __fbthrift_field_compression;
  }
  const ::apache::thrift::PayloadMetadata* get_payloadMetadata() const&;
  ::apache::thrift::PayloadMetadata* get_payloadMetadata() &;
  ::apache::thrift::PayloadMetadata* get_payloadMetadata() && = delete;

  template <typename T_ResponseRpcMetadata_payloadMetadata_struct_setter = ::apache::thrift::PayloadMetadata>
  [[deprecated("Use `FOO.payloadMetadata_ref() = BAR;` instead of `FOO.set_payloadMetadata(BAR);`")]]
  ::apache::thrift::PayloadMetadata& set_payloadMetadata(T_ResponseRpcMetadata_payloadMetadata_struct_setter&& payloadMetadata_) {
    payloadMetadata_ref() = std::forward<T_ResponseRpcMetadata_payloadMetadata_struct_setter>(payloadMetadata_);
    return __fbthrift_field_payloadMetadata;
  }
  const ::apache::thrift::ProxiedPayloadMetadata* get_proxiedPayloadMetadata() const&;
  ::apache::thrift::ProxiedPayloadMetadata* get_proxiedPayloadMetadata() &;
  ::apache::thrift::ProxiedPayloadMetadata* get_proxiedPayloadMetadata() && = delete;

  template <typename T_ResponseRpcMetadata_proxiedPayloadMetadata_struct_setter = ::apache::thrift::ProxiedPayloadMetadata>
  [[deprecated("Use `FOO.proxiedPayloadMetadata_ref() = BAR;` instead of `FOO.set_proxiedPayloadMetadata(BAR);`")]]
  ::apache::thrift::ProxiedPayloadMetadata& set_proxiedPayloadMetadata(T_ResponseRpcMetadata_proxiedPayloadMetadata_struct_setter&& proxiedPayloadMetadata_) {
    proxiedPayloadMetadata_ref() = std::forward<T_ResponseRpcMetadata_proxiedPayloadMetadata_struct_setter>(proxiedPayloadMetadata_);
    return __fbthrift_field_proxiedPayloadMetadata;
  }

  const ::std::int32_t* get_streamId() const& {
    return streamId_ref() ? std::addressof(__fbthrift_field_streamId) : nullptr;
  }

  ::std::int32_t* get_streamId() & {
    return streamId_ref() ? std::addressof(__fbthrift_field_streamId) : nullptr;
  }
  ::std::int32_t* get_streamId() && = delete;

  [[deprecated("Use `FOO.streamId_ref() = BAR;` instead of `FOO.set_streamId(BAR);`")]]
  ::std::int32_t& set_streamId(::std::int32_t streamId_) {
    streamId_ref() = streamId_;
    return __fbthrift_field_streamId;
  }
  const ::apache::thrift::QueueMetadata* get_queueMetadata() const&;
  ::apache::thrift::QueueMetadata* get_queueMetadata() &;
  ::apache::thrift::QueueMetadata* get_queueMetadata() && = delete;

  template <typename T_ResponseRpcMetadata_queueMetadata_struct_setter = ::apache::thrift::QueueMetadata>
  [[deprecated("Use `FOO.queueMetadata_ref() = BAR;` instead of `FOO.set_queueMetadata(BAR);`")]]
  ::apache::thrift::QueueMetadata& set_queueMetadata(T_ResponseRpcMetadata_queueMetadata_struct_setter&& queueMetadata_) {
    queueMetadata_ref() = std::forward<T_ResponseRpcMetadata_queueMetadata_struct_setter>(queueMetadata_);
    return __fbthrift_field_queueMetadata;
  }

  const ::apache::thrift::IOBufPtr* get_frameworkMetadata() const& {
    return frameworkMetadata_ref() ? std::addressof(__fbthrift_field_frameworkMetadata) : nullptr;
  }

  ::apache::thrift::IOBufPtr* get_frameworkMetadata() & {
    return frameworkMetadata_ref() ? std::addressof(__fbthrift_field_frameworkMetadata) : nullptr;
  }
  ::apache::thrift::IOBufPtr* get_frameworkMetadata() && = delete;

  template <typename T_ResponseRpcMetadata_frameworkMetadata_struct_setter = ::apache::thrift::IOBufPtr>
  [[deprecated("Use `FOO.frameworkMetadata_ref() = BAR;` instead of `FOO.set_frameworkMetadata(BAR);`")]]
  ::apache::thrift::IOBufPtr& set_frameworkMetadata(T_ResponseRpcMetadata_frameworkMetadata_struct_setter&& frameworkMetadata_) {
    frameworkMetadata_ref() = std::forward<T_ResponseRpcMetadata_frameworkMetadata_struct_setter>(frameworkMetadata_);
    return __fbthrift_field_frameworkMetadata;
  }

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

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


class ResponseRpcError 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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_utf8,
    ::apache::thrift::ident::what_utf8,
    ::apache::thrift::ident::category,
    ::apache::thrift::ident::code,
    ::apache::thrift::ident::load
  >;

  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::enum_t<::apache::thrift::ResponseRpcErrorCategory>,
    ::apache::thrift::type::enum_t<::apache::thrift::ResponseRpcErrorCode>,
    ::apache::thrift::type::i64_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 = ResponseRpcError;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

  ResponseRpcError();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  ResponseRpcError(apache::thrift::FragileConstructor, ::std::string name_utf8__arg, ::std::string what_utf8__arg, ::apache::thrift::ResponseRpcErrorCategory category__arg, ::apache::thrift::ResponseRpcErrorCode code__arg, ::std::int64_t load__arg);

  ResponseRpcError(ResponseRpcError&&) noexcept;

  ResponseRpcError(const ResponseRpcError& src);


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

  ~ResponseRpcError();

 private:
  ::std::string __fbthrift_field_name_utf8;
 private:
  ::std::string __fbthrift_field_what_utf8;
 private:
  ::apache::thrift::ResponseRpcErrorCategory __fbthrift_field_category;
 private:
  ::apache::thrift::ResponseRpcErrorCode __fbthrift_field_code;
 private:
  ::std::int64_t __fbthrift_field_load;
 private:
  apache::thrift::detail::isset_bitset<5, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  template <typename..., typename T = ::apache::thrift::ResponseRpcErrorCategory>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> category_ref() const& {
    return {this->__fbthrift_field_category, __isset.at(2), __isset.bit(2)};
  }

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

  template <typename..., typename T = ::apache::thrift::ResponseRpcErrorCategory>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> category_ref() & {
    return {this->__fbthrift_field_category, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::apache::thrift::ResponseRpcErrorCategory>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> category_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_category), __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::apache::thrift::ResponseRpcErrorCategory>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> category() const& {
    return {this->__fbthrift_field_category, __isset.at(2), __isset.bit(2)};
  }

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

  template <typename..., typename T = ::apache::thrift::ResponseRpcErrorCategory>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> category() & {
    return {this->__fbthrift_field_category, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::apache::thrift::ResponseRpcErrorCategory>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> category() && {
    return {static_cast<T&&>(this->__fbthrift_field_category), __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::apache::thrift::ResponseRpcErrorCode>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> code_ref() const& {
    return {this->__fbthrift_field_code, __isset.at(3), __isset.bit(3)};
  }

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

  template <typename..., typename T = ::apache::thrift::ResponseRpcErrorCode>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> code_ref() & {
    return {this->__fbthrift_field_code, __isset.at(3), __isset.bit(3)};
  }

  template <typename..., typename T = ::apache::thrift::ResponseRpcErrorCode>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> code_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_code), __isset.at(3), __isset.bit(3)};
  }

  template <typename..., typename T = ::apache::thrift::ResponseRpcErrorCode>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> code() const& {
    return {this->__fbthrift_field_code, __isset.at(3), __isset.bit(3)};
  }

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

  template <typename..., typename T = ::apache::thrift::ResponseRpcErrorCode>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> code() & {
    return {this->__fbthrift_field_code, __isset.at(3), __isset.bit(3)};
  }

  template <typename..., typename T = ::apache::thrift::ResponseRpcErrorCode>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> code() && {
    return {static_cast<T&&>(this->__fbthrift_field_code), __isset.at(3), __isset.bit(3)};
  }

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

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

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

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

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

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

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

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

  const ::std::string* get_name_utf8() const& {
    return name_utf8_ref() ? std::addressof(__fbthrift_field_name_utf8) : nullptr;
  }

  ::std::string* get_name_utf8() & {
    return name_utf8_ref() ? std::addressof(__fbthrift_field_name_utf8) : nullptr;
  }
  ::std::string* get_name_utf8() && = delete;

  template <typename T_ResponseRpcError_name_utf8_struct_setter = ::std::string>
  [[deprecated("Use `FOO.name_utf8_ref() = BAR;` instead of `FOO.set_name_utf8(BAR);`")]]
  ::std::string& set_name_utf8(T_ResponseRpcError_name_utf8_struct_setter&& name_utf8_) {
    name_utf8_ref() = std::forward<T_ResponseRpcError_name_utf8_struct_setter>(name_utf8_);
    return __fbthrift_field_name_utf8;
  }

  const ::std::string* get_what_utf8() const& {
    return what_utf8_ref() ? std::addressof(__fbthrift_field_what_utf8) : nullptr;
  }

  ::std::string* get_what_utf8() & {
    return what_utf8_ref() ? std::addressof(__fbthrift_field_what_utf8) : nullptr;
  }
  ::std::string* get_what_utf8() && = delete;

  template <typename T_ResponseRpcError_what_utf8_struct_setter = ::std::string>
  [[deprecated("Use `FOO.what_utf8_ref() = BAR;` instead of `FOO.set_what_utf8(BAR);`")]]
  ::std::string& set_what_utf8(T_ResponseRpcError_what_utf8_struct_setter&& what_utf8_) {
    what_utf8_ref() = std::forward<T_ResponseRpcError_what_utf8_struct_setter>(what_utf8_);
    return __fbthrift_field_what_utf8;
  }

  const ::apache::thrift::ResponseRpcErrorCategory* get_category() const& {
    return category_ref() ? std::addressof(__fbthrift_field_category) : nullptr;
  }

  ::apache::thrift::ResponseRpcErrorCategory* get_category() & {
    return category_ref() ? std::addressof(__fbthrift_field_category) : nullptr;
  }
  ::apache::thrift::ResponseRpcErrorCategory* get_category() && = delete;

  [[deprecated("Use `FOO.category_ref() = BAR;` instead of `FOO.set_category(BAR);`")]]
  ::apache::thrift::ResponseRpcErrorCategory& set_category(::apache::thrift::ResponseRpcErrorCategory category_) {
    category_ref() = category_;
    return __fbthrift_field_category;
  }

  const ::apache::thrift::ResponseRpcErrorCode* get_code() const& {
    return code_ref() ? std::addressof(__fbthrift_field_code) : nullptr;
  }

  ::apache::thrift::ResponseRpcErrorCode* get_code() & {
    return code_ref() ? std::addressof(__fbthrift_field_code) : nullptr;
  }
  ::apache::thrift::ResponseRpcErrorCode* get_code() && = delete;

  [[deprecated("Use `FOO.code_ref() = BAR;` instead of `FOO.set_code(BAR);`")]]
  ::apache::thrift::ResponseRpcErrorCode& set_code(::apache::thrift::ResponseRpcErrorCode code_) {
    code_ref() = code_;
    return __fbthrift_field_code;
  }

  const ::std::int64_t* get_load() const& {
    return load_ref() ? std::addressof(__fbthrift_field_load) : nullptr;
  }

  ::std::int64_t* get_load() & {
    return load_ref() ? std::addressof(__fbthrift_field_load) : nullptr;
  }
  ::std::int64_t* get_load() && = delete;

  [[deprecated("Use `FOO.load_ref() = BAR;` instead of `FOO.set_load(BAR);`")]]
  ::std::int64_t& set_load(::std::int64_t load_) {
    load_ref() = load_;
    return __fbthrift_field_load;
  }

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

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


class StreamRpcError 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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_utf8,
    ::apache::thrift::ident::what_utf8,
    ::apache::thrift::ident::code
  >;

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

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

 public:
  using __fbthrift_cpp2_type = StreamRpcError;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

  StreamRpcError();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  StreamRpcError(apache::thrift::FragileConstructor, ::std::string name_utf8__arg, ::std::string what_utf8__arg, ::apache::thrift::StreamRpcErrorCode code__arg);

  StreamRpcError(StreamRpcError&&) noexcept;

  StreamRpcError(const StreamRpcError& src);


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

  ~StreamRpcError();

 private:
  ::std::string __fbthrift_field_name_utf8;
 private:
  ::std::string __fbthrift_field_what_utf8;
 private:
  ::apache::thrift::StreamRpcErrorCode __fbthrift_field_code;
 private:
  apache::thrift::detail::isset_bitset<3, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  template <typename..., typename T = ::apache::thrift::StreamRpcErrorCode>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> code_ref() const& {
    return {this->__fbthrift_field_code, __isset.at(2), __isset.bit(2)};
  }

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

  template <typename..., typename T = ::apache::thrift::StreamRpcErrorCode>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> code_ref() & {
    return {this->__fbthrift_field_code, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::apache::thrift::StreamRpcErrorCode>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> code_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_code), __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::apache::thrift::StreamRpcErrorCode>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> code() const& {
    return {this->__fbthrift_field_code, __isset.at(2), __isset.bit(2)};
  }

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

  template <typename..., typename T = ::apache::thrift::StreamRpcErrorCode>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> code() & {
    return {this->__fbthrift_field_code, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::apache::thrift::StreamRpcErrorCode>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> code() && {
    return {static_cast<T&&>(this->__fbthrift_field_code), __isset.at(2), __isset.bit(2)};
  }

  const ::std::string* get_name_utf8() const& {
    return name_utf8_ref() ? std::addressof(__fbthrift_field_name_utf8) : nullptr;
  }

  ::std::string* get_name_utf8() & {
    return name_utf8_ref() ? std::addressof(__fbthrift_field_name_utf8) : nullptr;
  }
  ::std::string* get_name_utf8() && = delete;

  template <typename T_StreamRpcError_name_utf8_struct_setter = ::std::string>
  [[deprecated("Use `FOO.name_utf8_ref() = BAR;` instead of `FOO.set_name_utf8(BAR);`")]]
  ::std::string& set_name_utf8(T_StreamRpcError_name_utf8_struct_setter&& name_utf8_) {
    name_utf8_ref() = std::forward<T_StreamRpcError_name_utf8_struct_setter>(name_utf8_);
    return __fbthrift_field_name_utf8;
  }

  const ::std::string* get_what_utf8() const& {
    return what_utf8_ref() ? std::addressof(__fbthrift_field_what_utf8) : nullptr;
  }

  ::std::string* get_what_utf8() & {
    return what_utf8_ref() ? std::addressof(__fbthrift_field_what_utf8) : nullptr;
  }
  ::std::string* get_what_utf8() && = delete;

  template <typename T_StreamRpcError_what_utf8_struct_setter = ::std::string>
  [[deprecated("Use `FOO.what_utf8_ref() = BAR;` instead of `FOO.set_what_utf8(BAR);`")]]
  ::std::string& set_what_utf8(T_StreamRpcError_what_utf8_struct_setter&& what_utf8_) {
    what_utf8_ref() = std::forward<T_StreamRpcError_what_utf8_struct_setter>(what_utf8_);
    return __fbthrift_field_what_utf8;
  }

  const ::apache::thrift::StreamRpcErrorCode* get_code() const& {
    return code_ref() ? std::addressof(__fbthrift_field_code) : nullptr;
  }

  ::apache::thrift::StreamRpcErrorCode* get_code() & {
    return code_ref() ? std::addressof(__fbthrift_field_code) : nullptr;
  }
  ::apache::thrift::StreamRpcErrorCode* get_code() && = delete;

  [[deprecated("Use `FOO.code_ref() = BAR;` instead of `FOO.set_code(BAR);`")]]
  ::apache::thrift::StreamRpcErrorCode& set_code(::apache::thrift::StreamRpcErrorCode code_) {
    code_ref() = code_;
    return __fbthrift_field_code;
  }

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

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


class StreamPayloadMetadata 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::compression,
    ::apache::thrift::ident::otherMetadata,
    ::apache::thrift::ident::payloadMetadata,
    ::apache::thrift::ident::fdMetadata
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2,3,5};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::enum_t<::apache::thrift::CompressionAlgorithm>,
    ::apache::thrift::type::cpp_type<folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::string_t>>,
    ::apache::thrift::type::union_t<::apache::thrift::PayloadMetadata>,
    ::apache::thrift::type::struct_t<::apache::thrift::FdMetadata>
  >;

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


 public:

  StreamPayloadMetadata();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  StreamPayloadMetadata(apache::thrift::FragileConstructor, ::apache::thrift::CompressionAlgorithm compression__arg, folly::F14NodeMap<::std::string, ::apache::thrift::string_4852> otherMetadata__arg, ::apache::thrift::PayloadMetadata payloadMetadata__arg, ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata> fdMetadata__arg);

  StreamPayloadMetadata(StreamPayloadMetadata&&) noexcept;

  StreamPayloadMetadata(const StreamPayloadMetadata& src);


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

  ~StreamPayloadMetadata();

 private:
  ::apache::thrift::CompressionAlgorithm __fbthrift_field_compression;
 private:
  folly::F14NodeMap<::std::string, ::apache::thrift::string_4852> __fbthrift_field_otherMetadata;
 private:
  ::apache::thrift::PayloadMetadata __fbthrift_field_payloadMetadata;
 private:
  ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata> __fbthrift_field_fdMetadata;
 private:
  apache::thrift::detail::isset_bitset<3, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> compression_ref() const& {
    return {this->__fbthrift_field_compression, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> compression_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_compression), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> compression_ref() & {
    return {this->__fbthrift_field_compression, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> compression_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_compression), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> compression() const& {
    return {this->__fbthrift_field_compression, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> compression() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_compression), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> compression() & {
    return {this->__fbthrift_field_compression, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> compression() && {
    return {static_cast<T&&>(this->__fbthrift_field_compression), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> otherMetadata_ref() const& {
    return {this->__fbthrift_field_otherMetadata, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> otherMetadata_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_otherMetadata), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> otherMetadata_ref() & {
    return {this->__fbthrift_field_otherMetadata, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> otherMetadata_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_otherMetadata), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> otherMetadata() const& {
    return {this->__fbthrift_field_otherMetadata, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> otherMetadata() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_otherMetadata), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> otherMetadata() & {
    return {this->__fbthrift_field_otherMetadata, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> otherMetadata() && {
    return {static_cast<T&&>(this->__fbthrift_field_otherMetadata), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::PayloadMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> payloadMetadata_ref() const& {
    return {this->__fbthrift_field_payloadMetadata, __isset.at(2), __isset.bit(2)};
  }

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

  template <typename..., typename T = ::apache::thrift::PayloadMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> payloadMetadata_ref() & {
    return {this->__fbthrift_field_payloadMetadata, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::apache::thrift::PayloadMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> payloadMetadata_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_payloadMetadata), __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::apache::thrift::PayloadMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> payloadMetadata() const& {
    return {this->__fbthrift_field_payloadMetadata, __isset.at(2), __isset.bit(2)};
  }

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

  template <typename..., typename T = ::apache::thrift::PayloadMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> payloadMetadata() & {
    return {this->__fbthrift_field_payloadMetadata, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::apache::thrift::PayloadMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> payloadMetadata() && {
    return {static_cast<T&&>(this->__fbthrift_field_payloadMetadata), __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<const T&> fdMetadata_ref() const& {
    return ::apache::thrift::optional_boxed_field_ref<const T&>{this->__fbthrift_field_fdMetadata};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<const T&&> fdMetadata_ref() const&& {
    return ::apache::thrift::optional_boxed_field_ref<const T&&>{static_cast<const T&&>(this->__fbthrift_field_fdMetadata)};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<T&> fdMetadata_ref() & {
    return ::apache::thrift::optional_boxed_field_ref<T&>{this->__fbthrift_field_fdMetadata};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<T&&> fdMetadata_ref() && {
    return ::apache::thrift::optional_boxed_field_ref<T&&>{static_cast<T&&>(this->__fbthrift_field_fdMetadata)};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<const T&> fdMetadata() const& {
    return ::apache::thrift::optional_boxed_field_ref<const T&>{this->__fbthrift_field_fdMetadata};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<const T&&> fdMetadata() const&& {
    return ::apache::thrift::optional_boxed_field_ref<const T&&>{static_cast<const T&&>(this->__fbthrift_field_fdMetadata)};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<T&> fdMetadata() & {
    return ::apache::thrift::optional_boxed_field_ref<T&>{this->__fbthrift_field_fdMetadata};
  }

  template <typename..., typename T = ::apache::thrift::detail::boxed_value_ptr<::apache::thrift::FdMetadata>>
  FOLLY_ERASE ::apache::thrift::optional_boxed_field_ref<T&&> fdMetadata() && {
    return ::apache::thrift::optional_boxed_field_ref<T&&>{static_cast<T&&>(this->__fbthrift_field_fdMetadata)};
  }

  const ::apache::thrift::CompressionAlgorithm* get_compression() const& {
    return compression_ref() ? std::addressof(__fbthrift_field_compression) : nullptr;
  }

  ::apache::thrift::CompressionAlgorithm* get_compression() & {
    return compression_ref() ? std::addressof(__fbthrift_field_compression) : nullptr;
  }
  ::apache::thrift::CompressionAlgorithm* get_compression() && = delete;

  [[deprecated("Use `FOO.compression_ref() = BAR;` instead of `FOO.set_compression(BAR);`")]]
  ::apache::thrift::CompressionAlgorithm& set_compression(::apache::thrift::CompressionAlgorithm compression_) {
    compression_ref() = compression_;
    return __fbthrift_field_compression;
  }
  const folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>* get_otherMetadata() const&;
  folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>* get_otherMetadata() &;
  folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>* get_otherMetadata() && = delete;

  template <typename T_StreamPayloadMetadata_otherMetadata_struct_setter = folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>>
  [[deprecated("Use `FOO.otherMetadata_ref() = BAR;` instead of `FOO.set_otherMetadata(BAR);`")]]
  folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>& set_otherMetadata(T_StreamPayloadMetadata_otherMetadata_struct_setter&& otherMetadata_) {
    otherMetadata_ref() = std::forward<T_StreamPayloadMetadata_otherMetadata_struct_setter>(otherMetadata_);
    return __fbthrift_field_otherMetadata;
  }
  const ::apache::thrift::PayloadMetadata* get_payloadMetadata() const&;
  ::apache::thrift::PayloadMetadata* get_payloadMetadata() &;
  ::apache::thrift::PayloadMetadata* get_payloadMetadata() && = delete;

  template <typename T_StreamPayloadMetadata_payloadMetadata_struct_setter = ::apache::thrift::PayloadMetadata>
  [[deprecated("Use `FOO.payloadMetadata_ref() = BAR;` instead of `FOO.set_payloadMetadata(BAR);`")]]
  ::apache::thrift::PayloadMetadata& set_payloadMetadata(T_StreamPayloadMetadata_payloadMetadata_struct_setter&& payloadMetadata_) {
    payloadMetadata_ref() = std::forward<T_StreamPayloadMetadata_payloadMetadata_struct_setter>(payloadMetadata_);
    return __fbthrift_field_payloadMetadata;
  }

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

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


class ClientMetadata 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::agent,
    ::apache::thrift::ident::hostname,
    ::apache::thrift::ident::otherMetadata
  >;

  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::string_t,
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::cpp_type<folly::F14NodeMap<::std::string, ::std::string>, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::string_t>>
  >;

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

 public:
  using __fbthrift_cpp2_type = ClientMetadata;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;


 public:

  ClientMetadata();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  ClientMetadata(apache::thrift::FragileConstructor, ::std::string agent__arg, ::std::string hostname__arg, folly::F14NodeMap<::std::string, ::std::string> otherMetadata__arg);

  ClientMetadata(ClientMetadata&&) noexcept;

  ClientMetadata(const ClientMetadata& src);


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

  ~ClientMetadata();

 private:
  ::std::string __fbthrift_field_agent;
 private:
  ::std::string __fbthrift_field_hostname;
 private:
  folly::F14NodeMap<::std::string, ::std::string> __fbthrift_field_otherMetadata;
 private:
  apache::thrift::detail::isset_bitset<3, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> otherMetadata_ref() const& {
    return {this->__fbthrift_field_otherMetadata, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> otherMetadata_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_otherMetadata), __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> otherMetadata_ref() & {
    return {this->__fbthrift_field_otherMetadata, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> otherMetadata_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_otherMetadata), __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> otherMetadata() const& {
    return {this->__fbthrift_field_otherMetadata, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> otherMetadata() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_otherMetadata), __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> otherMetadata() & {
    return {this->__fbthrift_field_otherMetadata, __isset.at(2), __isset.bit(2)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> otherMetadata() && {
    return {static_cast<T&&>(this->__fbthrift_field_otherMetadata), __isset.at(2), __isset.bit(2)};
  }

  const ::std::string* get_agent() const& {
    return agent_ref() ? std::addressof(__fbthrift_field_agent) : nullptr;
  }

  ::std::string* get_agent() & {
    return agent_ref() ? std::addressof(__fbthrift_field_agent) : nullptr;
  }
  ::std::string* get_agent() && = delete;

  template <typename T_ClientMetadata_agent_struct_setter = ::std::string>
  [[deprecated("Use `FOO.agent_ref() = BAR;` instead of `FOO.set_agent(BAR);`")]]
  ::std::string& set_agent(T_ClientMetadata_agent_struct_setter&& agent_) {
    agent_ref() = std::forward<T_ClientMetadata_agent_struct_setter>(agent_);
    return __fbthrift_field_agent;
  }

  const ::std::string* get_hostname() const& {
    return hostname_ref() ? std::addressof(__fbthrift_field_hostname) : nullptr;
  }

  ::std::string* get_hostname() & {
    return hostname_ref() ? std::addressof(__fbthrift_field_hostname) : nullptr;
  }
  ::std::string* get_hostname() && = delete;

  template <typename T_ClientMetadata_hostname_struct_setter = ::std::string>
  [[deprecated("Use `FOO.hostname_ref() = BAR;` instead of `FOO.set_hostname(BAR);`")]]
  ::std::string& set_hostname(T_ClientMetadata_hostname_struct_setter&& hostname_) {
    hostname_ref() = std::forward<T_ClientMetadata_hostname_struct_setter>(hostname_);
    return __fbthrift_field_hostname;
  }
  const folly::F14NodeMap<::std::string, ::std::string>* get_otherMetadata() const&;
  folly::F14NodeMap<::std::string, ::std::string>* get_otherMetadata() &;
  folly::F14NodeMap<::std::string, ::std::string>* get_otherMetadata() && = delete;

  template <typename T_ClientMetadata_otherMetadata_struct_setter = folly::F14NodeMap<::std::string, ::std::string>>
  [[deprecated("Use `FOO.otherMetadata_ref() = BAR;` instead of `FOO.set_otherMetadata(BAR);`")]]
  folly::F14NodeMap<::std::string, ::std::string>& set_otherMetadata(T_ClientMetadata_otherMetadata_struct_setter&& otherMetadata_) {
    otherMetadata_ref() = std::forward<T_ClientMetadata_otherMetadata_struct_setter>(otherMetadata_);
    return __fbthrift_field_otherMetadata;
  }

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

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


class RequestSetupMetadata 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::opaque,
    ::apache::thrift::ident::interfaceKind,
    ::apache::thrift::ident::minVersion,
    ::apache::thrift::ident::maxVersion,
    ::apache::thrift::ident::dscpToReflect,
    ::apache::thrift::ident::markToReflect,
    ::apache::thrift::ident::qosUseCaseId,
    ::apache::thrift::ident::qosPolicyId,
    ::apache::thrift::ident::clientMetadata
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2,3,4,5,6,10,11,9};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::cpp_type<apache::thrift::MetadataOpaqueMap<::std::string, ::std::string>, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::binary_t>>,
    ::apache::thrift::type::enum_t<::apache::thrift::InterfaceKind>,
    ::apache::thrift::type::i32_t,
    ::apache::thrift::type::i32_t,
    ::apache::thrift::type::i32_t,
    ::apache::thrift::type::i32_t,
    ::apache::thrift::type::i32_t,
    ::apache::thrift::type::i32_t,
    ::apache::thrift::type::struct_t<::apache::thrift::ClientMetadata>
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 9;

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


 public:

  RequestSetupMetadata();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  RequestSetupMetadata(apache::thrift::FragileConstructor, apache::thrift::MetadataOpaqueMap<::std::string, ::std::string> opaque__arg, ::apache::thrift::InterfaceKind interfaceKind__arg, ::std::int32_t minVersion__arg, ::std::int32_t maxVersion__arg, ::std::int32_t dscpToReflect__arg, ::std::int32_t markToReflect__arg, ::std::int32_t qosUseCaseId__arg, ::std::int32_t qosPolicyId__arg, ::apache::thrift::ClientMetadata clientMetadata__arg);

  RequestSetupMetadata(RequestSetupMetadata&&) noexcept;

  RequestSetupMetadata(const RequestSetupMetadata& src);


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

  ~RequestSetupMetadata();

 private:
  apache::thrift::MetadataOpaqueMap<::std::string, ::std::string> __fbthrift_field_opaque;
 private:
  ::apache::thrift::InterfaceKind __fbthrift_field_interfaceKind;
 private:
  ::std::int32_t __fbthrift_field_minVersion;
 private:
  ::std::int32_t __fbthrift_field_maxVersion;
 private:
  ::std::int32_t __fbthrift_field_dscpToReflect;
 private:
  ::std::int32_t __fbthrift_field_markToReflect;
 private:
  ::std::int32_t __fbthrift_field_qosUseCaseId;
 private:
  ::std::int32_t __fbthrift_field_qosPolicyId;
 private:
  ::apache::thrift::ClientMetadata __fbthrift_field_clientMetadata;
 private:
  apache::thrift::detail::isset_bitset<9, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

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

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

  template <typename..., typename T = apache::thrift::MetadataOpaqueMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> opaque_ref() & {
    return {this->__fbthrift_field_opaque, __isset.at(0), __isset.bit(0)};
  }

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

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

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

  template <typename..., typename T = apache::thrift::MetadataOpaqueMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> opaque() & {
    return {this->__fbthrift_field_opaque, __isset.at(0), __isset.bit(0)};
  }

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

  template <typename..., typename T = ::apache::thrift::InterfaceKind>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> interfaceKind_ref() const& {
    return {this->__fbthrift_field_interfaceKind, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::InterfaceKind>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> interfaceKind_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_interfaceKind), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::InterfaceKind>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> interfaceKind_ref() & {
    return {this->__fbthrift_field_interfaceKind, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::InterfaceKind>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> interfaceKind_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_interfaceKind), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::InterfaceKind>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> interfaceKind() const& {
    return {this->__fbthrift_field_interfaceKind, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::InterfaceKind>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> interfaceKind() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_interfaceKind), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::InterfaceKind>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> interfaceKind() & {
    return {this->__fbthrift_field_interfaceKind, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::InterfaceKind>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> interfaceKind() && {
    return {static_cast<T&&>(this->__fbthrift_field_interfaceKind), __isset.at(1), __isset.bit(1)};
  }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> markToReflect_ref() const& {
    return {this->__fbthrift_field_markToReflect, __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> markToReflect_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_markToReflect), __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> markToReflect_ref() & {
    return {this->__fbthrift_field_markToReflect, __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> markToReflect_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_markToReflect), __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> markToReflect() const& {
    return {this->__fbthrift_field_markToReflect, __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> markToReflect() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_markToReflect), __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> markToReflect() & {
    return {this->__fbthrift_field_markToReflect, __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> markToReflect() && {
    return {static_cast<T&&>(this->__fbthrift_field_markToReflect), __isset.at(5), __isset.bit(5)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> qosUseCaseId_ref() const& {
    return {this->__fbthrift_field_qosUseCaseId, __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> qosUseCaseId_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_qosUseCaseId), __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> qosUseCaseId_ref() & {
    return {this->__fbthrift_field_qosUseCaseId, __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> qosUseCaseId_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_qosUseCaseId), __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> qosUseCaseId() const& {
    return {this->__fbthrift_field_qosUseCaseId, __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> qosUseCaseId() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_qosUseCaseId), __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> qosUseCaseId() & {
    return {this->__fbthrift_field_qosUseCaseId, __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> qosUseCaseId() && {
    return {static_cast<T&&>(this->__fbthrift_field_qosUseCaseId), __isset.at(6), __isset.bit(6)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> qosPolicyId_ref() const& {
    return {this->__fbthrift_field_qosPolicyId, __isset.at(7), __isset.bit(7)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> qosPolicyId_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_qosPolicyId), __isset.at(7), __isset.bit(7)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> qosPolicyId_ref() & {
    return {this->__fbthrift_field_qosPolicyId, __isset.at(7), __isset.bit(7)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> qosPolicyId_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_qosPolicyId), __isset.at(7), __isset.bit(7)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> qosPolicyId() const& {
    return {this->__fbthrift_field_qosPolicyId, __isset.at(7), __isset.bit(7)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> qosPolicyId() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_qosPolicyId), __isset.at(7), __isset.bit(7)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> qosPolicyId() & {
    return {this->__fbthrift_field_qosPolicyId, __isset.at(7), __isset.bit(7)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> qosPolicyId() && {
    return {static_cast<T&&>(this->__fbthrift_field_qosPolicyId), __isset.at(7), __isset.bit(7)};
  }

  template <typename..., typename T = ::apache::thrift::ClientMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> clientMetadata_ref() const& {
    return {this->__fbthrift_field_clientMetadata, __isset.at(8), __isset.bit(8)};
  }

  template <typename..., typename T = ::apache::thrift::ClientMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> clientMetadata_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_clientMetadata), __isset.at(8), __isset.bit(8)};
  }

  template <typename..., typename T = ::apache::thrift::ClientMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> clientMetadata_ref() & {
    return {this->__fbthrift_field_clientMetadata, __isset.at(8), __isset.bit(8)};
  }

  template <typename..., typename T = ::apache::thrift::ClientMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> clientMetadata_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_clientMetadata), __isset.at(8), __isset.bit(8)};
  }

  template <typename..., typename T = ::apache::thrift::ClientMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> clientMetadata() const& {
    return {this->__fbthrift_field_clientMetadata, __isset.at(8), __isset.bit(8)};
  }

  template <typename..., typename T = ::apache::thrift::ClientMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> clientMetadata() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_clientMetadata), __isset.at(8), __isset.bit(8)};
  }

  template <typename..., typename T = ::apache::thrift::ClientMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> clientMetadata() & {
    return {this->__fbthrift_field_clientMetadata, __isset.at(8), __isset.bit(8)};
  }

  template <typename..., typename T = ::apache::thrift::ClientMetadata>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> clientMetadata() && {
    return {static_cast<T&&>(this->__fbthrift_field_clientMetadata), __isset.at(8), __isset.bit(8)};
  }
  const apache::thrift::MetadataOpaqueMap<::std::string, ::std::string>* get_opaque() const&;
  apache::thrift::MetadataOpaqueMap<::std::string, ::std::string>* get_opaque() &;
  apache::thrift::MetadataOpaqueMap<::std::string, ::std::string>* get_opaque() && = delete;

  template <typename T_RequestSetupMetadata_opaque_struct_setter = apache::thrift::MetadataOpaqueMap<::std::string, ::std::string>>
  [[deprecated("Use `FOO.opaque_ref() = BAR;` instead of `FOO.set_opaque(BAR);`")]]
  apache::thrift::MetadataOpaqueMap<::std::string, ::std::string>& set_opaque(T_RequestSetupMetadata_opaque_struct_setter&& opaque_) {
    opaque_ref() = std::forward<T_RequestSetupMetadata_opaque_struct_setter>(opaque_);
    return __fbthrift_field_opaque;
  }

  const ::apache::thrift::InterfaceKind* get_interfaceKind() const& {
    return interfaceKind_ref() ? std::addressof(__fbthrift_field_interfaceKind) : nullptr;
  }

  ::apache::thrift::InterfaceKind* get_interfaceKind() & {
    return interfaceKind_ref() ? std::addressof(__fbthrift_field_interfaceKind) : nullptr;
  }
  ::apache::thrift::InterfaceKind* get_interfaceKind() && = delete;

  [[deprecated("Use `FOO.interfaceKind_ref() = BAR;` instead of `FOO.set_interfaceKind(BAR);`")]]
  ::apache::thrift::InterfaceKind& set_interfaceKind(::apache::thrift::InterfaceKind interfaceKind_) {
    interfaceKind_ref() = interfaceKind_;
    return __fbthrift_field_interfaceKind;
  }

  const ::std::int32_t* get_minVersion() const& {
    return minVersion_ref() ? std::addressof(__fbthrift_field_minVersion) : nullptr;
  }

  ::std::int32_t* get_minVersion() & {
    return minVersion_ref() ? std::addressof(__fbthrift_field_minVersion) : nullptr;
  }
  ::std::int32_t* get_minVersion() && = delete;

  [[deprecated("Use `FOO.minVersion_ref() = BAR;` instead of `FOO.set_minVersion(BAR);`")]]
  ::std::int32_t& set_minVersion(::std::int32_t minVersion_) {
    minVersion_ref() = minVersion_;
    return __fbthrift_field_minVersion;
  }

  const ::std::int32_t* get_maxVersion() const& {
    return maxVersion_ref() ? std::addressof(__fbthrift_field_maxVersion) : nullptr;
  }

  ::std::int32_t* get_maxVersion() & {
    return maxVersion_ref() ? std::addressof(__fbthrift_field_maxVersion) : nullptr;
  }
  ::std::int32_t* get_maxVersion() && = delete;

  [[deprecated("Use `FOO.maxVersion_ref() = BAR;` instead of `FOO.set_maxVersion(BAR);`")]]
  ::std::int32_t& set_maxVersion(::std::int32_t maxVersion_) {
    maxVersion_ref() = maxVersion_;
    return __fbthrift_field_maxVersion;
  }

  const ::std::int32_t* get_dscpToReflect() const& {
    return dscpToReflect_ref() ? std::addressof(__fbthrift_field_dscpToReflect) : nullptr;
  }

  ::std::int32_t* get_dscpToReflect() & {
    return dscpToReflect_ref() ? std::addressof(__fbthrift_field_dscpToReflect) : nullptr;
  }
  ::std::int32_t* get_dscpToReflect() && = delete;

  [[deprecated("Use `FOO.dscpToReflect_ref() = BAR;` instead of `FOO.set_dscpToReflect(BAR);`")]]
  ::std::int32_t& set_dscpToReflect(::std::int32_t dscpToReflect_) {
    dscpToReflect_ref() = dscpToReflect_;
    return __fbthrift_field_dscpToReflect;
  }

  const ::std::int32_t* get_markToReflect() const& {
    return markToReflect_ref() ? std::addressof(__fbthrift_field_markToReflect) : nullptr;
  }

  ::std::int32_t* get_markToReflect() & {
    return markToReflect_ref() ? std::addressof(__fbthrift_field_markToReflect) : nullptr;
  }
  ::std::int32_t* get_markToReflect() && = delete;

  [[deprecated("Use `FOO.markToReflect_ref() = BAR;` instead of `FOO.set_markToReflect(BAR);`")]]
  ::std::int32_t& set_markToReflect(::std::int32_t markToReflect_) {
    markToReflect_ref() = markToReflect_;
    return __fbthrift_field_markToReflect;
  }

  const ::std::int32_t* get_qosUseCaseId() const& {
    return qosUseCaseId_ref() ? std::addressof(__fbthrift_field_qosUseCaseId) : nullptr;
  }

  ::std::int32_t* get_qosUseCaseId() & {
    return qosUseCaseId_ref() ? std::addressof(__fbthrift_field_qosUseCaseId) : nullptr;
  }
  ::std::int32_t* get_qosUseCaseId() && = delete;

  [[deprecated("Use `FOO.qosUseCaseId_ref() = BAR;` instead of `FOO.set_qosUseCaseId(BAR);`")]]
  ::std::int32_t& set_qosUseCaseId(::std::int32_t qosUseCaseId_) {
    qosUseCaseId_ref() = qosUseCaseId_;
    return __fbthrift_field_qosUseCaseId;
  }

  const ::std::int32_t* get_qosPolicyId() const& {
    return qosPolicyId_ref() ? std::addressof(__fbthrift_field_qosPolicyId) : nullptr;
  }

  ::std::int32_t* get_qosPolicyId() & {
    return qosPolicyId_ref() ? std::addressof(__fbthrift_field_qosPolicyId) : nullptr;
  }
  ::std::int32_t* get_qosPolicyId() && = delete;

  [[deprecated("Use `FOO.qosPolicyId_ref() = BAR;` instead of `FOO.set_qosPolicyId(BAR);`")]]
  ::std::int32_t& set_qosPolicyId(::std::int32_t qosPolicyId_) {
    qosPolicyId_ref() = qosPolicyId_;
    return __fbthrift_field_qosPolicyId;
  }
  const ::apache::thrift::ClientMetadata* get_clientMetadata() const&;
  ::apache::thrift::ClientMetadata* get_clientMetadata() &;
  ::apache::thrift::ClientMetadata* get_clientMetadata() && = delete;

  template <typename T_RequestSetupMetadata_clientMetadata_struct_setter = ::apache::thrift::ClientMetadata>
  [[deprecated("Use `FOO.clientMetadata_ref() = BAR;` instead of `FOO.set_clientMetadata(BAR);`")]]
  ::apache::thrift::ClientMetadata& set_clientMetadata(T_RequestSetupMetadata_clientMetadata_struct_setter&& clientMetadata_) {
    clientMetadata_ref() = std::forward<T_RequestSetupMetadata_clientMetadata_struct_setter>(clientMetadata_);
    return __fbthrift_field_clientMetadata;
  }

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

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


class SetupResponse 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::version,
    ::apache::thrift::ident::zstdSupported
  >;

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


 public:

  SetupResponse() :
      __fbthrift_field_version(),
      __fbthrift_field_zstdSupported() {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  SetupResponse(apache::thrift::FragileConstructor, ::std::int32_t version__arg, bool zstdSupported__arg);

  SetupResponse(SetupResponse&&) = default;

  SetupResponse(const SetupResponse&) = default;


  SetupResponse& operator=(SetupResponse&&) = default;

  SetupResponse& operator=(const SetupResponse&) = default;
 private:
  ::std::int32_t __fbthrift_field_version;
 private:
  bool __fbthrift_field_zstdSupported;
 private:
  apache::thrift::detail::isset_bitset<2, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> version_ref() const& {
    return {this->__fbthrift_field_version, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> version_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_version), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> version_ref() & {
    return {this->__fbthrift_field_version, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> version_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_version), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> version() const& {
    return {this->__fbthrift_field_version, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> version() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_version), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> version() & {
    return {this->__fbthrift_field_version, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> version() && {
    return {static_cast<T&&>(this->__fbthrift_field_version), __isset.at(0), __isset.bit(0)};
  }

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

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

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

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

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

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

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

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

  const ::std::int32_t* get_version() const& {
    return version_ref() ? std::addressof(__fbthrift_field_version) : nullptr;
  }

  ::std::int32_t* get_version() & {
    return version_ref() ? std::addressof(__fbthrift_field_version) : nullptr;
  }
  ::std::int32_t* get_version() && = delete;

  [[deprecated("Use `FOO.version_ref() = BAR;` instead of `FOO.set_version(BAR);`")]]
  ::std::int32_t& set_version(::std::int32_t version_) {
    version_ref() = version_;
    return __fbthrift_field_version;
  }

  const bool* get_zstdSupported() const& {
    return zstdSupported_ref() ? std::addressof(__fbthrift_field_zstdSupported) : nullptr;
  }

  bool* get_zstdSupported() & {
    return zstdSupported_ref() ? std::addressof(__fbthrift_field_zstdSupported) : nullptr;
  }
  bool* get_zstdSupported() && = delete;

  [[deprecated("Use `FOO.zstdSupported_ref() = BAR;` instead of `FOO.set_zstdSupported(BAR);`")]]
  bool& set_zstdSupported(bool zstdSupported_) {
    zstdSupported_ref() = zstdSupported_;
    return __fbthrift_field_zstdSupported;
  }

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

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


class HeadersPayloadContent 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::otherMetadata
  >;

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


 public:

  HeadersPayloadContent();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  HeadersPayloadContent(apache::thrift::FragileConstructor, folly::F14NodeMap<::std::string, ::apache::thrift::string_4852> otherMetadata__arg);

  HeadersPayloadContent(HeadersPayloadContent&&) noexcept;

  HeadersPayloadContent(const HeadersPayloadContent& src);


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

  ~HeadersPayloadContent();

 private:
  folly::F14NodeMap<::std::string, ::apache::thrift::string_4852> __fbthrift_field_otherMetadata;
 private:
  apache::thrift::detail::isset_bitset<1, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> otherMetadata_ref() const& {
    return {this->__fbthrift_field_otherMetadata, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> otherMetadata_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_otherMetadata), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> otherMetadata_ref() & {
    return {this->__fbthrift_field_otherMetadata, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> otherMetadata_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_otherMetadata), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> otherMetadata() const& {
    return {this->__fbthrift_field_otherMetadata, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> otherMetadata() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_otherMetadata), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> otherMetadata() & {
    return {this->__fbthrift_field_otherMetadata, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> otherMetadata() && {
    return {static_cast<T&&>(this->__fbthrift_field_otherMetadata), __isset.at(0), __isset.bit(0)};
  }
  const folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>* get_otherMetadata() const&;
  folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>* get_otherMetadata() &;
  folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>* get_otherMetadata() && = delete;

  template <typename T_HeadersPayloadContent_otherMetadata_struct_setter = folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>>
  [[deprecated("Use `FOO.otherMetadata_ref() = BAR;` instead of `FOO.set_otherMetadata(BAR);`")]]
  folly::F14NodeMap<::std::string, ::apache::thrift::string_4852>& set_otherMetadata(T_HeadersPayloadContent_otherMetadata_struct_setter&& otherMetadata_) {
    otherMetadata_ref() = std::forward<T_HeadersPayloadContent_otherMetadata_struct_setter>(otherMetadata_);
    return __fbthrift_field_otherMetadata;
  }

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

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


class StreamHeadersPush 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::streamId,
    ::apache::thrift::ident::headersPayloadContent
  >;

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

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


 public:

  StreamHeadersPush() :
      __fbthrift_field_streamId() {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  StreamHeadersPush(apache::thrift::FragileConstructor, ::std::int32_t streamId__arg, ::apache::thrift::HeadersPayloadContent headersPayloadContent__arg);

  StreamHeadersPush(StreamHeadersPush&&) noexcept;

  StreamHeadersPush(const StreamHeadersPush& src);


  StreamHeadersPush& operator=(StreamHeadersPush&&) noexcept;
  StreamHeadersPush& operator=(const StreamHeadersPush& src);
 private:
  ::std::int32_t __fbthrift_field_streamId;
 private:
  ::apache::thrift::HeadersPayloadContent __fbthrift_field_headersPayloadContent;
 private:
  apache::thrift::detail::isset_bitset<2, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> streamId_ref() const& {
    return {this->__fbthrift_field_streamId, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> streamId_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_streamId), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> streamId_ref() & {
    return {this->__fbthrift_field_streamId, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> streamId_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_streamId), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> streamId() const& {
    return {this->__fbthrift_field_streamId, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> streamId() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_streamId), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> streamId() & {
    return {this->__fbthrift_field_streamId, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> streamId() && {
    return {static_cast<T&&>(this->__fbthrift_field_streamId), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::HeadersPayloadContent>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> headersPayloadContent_ref() const& {
    return {this->__fbthrift_field_headersPayloadContent, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::HeadersPayloadContent>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> headersPayloadContent_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_headersPayloadContent), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::HeadersPayloadContent>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> headersPayloadContent_ref() & {
    return {this->__fbthrift_field_headersPayloadContent, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::HeadersPayloadContent>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> headersPayloadContent_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_headersPayloadContent), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::HeadersPayloadContent>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> headersPayloadContent() const& {
    return {this->__fbthrift_field_headersPayloadContent, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::HeadersPayloadContent>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> headersPayloadContent() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_headersPayloadContent), __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::HeadersPayloadContent>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> headersPayloadContent() & {
    return {this->__fbthrift_field_headersPayloadContent, __isset.at(1), __isset.bit(1)};
  }

  template <typename..., typename T = ::apache::thrift::HeadersPayloadContent>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> headersPayloadContent() && {
    return {static_cast<T&&>(this->__fbthrift_field_headersPayloadContent), __isset.at(1), __isset.bit(1)};
  }

  const ::std::int32_t* get_streamId() const& {
    return streamId_ref() ? std::addressof(__fbthrift_field_streamId) : nullptr;
  }

  ::std::int32_t* get_streamId() & {
    return streamId_ref() ? std::addressof(__fbthrift_field_streamId) : nullptr;
  }
  ::std::int32_t* get_streamId() && = delete;

  [[deprecated("Use `FOO.streamId_ref() = BAR;` instead of `FOO.set_streamId(BAR);`")]]
  ::std::int32_t& set_streamId(::std::int32_t streamId_) {
    streamId_ref() = streamId_;
    return __fbthrift_field_streamId;
  }
  const ::apache::thrift::HeadersPayloadContent* get_headersPayloadContent() const&;
  ::apache::thrift::HeadersPayloadContent* get_headersPayloadContent() &;
  ::apache::thrift::HeadersPayloadContent* get_headersPayloadContent() && = delete;

  template <typename T_StreamHeadersPush_headersPayloadContent_struct_setter = ::apache::thrift::HeadersPayloadContent>
  [[deprecated("Use `FOO.headersPayloadContent_ref() = BAR;` instead of `FOO.set_headersPayloadContent(BAR);`")]]
  ::apache::thrift::HeadersPayloadContent& set_headersPayloadContent(T_StreamHeadersPush_headersPayloadContent_struct_setter&& headersPayloadContent_) {
    headersPayloadContent_ref() = std::forward<T_StreamHeadersPush_headersPayloadContent_struct_setter>(headersPayloadContent_);
    return __fbthrift_field_headersPayloadContent;
  }

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

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


class TransportMetadataPush 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::transportMetadata
  >;

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


 public:

  TransportMetadataPush();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  TransportMetadataPush(apache::thrift::FragileConstructor, folly::F14NodeMap<::std::string, ::std::string> transportMetadata__arg);

  TransportMetadataPush(TransportMetadataPush&&) noexcept;

  TransportMetadataPush(const TransportMetadataPush& src);


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

  ~TransportMetadataPush();

 private:
  folly::F14NodeMap<::std::string, ::std::string> __fbthrift_field_transportMetadata;
 private:
  apache::thrift::detail::isset_bitset<1, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> transportMetadata_ref() const& {
    return {this->__fbthrift_field_transportMetadata, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> transportMetadata_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_transportMetadata), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> transportMetadata_ref() & {
    return {this->__fbthrift_field_transportMetadata, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> transportMetadata_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_transportMetadata), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> transportMetadata() const& {
    return {this->__fbthrift_field_transportMetadata, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> transportMetadata() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_transportMetadata), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> transportMetadata() & {
    return {this->__fbthrift_field_transportMetadata, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = folly::F14NodeMap<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> transportMetadata() && {
    return {static_cast<T&&>(this->__fbthrift_field_transportMetadata), __isset.at(0), __isset.bit(0)};
  }
  const folly::F14NodeMap<::std::string, ::std::string>* get_transportMetadata() const&;
  folly::F14NodeMap<::std::string, ::std::string>* get_transportMetadata() &;
  folly::F14NodeMap<::std::string, ::std::string>* get_transportMetadata() && = delete;

  template <typename T_TransportMetadataPush_transportMetadata_struct_setter = folly::F14NodeMap<::std::string, ::std::string>>
  [[deprecated("Use `FOO.transportMetadata_ref() = BAR;` instead of `FOO.set_transportMetadata(BAR);`")]]
  folly::F14NodeMap<::std::string, ::std::string>& set_transportMetadata(T_TransportMetadataPush_transportMetadata_struct_setter&& transportMetadata_) {
    transportMetadata_ref() = std::forward<T_TransportMetadataPush_transportMetadata_struct_setter>(transportMetadata_);
    return __fbthrift_field_transportMetadata;
  }

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

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


class DrainCompletePush 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::drainCompleteCode
  >;

  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<::apache::thrift::DrainCompleteCode>
  >;

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


 public:

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

  DrainCompletePush(DrainCompletePush&&) = default;

  DrainCompletePush(const DrainCompletePush&) = default;


  DrainCompletePush& operator=(DrainCompletePush&&) = default;

  DrainCompletePush& operator=(const DrainCompletePush&) = default;
 private:
  ::apache::thrift::DrainCompleteCode __fbthrift_field_drainCompleteCode;
 private:
  apache::thrift::detail::isset_bitset<1, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

  template <typename..., typename T = ::apache::thrift::DrainCompleteCode>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> drainCompleteCode_ref() const& {
    return {this->__fbthrift_field_drainCompleteCode, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::DrainCompleteCode>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> drainCompleteCode_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_drainCompleteCode), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::DrainCompleteCode>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> drainCompleteCode_ref() & {
    return {this->__fbthrift_field_drainCompleteCode, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::DrainCompleteCode>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> drainCompleteCode_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_drainCompleteCode), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::DrainCompleteCode>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> drainCompleteCode() const& {
    return {this->__fbthrift_field_drainCompleteCode, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::DrainCompleteCode>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> drainCompleteCode() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_drainCompleteCode), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::DrainCompleteCode>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> drainCompleteCode() & {
    return {this->__fbthrift_field_drainCompleteCode, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::DrainCompleteCode>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> drainCompleteCode() && {
    return {static_cast<T&&>(this->__fbthrift_field_drainCompleteCode), __isset.at(0), __isset.bit(0)};
  }

  const ::apache::thrift::DrainCompleteCode* get_drainCompleteCode() const& {
    return drainCompleteCode_ref() ? std::addressof(__fbthrift_field_drainCompleteCode) : nullptr;
  }

  ::apache::thrift::DrainCompleteCode* get_drainCompleteCode() & {
    return drainCompleteCode_ref() ? std::addressof(__fbthrift_field_drainCompleteCode) : nullptr;
  }
  ::apache::thrift::DrainCompleteCode* get_drainCompleteCode() && = delete;

  [[deprecated("Use `FOO.drainCompleteCode_ref() = BAR;` instead of `FOO.set_drainCompleteCode(BAR);`")]]
  ::apache::thrift::DrainCompleteCode& set_drainCompleteCode(::apache::thrift::DrainCompleteCode drainCompleteCode_) {
    drainCompleteCode_ref() = drainCompleteCode_;
    return __fbthrift_field_drainCompleteCode;
  }

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

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


class ServerPushMetadata 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::setupResponse,
    ::apache::thrift::ident::streamHeadersPush,
    ::apache::thrift::ident::drainCompletePush
  >;

  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::struct_t<::apache::thrift::SetupResponse>,
    ::apache::thrift::type::struct_t<::apache::thrift::StreamHeadersPush>,
    ::apache::thrift::type::struct_t<::apache::thrift::DrainCompletePush>
  >;

  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 = ServerPushMetadata;
  static constexpr bool __fbthrift_cpp2_is_union =
    true;


 public:
  enum Type : int {
    __EMPTY__ = 0,
    setupResponse = 1,
    streamHeadersPush = 2,
    drainCompletePush = 3,
  } ;

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

  ServerPushMetadata(ServerPushMetadata&& rhs) noexcept
      : type_(folly::to_underlying(Type::__EMPTY__)) {
    if (this == &rhs) { return; }
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return;
      }
      case Type::setupResponse:
      {
        set_setupResponse(std::move(rhs.value_.setupResponse));
        break;
      }
      case Type::streamHeadersPush:
      {
        set_streamHeadersPush(std::move(rhs.value_.streamHeadersPush));
        break;
      }
      case Type::drainCompletePush:
      {
        set_drainCompletePush(std::move(rhs.value_.drainCompletePush));
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
    apache::thrift::clear(rhs);
  }

  ServerPushMetadata(const ServerPushMetadata& rhs)
      : type_(folly::to_underlying(Type::__EMPTY__)) {
    if (this == &rhs) { return; }
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return;
      }
      case Type::setupResponse:
      {
        set_setupResponse(rhs.value_.setupResponse);
        break;
      }
      case Type::streamHeadersPush:
      {
        set_streamHeadersPush(rhs.value_.streamHeadersPush);
        break;
      }
      case Type::drainCompletePush:
      {
        set_drainCompletePush(rhs.value_.drainCompletePush);
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
  }

  ServerPushMetadata& operator=(ServerPushMetadata&& rhs) noexcept {
    if (this == &rhs) { return *this; }
    __fbthrift_clear();
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return *this;
      }
      case Type::setupResponse:
      {
        set_setupResponse(std::move(rhs.value_.setupResponse));
        break;
      }
      case Type::streamHeadersPush:
      {
        set_streamHeadersPush(std::move(rhs.value_.streamHeadersPush));
        break;
      }
      case Type::drainCompletePush:
      {
        set_drainCompletePush(std::move(rhs.value_.drainCompletePush));
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
    apache::thrift::clear(rhs);
    return *this;
  }

  ServerPushMetadata& operator=(const ServerPushMetadata& rhs) {
    if (this == &rhs) { return *this; }
    __fbthrift_clear();
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return *this;
      }
      case Type::setupResponse:
      {
        set_setupResponse(rhs.value_.setupResponse);
        break;
      }
      case Type::streamHeadersPush:
      {
        set_streamHeadersPush(rhs.value_.streamHeadersPush);
        break;
      }
      case Type::drainCompletePush:
      {
        set_drainCompletePush(rhs.value_.drainCompletePush);
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
    return *this;
  }

  ~ServerPushMetadata();

  union storage_type {
    ::apache::thrift::SetupResponse setupResponse;
    ::apache::thrift::StreamHeadersPush streamHeadersPush;
    ::apache::thrift::DrainCompletePush drainCompletePush;

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

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

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::SetupResponse& set_setupResponse(::apache::thrift::SetupResponse const &t) {
    using T0 = ::apache::thrift::SetupResponse;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::setupResponse);
    ::new (std::addressof(value_.setupResponse)) T(t);
    return value_.setupResponse;
  }

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::SetupResponse& set_setupResponse(::apache::thrift::SetupResponse&& t) {
    using T0 = ::apache::thrift::SetupResponse;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::setupResponse);
    ::new (std::addressof(value_.setupResponse)) T(std::move(t));
    return value_.setupResponse;
  }

  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::SetupResponse, T...>> ::apache::thrift::SetupResponse& set_setupResponse(T&&... t) {
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::setupResponse);
    ::new (std::addressof(value_.setupResponse)) ::apache::thrift::SetupResponse(std::forward<T>(t)...);
    return value_.setupResponse;
  }

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::StreamHeadersPush& set_streamHeadersPush(::apache::thrift::StreamHeadersPush const &t) {
    using T0 = ::apache::thrift::StreamHeadersPush;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::streamHeadersPush);
    ::new (std::addressof(value_.streamHeadersPush)) T(t);
    return value_.streamHeadersPush;
  }

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::StreamHeadersPush& set_streamHeadersPush(::apache::thrift::StreamHeadersPush&& t) {
    using T0 = ::apache::thrift::StreamHeadersPush;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::streamHeadersPush);
    ::new (std::addressof(value_.streamHeadersPush)) T(std::move(t));
    return value_.streamHeadersPush;
  }

  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::StreamHeadersPush, T...>> ::apache::thrift::StreamHeadersPush& set_streamHeadersPush(T&&... t) {
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::streamHeadersPush);
    ::new (std::addressof(value_.streamHeadersPush)) ::apache::thrift::StreamHeadersPush(std::forward<T>(t)...);
    return value_.streamHeadersPush;
  }

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::DrainCompletePush& set_drainCompletePush(::apache::thrift::DrainCompletePush const &t) {
    using T0 = ::apache::thrift::DrainCompletePush;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::drainCompletePush);
    ::new (std::addressof(value_.drainCompletePush)) T(t);
    return value_.drainCompletePush;
  }

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::DrainCompletePush& set_drainCompletePush(::apache::thrift::DrainCompletePush&& t) {
    using T0 = ::apache::thrift::DrainCompletePush;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::drainCompletePush);
    ::new (std::addressof(value_.drainCompletePush)) T(std::move(t));
    return value_.drainCompletePush;
  }

  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::DrainCompletePush, T...>> ::apache::thrift::DrainCompletePush& set_drainCompletePush(T&&... t) {
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::drainCompletePush);
    ::new (std::addressof(value_.drainCompletePush)) ::apache::thrift::DrainCompletePush(std::forward<T>(t)...);
    return value_.drainCompletePush;
  }

  ::apache::thrift::SetupResponse const& get_setupResponse() const {
    if (getType() != Type::setupResponse) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.setupResponse;
  }

  ::apache::thrift::StreamHeadersPush const& get_streamHeadersPush() const {
    if (getType() != Type::streamHeadersPush) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.streamHeadersPush;
  }

  ::apache::thrift::DrainCompletePush const& get_drainCompletePush() const {
    if (getType() != Type::drainCompletePush) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.drainCompletePush;
  }

  ::apache::thrift::SetupResponse& mutable_setupResponse() {
    assert(getType() == Type::setupResponse);
    return value_.setupResponse;
  }

  ::apache::thrift::StreamHeadersPush& mutable_streamHeadersPush() {
    assert(getType() == Type::streamHeadersPush);
    return value_.streamHeadersPush;
  }

  ::apache::thrift::DrainCompletePush& mutable_drainCompletePush() {
    assert(getType() == Type::drainCompletePush);
    return value_.drainCompletePush;
  }

  ::apache::thrift::SetupResponse move_setupResponse() {
    assert(getType() == Type::setupResponse);
    return std::move(value_.setupResponse);
  }

  ::apache::thrift::StreamHeadersPush move_streamHeadersPush() {
    assert(getType() == Type::streamHeadersPush);
    return std::move(value_.streamHeadersPush);
  }

  ::apache::thrift::DrainCompletePush move_drainCompletePush() {
    assert(getType() == Type::drainCompletePush);
    return std::move(value_.drainCompletePush);
  }

  template <typename..., typename T = ::apache::thrift::SetupResponse>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> setupResponse_ref() const& {
    return {value_.setupResponse, type_, folly::to_underlying(Type::setupResponse), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::SetupResponse>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> setupResponse_ref() const&& {
    return {std::move(value_.setupResponse), type_, folly::to_underlying(Type::setupResponse), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::SetupResponse>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> setupResponse_ref() & {
    return {value_.setupResponse, type_, folly::to_underlying(Type::setupResponse), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::SetupResponse>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> setupResponse_ref() && {
    return {std::move(value_.setupResponse), type_, folly::to_underlying(Type::setupResponse), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  template <typename..., typename T = ::apache::thrift::StreamHeadersPush>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> streamHeadersPush_ref() const& {
    return {value_.streamHeadersPush, type_, folly::to_underlying(Type::streamHeadersPush), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::StreamHeadersPush>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> streamHeadersPush_ref() const&& {
    return {std::move(value_.streamHeadersPush), type_, folly::to_underlying(Type::streamHeadersPush), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::StreamHeadersPush>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> streamHeadersPush_ref() & {
    return {value_.streamHeadersPush, type_, folly::to_underlying(Type::streamHeadersPush), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::StreamHeadersPush>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> streamHeadersPush_ref() && {
    return {std::move(value_.streamHeadersPush), type_, folly::to_underlying(Type::streamHeadersPush), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  template <typename..., typename T = ::apache::thrift::DrainCompletePush>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> drainCompletePush_ref() const& {
    return {value_.drainCompletePush, type_, folly::to_underlying(Type::drainCompletePush), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::DrainCompletePush>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> drainCompletePush_ref() const&& {
    return {std::move(value_.drainCompletePush), type_, folly::to_underlying(Type::drainCompletePush), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::DrainCompletePush>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> drainCompletePush_ref() & {
    return {value_.drainCompletePush, type_, folly::to_underlying(Type::drainCompletePush), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::DrainCompletePush>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> drainCompletePush_ref() && {
    return {std::move(value_.drainCompletePush), type_, folly::to_underlying(Type::drainCompletePush), 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<ServerPushMetadata>;
  friend void swap(ServerPushMetadata& a, ServerPushMetadata& b);
};

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


class ClientPushMetadata 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::interactionTerminate,
    ::apache::thrift::ident::streamHeadersPush,
    ::apache::thrift::ident::transportMetadataPush
  >;

  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::struct_t<::apache::thrift::InteractionTerminate>,
    ::apache::thrift::type::struct_t<::apache::thrift::StreamHeadersPush>,
    ::apache::thrift::type::struct_t<::apache::thrift::TransportMetadataPush>
  >;

  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 = ClientPushMetadata;
  static constexpr bool __fbthrift_cpp2_is_union =
    true;


 public:
  enum Type : int {
    __EMPTY__ = 0,
    interactionTerminate = 1,
    streamHeadersPush = 2,
    transportMetadataPush = 3,
  } ;

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

  ClientPushMetadata(ClientPushMetadata&& rhs) noexcept
      : type_(folly::to_underlying(Type::__EMPTY__)) {
    if (this == &rhs) { return; }
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return;
      }
      case Type::interactionTerminate:
      {
        set_interactionTerminate(std::move(rhs.value_.interactionTerminate));
        break;
      }
      case Type::streamHeadersPush:
      {
        set_streamHeadersPush(std::move(rhs.value_.streamHeadersPush));
        break;
      }
      case Type::transportMetadataPush:
      {
        set_transportMetadataPush(std::move(rhs.value_.transportMetadataPush));
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
    apache::thrift::clear(rhs);
  }

  ClientPushMetadata(const ClientPushMetadata& rhs)
      : type_(folly::to_underlying(Type::__EMPTY__)) {
    if (this == &rhs) { return; }
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return;
      }
      case Type::interactionTerminate:
      {
        set_interactionTerminate(rhs.value_.interactionTerminate);
        break;
      }
      case Type::streamHeadersPush:
      {
        set_streamHeadersPush(rhs.value_.streamHeadersPush);
        break;
      }
      case Type::transportMetadataPush:
      {
        set_transportMetadataPush(rhs.value_.transportMetadataPush);
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
  }

  ClientPushMetadata& operator=(ClientPushMetadata&& rhs) noexcept {
    if (this == &rhs) { return *this; }
    __fbthrift_clear();
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return *this;
      }
      case Type::interactionTerminate:
      {
        set_interactionTerminate(std::move(rhs.value_.interactionTerminate));
        break;
      }
      case Type::streamHeadersPush:
      {
        set_streamHeadersPush(std::move(rhs.value_.streamHeadersPush));
        break;
      }
      case Type::transportMetadataPush:
      {
        set_transportMetadataPush(std::move(rhs.value_.transportMetadataPush));
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
    apache::thrift::clear(rhs);
    return *this;
  }

  ClientPushMetadata& operator=(const ClientPushMetadata& rhs) {
    if (this == &rhs) { return *this; }
    __fbthrift_clear();
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return *this;
      }
      case Type::interactionTerminate:
      {
        set_interactionTerminate(rhs.value_.interactionTerminate);
        break;
      }
      case Type::streamHeadersPush:
      {
        set_streamHeadersPush(rhs.value_.streamHeadersPush);
        break;
      }
      case Type::transportMetadataPush:
      {
        set_transportMetadataPush(rhs.value_.transportMetadataPush);
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
    return *this;
  }

  ~ClientPushMetadata();

  union storage_type {
    ::apache::thrift::InteractionTerminate interactionTerminate;
    ::apache::thrift::StreamHeadersPush streamHeadersPush;
    ::apache::thrift::TransportMetadataPush transportMetadataPush;

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

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

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::InteractionTerminate& set_interactionTerminate(::apache::thrift::InteractionTerminate const &t) {
    using T0 = ::apache::thrift::InteractionTerminate;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::interactionTerminate);
    ::new (std::addressof(value_.interactionTerminate)) T(t);
    return value_.interactionTerminate;
  }

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::InteractionTerminate& set_interactionTerminate(::apache::thrift::InteractionTerminate&& t) {
    using T0 = ::apache::thrift::InteractionTerminate;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::interactionTerminate);
    ::new (std::addressof(value_.interactionTerminate)) T(std::move(t));
    return value_.interactionTerminate;
  }

  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::InteractionTerminate, T...>> ::apache::thrift::InteractionTerminate& set_interactionTerminate(T&&... t) {
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::interactionTerminate);
    ::new (std::addressof(value_.interactionTerminate)) ::apache::thrift::InteractionTerminate(std::forward<T>(t)...);
    return value_.interactionTerminate;
  }

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::StreamHeadersPush& set_streamHeadersPush(::apache::thrift::StreamHeadersPush const &t) {
    using T0 = ::apache::thrift::StreamHeadersPush;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::streamHeadersPush);
    ::new (std::addressof(value_.streamHeadersPush)) T(t);
    return value_.streamHeadersPush;
  }

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::StreamHeadersPush& set_streamHeadersPush(::apache::thrift::StreamHeadersPush&& t) {
    using T0 = ::apache::thrift::StreamHeadersPush;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::streamHeadersPush);
    ::new (std::addressof(value_.streamHeadersPush)) T(std::move(t));
    return value_.streamHeadersPush;
  }

  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::StreamHeadersPush, T...>> ::apache::thrift::StreamHeadersPush& set_streamHeadersPush(T&&... t) {
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::streamHeadersPush);
    ::new (std::addressof(value_.streamHeadersPush)) ::apache::thrift::StreamHeadersPush(std::forward<T>(t)...);
    return value_.streamHeadersPush;
  }

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::TransportMetadataPush& set_transportMetadataPush(::apache::thrift::TransportMetadataPush const &t) {
    using T0 = ::apache::thrift::TransportMetadataPush;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::transportMetadataPush);
    ::new (std::addressof(value_.transportMetadataPush)) T(t);
    return value_.transportMetadataPush;
  }

  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::apache::thrift::TransportMetadataPush& set_transportMetadataPush(::apache::thrift::TransportMetadataPush&& t) {
    using T0 = ::apache::thrift::TransportMetadataPush;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::transportMetadataPush);
    ::new (std::addressof(value_.transportMetadataPush)) T(std::move(t));
    return value_.transportMetadataPush;
  }

  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::TransportMetadataPush, T...>> ::apache::thrift::TransportMetadataPush& set_transportMetadataPush(T&&... t) {
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::transportMetadataPush);
    ::new (std::addressof(value_.transportMetadataPush)) ::apache::thrift::TransportMetadataPush(std::forward<T>(t)...);
    return value_.transportMetadataPush;
  }

  ::apache::thrift::InteractionTerminate const& get_interactionTerminate() const {
    if (getType() != Type::interactionTerminate) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.interactionTerminate;
  }

  ::apache::thrift::StreamHeadersPush const& get_streamHeadersPush() const {
    if (getType() != Type::streamHeadersPush) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.streamHeadersPush;
  }

  ::apache::thrift::TransportMetadataPush const& get_transportMetadataPush() const {
    if (getType() != Type::transportMetadataPush) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.transportMetadataPush;
  }

  ::apache::thrift::InteractionTerminate& mutable_interactionTerminate() {
    assert(getType() == Type::interactionTerminate);
    return value_.interactionTerminate;
  }

  ::apache::thrift::StreamHeadersPush& mutable_streamHeadersPush() {
    assert(getType() == Type::streamHeadersPush);
    return value_.streamHeadersPush;
  }

  ::apache::thrift::TransportMetadataPush& mutable_transportMetadataPush() {
    assert(getType() == Type::transportMetadataPush);
    return value_.transportMetadataPush;
  }

  ::apache::thrift::InteractionTerminate move_interactionTerminate() {
    assert(getType() == Type::interactionTerminate);
    return std::move(value_.interactionTerminate);
  }

  ::apache::thrift::StreamHeadersPush move_streamHeadersPush() {
    assert(getType() == Type::streamHeadersPush);
    return std::move(value_.streamHeadersPush);
  }

  ::apache::thrift::TransportMetadataPush move_transportMetadataPush() {
    assert(getType() == Type::transportMetadataPush);
    return std::move(value_.transportMetadataPush);
  }

  template <typename..., typename T = ::apache::thrift::InteractionTerminate>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> interactionTerminate_ref() const& {
    return {value_.interactionTerminate, type_, folly::to_underlying(Type::interactionTerminate), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::InteractionTerminate>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> interactionTerminate_ref() const&& {
    return {std::move(value_.interactionTerminate), type_, folly::to_underlying(Type::interactionTerminate), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::InteractionTerminate>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> interactionTerminate_ref() & {
    return {value_.interactionTerminate, type_, folly::to_underlying(Type::interactionTerminate), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::InteractionTerminate>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> interactionTerminate_ref() && {
    return {std::move(value_.interactionTerminate), type_, folly::to_underlying(Type::interactionTerminate), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  template <typename..., typename T = ::apache::thrift::StreamHeadersPush>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> streamHeadersPush_ref() const& {
    return {value_.streamHeadersPush, type_, folly::to_underlying(Type::streamHeadersPush), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::StreamHeadersPush>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> streamHeadersPush_ref() const&& {
    return {std::move(value_.streamHeadersPush), type_, folly::to_underlying(Type::streamHeadersPush), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::StreamHeadersPush>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> streamHeadersPush_ref() & {
    return {value_.streamHeadersPush, type_, folly::to_underlying(Type::streamHeadersPush), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::StreamHeadersPush>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> streamHeadersPush_ref() && {
    return {std::move(value_.streamHeadersPush), type_, folly::to_underlying(Type::streamHeadersPush), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  template <typename..., typename T = ::apache::thrift::TransportMetadataPush>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> transportMetadataPush_ref() const& {
    return {value_.transportMetadataPush, type_, folly::to_underlying(Type::transportMetadataPush), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::TransportMetadataPush>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> transportMetadataPush_ref() const&& {
    return {std::move(value_.transportMetadataPush), type_, folly::to_underlying(Type::transportMetadataPush), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::TransportMetadataPush>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> transportMetadataPush_ref() & {
    return {value_.transportMetadataPush, type_, folly::to_underlying(Type::transportMetadataPush), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  template <typename..., typename T = ::apache::thrift::TransportMetadataPush>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> transportMetadataPush_ref() && {
    return {std::move(value_.transportMetadataPush), type_, folly::to_underlying(Type::transportMetadataPush), 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<ClientPushMetadata>;
  friend void swap(ClientPushMetadata& a, ClientPushMetadata& b);
};

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


class HeadersPayloadMetadata 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 = true;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  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::compression
  >;

  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<::apache::thrift::CompressionAlgorithm>
  >;

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


 public:

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

  HeadersPayloadMetadata(HeadersPayloadMetadata&&) = default;

  HeadersPayloadMetadata(const HeadersPayloadMetadata&) = default;


  HeadersPayloadMetadata& operator=(HeadersPayloadMetadata&&) = default;

  HeadersPayloadMetadata& operator=(const HeadersPayloadMetadata&) = default;
 private:
  ::apache::thrift::CompressionAlgorithm __fbthrift_field_compression;
 private:
  apache::thrift::detail::isset_bitset<1, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

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

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> compression_ref() const& {
    return {this->__fbthrift_field_compression, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> compression_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_compression), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> compression_ref() & {
    return {this->__fbthrift_field_compression, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> compression_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_compression), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> compression() const& {
    return {this->__fbthrift_field_compression, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> compression() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_compression), __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> compression() & {
    return {this->__fbthrift_field_compression, __isset.at(0), __isset.bit(0)};
  }

  template <typename..., typename T = ::apache::thrift::CompressionAlgorithm>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> compression() && {
    return {static_cast<T&&>(this->__fbthrift_field_compression), __isset.at(0), __isset.bit(0)};
  }

  const ::apache::thrift::CompressionAlgorithm* get_compression() const& {
    return compression_ref() ? std::addressof(__fbthrift_field_compression) : nullptr;
  }

  ::apache::thrift::CompressionAlgorithm* get_compression() & {
    return compression_ref() ? std::addressof(__fbthrift_field_compression) : nullptr;
  }
  ::apache::thrift::CompressionAlgorithm* get_compression() && = delete;

  [[deprecated("Use `FOO.compression_ref() = BAR;` instead of `FOO.set_compression(BAR);`")]]
  ::apache::thrift::CompressionAlgorithm& set_compression(::apache::thrift::CompressionAlgorithm compression_) {
    compression_ref() = compression_;
    return __fbthrift_field_compression;
  }

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

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


}} // apache::thrift

namespace apache { namespace thrift {

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

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

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

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

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

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

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

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

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

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

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

  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();
  }
};

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

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

  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();
  }
};
}} // apache::thrift
