/**
 * Autogenerated by Thrift for /opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift
 *
 * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 *  @generated @nocommit
 */

#pragma once

#include <thrift/lib/cpp2/gen/module_types_h.h>
#include "thrift/lib/thrift/gen-cpp2/id_types.h"
#include "thrift/lib/thrift/gen-cpp2/standard_types.h"
#include "thrift/lib/thrift/gen-cpp2/protocol_types.h"
#include "thrift/lib/thrift/gen-cpp2/type_types.h"
#include <deque>

namespace apache::thrift {
namespace ident {
struct fields;
struct type;
struct fields;
struct scheme;
struct domain;
struct path;
struct query;
struct fragment;
struct name;
struct uri;
struct structuredAnnotations;
struct annotations;
struct annotationsByKey;
struct unstructuredAnnotations;
struct docs;
struct sourceRange;
struct programId;
struct beginLine;
struct beginColumn;
struct endLine;
struct endColumn;
struct contents;
struct sourceRange;
struct uri;
struct attrs;
struct value;
struct attrs;
struct values;
struct id;
struct qualifier;
struct type;
struct attrs;
struct customDefault;
struct attrs;
struct fields;
struct attrs;
struct fields;
struct attrs;
struct fields;
struct safety;
struct kind;
struct blame;
struct fields;
struct payload;
struct exceptions;
struct payload;
struct clientExceptions;
struct finalResponse;
struct serverExceptions;
struct attrs;
struct functions;
struct thriftType;
struct streamType;
struct sinkType;
struct interactionType;
struct qualifier;
struct returnTypes;
struct attrs;
struct paramlist;
struct exceptions;
struct returnType;
struct streamOrSink;
struct interactionType;
struct isPerforms;
struct attrs;
struct functions;
struct baseService;
struct attrs;
struct type;
struct value;
struct attrs;
struct type;
struct structDef;
struct unionDef;
struct exceptionDef;
struct enumDef;
struct typedefDef;
struct constDef;
struct serviceDef;
struct interactionDef;
struct attrs;
struct id;
struct includes;
struct definitions;
struct definitionKeys;
struct path;
struct languageIncludes;
struct namespaces;
struct programs;
struct values;
struct valuesMap;
struct definitions;
struct definitionsMap;
struct sources;
struct identifierSourceRanges;
struct includeSourceRanges;
struct fileName;
struct languageIncludes;
struct namespaces;
struct range;
struct uri;
struct enumValue;
struct range;
struct target;
} // namespace ident
namespace detail {
#ifndef APACHE_THRIFT_ACCESSOR_fields
#define APACHE_THRIFT_ACCESSOR_fields
APACHE_THRIFT_DEFINE_ACCESSOR(fields);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_type
#define APACHE_THRIFT_ACCESSOR_type
APACHE_THRIFT_DEFINE_ACCESSOR(type);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_fields
#define APACHE_THRIFT_ACCESSOR_fields
APACHE_THRIFT_DEFINE_ACCESSOR(fields);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_scheme
#define APACHE_THRIFT_ACCESSOR_scheme
APACHE_THRIFT_DEFINE_ACCESSOR(scheme);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_domain
#define APACHE_THRIFT_ACCESSOR_domain
APACHE_THRIFT_DEFINE_ACCESSOR(domain);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_path
#define APACHE_THRIFT_ACCESSOR_path
APACHE_THRIFT_DEFINE_ACCESSOR(path);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_query
#define APACHE_THRIFT_ACCESSOR_query
APACHE_THRIFT_DEFINE_ACCESSOR(query);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_fragment
#define APACHE_THRIFT_ACCESSOR_fragment
APACHE_THRIFT_DEFINE_ACCESSOR(fragment);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_name
#define APACHE_THRIFT_ACCESSOR_name
APACHE_THRIFT_DEFINE_ACCESSOR(name);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_uri
#define APACHE_THRIFT_ACCESSOR_uri
APACHE_THRIFT_DEFINE_ACCESSOR(uri);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_structuredAnnotations
#define APACHE_THRIFT_ACCESSOR_structuredAnnotations
APACHE_THRIFT_DEFINE_ACCESSOR(structuredAnnotations);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_annotations
#define APACHE_THRIFT_ACCESSOR_annotations
APACHE_THRIFT_DEFINE_ACCESSOR(annotations);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_annotationsByKey
#define APACHE_THRIFT_ACCESSOR_annotationsByKey
APACHE_THRIFT_DEFINE_ACCESSOR(annotationsByKey);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_unstructuredAnnotations
#define APACHE_THRIFT_ACCESSOR_unstructuredAnnotations
APACHE_THRIFT_DEFINE_ACCESSOR(unstructuredAnnotations);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_docs
#define APACHE_THRIFT_ACCESSOR_docs
APACHE_THRIFT_DEFINE_ACCESSOR(docs);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_sourceRange
#define APACHE_THRIFT_ACCESSOR_sourceRange
APACHE_THRIFT_DEFINE_ACCESSOR(sourceRange);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_programId
#define APACHE_THRIFT_ACCESSOR_programId
APACHE_THRIFT_DEFINE_ACCESSOR(programId);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_beginLine
#define APACHE_THRIFT_ACCESSOR_beginLine
APACHE_THRIFT_DEFINE_ACCESSOR(beginLine);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_beginColumn
#define APACHE_THRIFT_ACCESSOR_beginColumn
APACHE_THRIFT_DEFINE_ACCESSOR(beginColumn);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_endLine
#define APACHE_THRIFT_ACCESSOR_endLine
APACHE_THRIFT_DEFINE_ACCESSOR(endLine);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_endColumn
#define APACHE_THRIFT_ACCESSOR_endColumn
APACHE_THRIFT_DEFINE_ACCESSOR(endColumn);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_contents
#define APACHE_THRIFT_ACCESSOR_contents
APACHE_THRIFT_DEFINE_ACCESSOR(contents);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_sourceRange
#define APACHE_THRIFT_ACCESSOR_sourceRange
APACHE_THRIFT_DEFINE_ACCESSOR(sourceRange);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_uri
#define APACHE_THRIFT_ACCESSOR_uri
APACHE_THRIFT_DEFINE_ACCESSOR(uri);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_attrs
#define APACHE_THRIFT_ACCESSOR_attrs
APACHE_THRIFT_DEFINE_ACCESSOR(attrs);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_value
#define APACHE_THRIFT_ACCESSOR_value
APACHE_THRIFT_DEFINE_ACCESSOR(value);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_attrs
#define APACHE_THRIFT_ACCESSOR_attrs
APACHE_THRIFT_DEFINE_ACCESSOR(attrs);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_values
#define APACHE_THRIFT_ACCESSOR_values
APACHE_THRIFT_DEFINE_ACCESSOR(values);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_id
#define APACHE_THRIFT_ACCESSOR_id
APACHE_THRIFT_DEFINE_ACCESSOR(id);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_qualifier
#define APACHE_THRIFT_ACCESSOR_qualifier
APACHE_THRIFT_DEFINE_ACCESSOR(qualifier);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_type
#define APACHE_THRIFT_ACCESSOR_type
APACHE_THRIFT_DEFINE_ACCESSOR(type);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_attrs
#define APACHE_THRIFT_ACCESSOR_attrs
APACHE_THRIFT_DEFINE_ACCESSOR(attrs);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_customDefault
#define APACHE_THRIFT_ACCESSOR_customDefault
APACHE_THRIFT_DEFINE_ACCESSOR(customDefault);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_attrs
#define APACHE_THRIFT_ACCESSOR_attrs
APACHE_THRIFT_DEFINE_ACCESSOR(attrs);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_fields
#define APACHE_THRIFT_ACCESSOR_fields
APACHE_THRIFT_DEFINE_ACCESSOR(fields);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_attrs
#define APACHE_THRIFT_ACCESSOR_attrs
APACHE_THRIFT_DEFINE_ACCESSOR(attrs);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_fields
#define APACHE_THRIFT_ACCESSOR_fields
APACHE_THRIFT_DEFINE_ACCESSOR(fields);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_attrs
#define APACHE_THRIFT_ACCESSOR_attrs
APACHE_THRIFT_DEFINE_ACCESSOR(attrs);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_fields
#define APACHE_THRIFT_ACCESSOR_fields
APACHE_THRIFT_DEFINE_ACCESSOR(fields);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_safety
#define APACHE_THRIFT_ACCESSOR_safety
APACHE_THRIFT_DEFINE_ACCESSOR(safety);
#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_fields
#define APACHE_THRIFT_ACCESSOR_fields
APACHE_THRIFT_DEFINE_ACCESSOR(fields);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_payload
#define APACHE_THRIFT_ACCESSOR_payload
APACHE_THRIFT_DEFINE_ACCESSOR(payload);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_exceptions
#define APACHE_THRIFT_ACCESSOR_exceptions
APACHE_THRIFT_DEFINE_ACCESSOR(exceptions);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_payload
#define APACHE_THRIFT_ACCESSOR_payload
APACHE_THRIFT_DEFINE_ACCESSOR(payload);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_clientExceptions
#define APACHE_THRIFT_ACCESSOR_clientExceptions
APACHE_THRIFT_DEFINE_ACCESSOR(clientExceptions);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_finalResponse
#define APACHE_THRIFT_ACCESSOR_finalResponse
APACHE_THRIFT_DEFINE_ACCESSOR(finalResponse);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_serverExceptions
#define APACHE_THRIFT_ACCESSOR_serverExceptions
APACHE_THRIFT_DEFINE_ACCESSOR(serverExceptions);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_attrs
#define APACHE_THRIFT_ACCESSOR_attrs
APACHE_THRIFT_DEFINE_ACCESSOR(attrs);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_functions
#define APACHE_THRIFT_ACCESSOR_functions
APACHE_THRIFT_DEFINE_ACCESSOR(functions);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_thriftType
#define APACHE_THRIFT_ACCESSOR_thriftType
APACHE_THRIFT_DEFINE_ACCESSOR(thriftType);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_streamType
#define APACHE_THRIFT_ACCESSOR_streamType
APACHE_THRIFT_DEFINE_ACCESSOR(streamType);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_sinkType
#define APACHE_THRIFT_ACCESSOR_sinkType
APACHE_THRIFT_DEFINE_ACCESSOR(sinkType);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_interactionType
#define APACHE_THRIFT_ACCESSOR_interactionType
APACHE_THRIFT_DEFINE_ACCESSOR(interactionType);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_qualifier
#define APACHE_THRIFT_ACCESSOR_qualifier
APACHE_THRIFT_DEFINE_ACCESSOR(qualifier);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_returnTypes
#define APACHE_THRIFT_ACCESSOR_returnTypes
APACHE_THRIFT_DEFINE_ACCESSOR(returnTypes);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_attrs
#define APACHE_THRIFT_ACCESSOR_attrs
APACHE_THRIFT_DEFINE_ACCESSOR(attrs);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_paramlist
#define APACHE_THRIFT_ACCESSOR_paramlist
APACHE_THRIFT_DEFINE_ACCESSOR(paramlist);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_exceptions
#define APACHE_THRIFT_ACCESSOR_exceptions
APACHE_THRIFT_DEFINE_ACCESSOR(exceptions);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_returnType
#define APACHE_THRIFT_ACCESSOR_returnType
APACHE_THRIFT_DEFINE_ACCESSOR(returnType);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_streamOrSink
#define APACHE_THRIFT_ACCESSOR_streamOrSink
APACHE_THRIFT_DEFINE_ACCESSOR(streamOrSink);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_interactionType
#define APACHE_THRIFT_ACCESSOR_interactionType
APACHE_THRIFT_DEFINE_ACCESSOR(interactionType);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_isPerforms
#define APACHE_THRIFT_ACCESSOR_isPerforms
APACHE_THRIFT_DEFINE_ACCESSOR(isPerforms);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_attrs
#define APACHE_THRIFT_ACCESSOR_attrs
APACHE_THRIFT_DEFINE_ACCESSOR(attrs);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_functions
#define APACHE_THRIFT_ACCESSOR_functions
APACHE_THRIFT_DEFINE_ACCESSOR(functions);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_baseService
#define APACHE_THRIFT_ACCESSOR_baseService
APACHE_THRIFT_DEFINE_ACCESSOR(baseService);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_attrs
#define APACHE_THRIFT_ACCESSOR_attrs
APACHE_THRIFT_DEFINE_ACCESSOR(attrs);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_type
#define APACHE_THRIFT_ACCESSOR_type
APACHE_THRIFT_DEFINE_ACCESSOR(type);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_value
#define APACHE_THRIFT_ACCESSOR_value
APACHE_THRIFT_DEFINE_ACCESSOR(value);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_attrs
#define APACHE_THRIFT_ACCESSOR_attrs
APACHE_THRIFT_DEFINE_ACCESSOR(attrs);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_type
#define APACHE_THRIFT_ACCESSOR_type
APACHE_THRIFT_DEFINE_ACCESSOR(type);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_structDef
#define APACHE_THRIFT_ACCESSOR_structDef
APACHE_THRIFT_DEFINE_ACCESSOR(structDef);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_unionDef
#define APACHE_THRIFT_ACCESSOR_unionDef
APACHE_THRIFT_DEFINE_ACCESSOR(unionDef);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_exceptionDef
#define APACHE_THRIFT_ACCESSOR_exceptionDef
APACHE_THRIFT_DEFINE_ACCESSOR(exceptionDef);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_enumDef
#define APACHE_THRIFT_ACCESSOR_enumDef
APACHE_THRIFT_DEFINE_ACCESSOR(enumDef);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_typedefDef
#define APACHE_THRIFT_ACCESSOR_typedefDef
APACHE_THRIFT_DEFINE_ACCESSOR(typedefDef);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_constDef
#define APACHE_THRIFT_ACCESSOR_constDef
APACHE_THRIFT_DEFINE_ACCESSOR(constDef);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_serviceDef
#define APACHE_THRIFT_ACCESSOR_serviceDef
APACHE_THRIFT_DEFINE_ACCESSOR(serviceDef);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_interactionDef
#define APACHE_THRIFT_ACCESSOR_interactionDef
APACHE_THRIFT_DEFINE_ACCESSOR(interactionDef);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_attrs
#define APACHE_THRIFT_ACCESSOR_attrs
APACHE_THRIFT_DEFINE_ACCESSOR(attrs);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_id
#define APACHE_THRIFT_ACCESSOR_id
APACHE_THRIFT_DEFINE_ACCESSOR(id);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_includes
#define APACHE_THRIFT_ACCESSOR_includes
APACHE_THRIFT_DEFINE_ACCESSOR(includes);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_definitions
#define APACHE_THRIFT_ACCESSOR_definitions
APACHE_THRIFT_DEFINE_ACCESSOR(definitions);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_definitionKeys
#define APACHE_THRIFT_ACCESSOR_definitionKeys
APACHE_THRIFT_DEFINE_ACCESSOR(definitionKeys);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_path
#define APACHE_THRIFT_ACCESSOR_path
APACHE_THRIFT_DEFINE_ACCESSOR(path);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_languageIncludes
#define APACHE_THRIFT_ACCESSOR_languageIncludes
APACHE_THRIFT_DEFINE_ACCESSOR(languageIncludes);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_namespaces
#define APACHE_THRIFT_ACCESSOR_namespaces
APACHE_THRIFT_DEFINE_ACCESSOR(namespaces);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_programs
#define APACHE_THRIFT_ACCESSOR_programs
APACHE_THRIFT_DEFINE_ACCESSOR(programs);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_values
#define APACHE_THRIFT_ACCESSOR_values
APACHE_THRIFT_DEFINE_ACCESSOR(values);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_valuesMap
#define APACHE_THRIFT_ACCESSOR_valuesMap
APACHE_THRIFT_DEFINE_ACCESSOR(valuesMap);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_definitions
#define APACHE_THRIFT_ACCESSOR_definitions
APACHE_THRIFT_DEFINE_ACCESSOR(definitions);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_definitionsMap
#define APACHE_THRIFT_ACCESSOR_definitionsMap
APACHE_THRIFT_DEFINE_ACCESSOR(definitionsMap);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_sources
#define APACHE_THRIFT_ACCESSOR_sources
APACHE_THRIFT_DEFINE_ACCESSOR(sources);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_identifierSourceRanges
#define APACHE_THRIFT_ACCESSOR_identifierSourceRanges
APACHE_THRIFT_DEFINE_ACCESSOR(identifierSourceRanges);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_includeSourceRanges
#define APACHE_THRIFT_ACCESSOR_includeSourceRanges
APACHE_THRIFT_DEFINE_ACCESSOR(includeSourceRanges);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_fileName
#define APACHE_THRIFT_ACCESSOR_fileName
APACHE_THRIFT_DEFINE_ACCESSOR(fileName);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_languageIncludes
#define APACHE_THRIFT_ACCESSOR_languageIncludes
APACHE_THRIFT_DEFINE_ACCESSOR(languageIncludes);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_namespaces
#define APACHE_THRIFT_ACCESSOR_namespaces
APACHE_THRIFT_DEFINE_ACCESSOR(namespaces);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_range
#define APACHE_THRIFT_ACCESSOR_range
APACHE_THRIFT_DEFINE_ACCESSOR(range);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_uri
#define APACHE_THRIFT_ACCESSOR_uri
APACHE_THRIFT_DEFINE_ACCESSOR(uri);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_enumValue
#define APACHE_THRIFT_ACCESSOR_enumValue
APACHE_THRIFT_DEFINE_ACCESSOR(enumValue);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_range
#define APACHE_THRIFT_ACCESSOR_range
APACHE_THRIFT_DEFINE_ACCESSOR(range);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_target
#define APACHE_THRIFT_ACCESSOR_target
APACHE_THRIFT_DEFINE_ACCESSOR(target);
#endif
} // namespace detail
} // namespace apache::thrift

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

/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "FieldQualifier", "kind": "enum" } */
enum class FieldQualifier {
  Default = 0,
  Optional = 1,
  Terse = 2,
  Fill = 3,
};

/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "ErrorKind", "kind": "enum" } */
enum class ErrorKind {
  Unspecified = 0,
  Transient = 1,
  Stateful = 2,
  Permanent = 3,
};

/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "ErrorBlame", "kind": "enum" } */
enum class ErrorBlame {
  Unspecified = 0,
  Server = 1,
  Client = 2,
};

/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "ErrorSafety", "kind": "enum" } */
enum class ErrorSafety {
  Unspecified = 0,
  Safe = 1,
};

/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "FunctionQualifier", "kind": "enum" } */
enum class FunctionQualifier {
  Unspecified = 0,
  OneWay = 1,
  Idempotent = 2,
  ReadOnly = 3,
};

} // namespace apache::thrift::type

template<> struct std::hash<::apache::thrift::type::FieldQualifier> :
  ::apache::thrift::detail::enum_hash<::apache::thrift::type::FieldQualifier> {};
template<> struct std::hash<::apache::thrift::type::ErrorKind> :
  ::apache::thrift::detail::enum_hash<::apache::thrift::type::ErrorKind> {};
template<> struct std::hash<::apache::thrift::type::ErrorBlame> :
  ::apache::thrift::detail::enum_hash<::apache::thrift::type::ErrorBlame> {};
template<> struct std::hash<::apache::thrift::type::ErrorSafety> :
  ::apache::thrift::detail::enum_hash<::apache::thrift::type::ErrorSafety> {};
template<> struct std::hash<::apache::thrift::type::FunctionQualifier> :
  ::apache::thrift::detail::enum_hash<::apache::thrift::type::FunctionQualifier> {};

namespace apache::thrift {

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

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

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

  FOLLY_ERASE static std::string_view typeName() noexcept {
    return "FieldQualifier";
  }

  FOLLY_ERASE static constexpr std::string_view moduleName() noexcept {
    return "schema";
  }

  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/FieldQualifier";

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

  static const std::vector<std::any>& annotations() noexcept;
  static const std::vector<std::any>& enumValueAnnotations(::apache::thrift::type::FieldQualifier) noexcept;
};

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

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

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

  FOLLY_ERASE static std::string_view typeName() noexcept {
    return "ErrorKind";
  }

  FOLLY_ERASE static constexpr std::string_view moduleName() noexcept {
    return "schema";
  }

  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/ErrorKind";

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

  static const std::vector<std::any>& annotations() noexcept;
  static const std::vector<std::any>& enumValueAnnotations(::apache::thrift::type::ErrorKind) noexcept;
};

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

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

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

  FOLLY_ERASE static std::string_view typeName() noexcept {
    return "ErrorBlame";
  }

  FOLLY_ERASE static constexpr std::string_view moduleName() noexcept {
    return "schema";
  }

  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/ErrorBlame";

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

  static const std::vector<std::any>& annotations() noexcept;
  static const std::vector<std::any>& enumValueAnnotations(::apache::thrift::type::ErrorBlame) noexcept;
};

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

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

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

  FOLLY_ERASE static std::string_view typeName() noexcept {
    return "ErrorSafety";
  }

  FOLLY_ERASE static constexpr std::string_view moduleName() noexcept {
    return "schema";
  }

  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/ErrorSafety";

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

  static const std::vector<std::any>& annotations() noexcept;
  static const std::vector<std::any>& enumValueAnnotations(::apache::thrift::type::ErrorSafety) noexcept;
};

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

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

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

  FOLLY_ERASE static std::string_view typeName() noexcept {
    return "FunctionQualifier";
  }

  FOLLY_ERASE static constexpr std::string_view moduleName() noexcept {
    return "schema";
  }

  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/FunctionQualifier";

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

  static const std::vector<std::any>& annotations() noexcept;
  static const std::vector<std::any>& enumValueAnnotations(::apache::thrift::type::FunctionQualifier) noexcept;
};

} // namespace apache::thrift
// END declare_enums
// BEGIN forward_declare
namespace apache::thrift::type {
class Annotation;
class StructuredAnnotation;
class DecodedUri;
class DefinitionAttrs;
class SourceRange;
class DocBlock;
class InterfaceRef;
class EnumValue;
class Enum;
class Field;
class Struct;
class Union;
class Exception;
class Paramlist;
class Stream;
class Sink;
class Interaction;
class ReturnType;
class Function;
class Service;
class Const;
class Typedef;
class Definition;
class Program;
class Schema;
class SourceInfo;
class IdentifierRef;
class IncludeRef;
} // namespace apache::thrift::type
// END forward_declare
namespace apache::thrift::detail::annotation {
} // namespace apache::thrift::detail::annotation

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

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

/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "AnnotationIds", "kind": "typedef" } */
using AnnotationIds = ::std::set<::apache::thrift::type::ValueId>;
/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "DefinitionIds", "kind": "typedef" } */
using DefinitionIds = ::std::vector<::apache::thrift::type::DefinitionId>;
/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "IncludeIds", "kind": "typedef" } */
using IncludeIds = ::std::vector<::apache::thrift::type::ProgramId>;
/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "Fields", "kind": "typedef" } */
using Fields = ::std::vector<::apache::thrift::type::Field>;
/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "Exceptions", "kind": "typedef" } */
using Exceptions = ::std::vector<::apache::thrift::type::Field>;
/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "ReturnTypes", "kind": "typedef" } */
using ReturnTypes = ::std::vector<::apache::thrift::type::ReturnType>;
/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "Functions", "kind": "typedef" } */
using Functions = ::std::vector<::apache::thrift::type::Function>;
/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "DefinitionList", "kind": "typedef" } */
using DefinitionList = ::std::vector<::apache::thrift::type::Definition>;
/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "DefinitionKey", "kind": "typedef" } */
using DefinitionKey = ::apache::thrift::type::ByteString;
/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "DefinitionMap", "kind": "typedef" } */
using DefinitionMap = ::std::map<::apache::thrift::type::DefinitionKey, ::apache::thrift::type::Definition>;
/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "ProgramList", "kind": "typedef" } */
using ProgramList = std::deque<::apache::thrift::type::Program>;
/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "ValueKey", "kind": "typedef" } */
using ValueKey = ::apache::thrift::type::ValueId;

/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "Annotation", "kind": "struct" } */
class Annotation final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/Annotation";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 1;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::fields
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::adapted<::apache::thrift::InlineAdapter<::apache::thrift::protocol::detail::ValueWrapper<::apache::thrift::protocol::detail::detail::Value>>, ::apache::thrift::type::union_t<::apache::thrift::protocol::detail::detail::Value>>>
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  Annotation();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  Annotation(apache::thrift::FragileConstructor, ::std::map<::std::string, ::apache::thrift::protocol::Value> fields__arg);

  Annotation(Annotation&&) noexcept;

  Annotation(const Annotation& src);


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

  ~Annotation();

 private:
  ::std::map<::std::string, ::apache::thrift::protocol::Value> __fbthrift_field_fields;

 public:

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

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> fields_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> fields_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> fields_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_fields)};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> fields() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> fields() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> fields() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_fields)};
  }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "StructuredAnnotation", "kind": "struct" } */
class StructuredAnnotation final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/StructuredAnnotation";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 2;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::type,
    ::apache::thrift::ident::fields
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::union_t<::apache::thrift::type::TypeUri>,
    ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::adapted<::apache::thrift::InlineAdapter<::apache::thrift::protocol::detail::ValueWrapper<::apache::thrift::protocol::detail::detail::Value>>, ::apache::thrift::type::union_t<::apache::thrift::protocol::detail::detail::Value>>>
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  StructuredAnnotation();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  StructuredAnnotation(apache::thrift::FragileConstructor, ::apache::thrift::type::TypeUri type__arg, ::std::map<::std::string, ::apache::thrift::protocol::Value> fields__arg);

  StructuredAnnotation(StructuredAnnotation&&) noexcept;

  StructuredAnnotation(const StructuredAnnotation& src);


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

  ~StructuredAnnotation();

 private:
  ::apache::thrift::type::TypeUri __fbthrift_field_type;
 private:
  ::std::map<::std::string, ::apache::thrift::protocol::Value> __fbthrift_field_fields;

 public:

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

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::TypeUri>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> type_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_type};
  }

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::TypeUri>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> type_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_type};
  }

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::TypeUri>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> type_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_type)};
  }

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::TypeUri>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> type() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_type};
  }

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::TypeUri>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> type() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_type};
  }

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::TypeUri>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> type() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_type)};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> fields_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> fields_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> fields_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_fields)};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> fields() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> fields() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> fields() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_fields)};
  }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "DecodedUri", "kind": "struct" } */
class DecodedUri final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/DecodedUri";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 5;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2,4,5,6};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::scheme,
    ::apache::thrift::ident::domain,
    ::apache::thrift::ident::path,
    ::apache::thrift::ident::query,
    ::apache::thrift::ident::fragment
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::list<::apache::thrift::type::string_t>,
    ::apache::thrift::type::list<::apache::thrift::type::string_t>,
    ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::string_t>,
    ::apache::thrift::type::string_t
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  DecodedUri();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  DecodedUri(apache::thrift::FragileConstructor, ::std::string scheme__arg, ::std::vector<::std::string> domain__arg, ::std::vector<::std::string> path__arg, ::std::map<::std::string, ::std::string> query__arg, ::std::string fragment__arg);

  DecodedUri(DecodedUri&&) noexcept;

  DecodedUri(const DecodedUri& src);


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

  ~DecodedUri();

 private:
  ::std::string __fbthrift_field_scheme;
 private:
  ::std::vector<::std::string> __fbthrift_field_domain;
 private:
  ::std::vector<::std::string> __fbthrift_field_path;
 private:
  ::std::map<::std::string, ::std::string> __fbthrift_field_query;
 private:
  ::std::string __fbthrift_field_fragment;

 public:

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

  /** Glean { "field": "scheme" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> scheme_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_scheme};
  }

  /** Glean { "field": "scheme" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> scheme_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_scheme};
  }

  /** Glean { "field": "scheme" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> scheme_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_scheme)};
  }

  /** Glean { "field": "scheme" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> scheme() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_scheme};
  }

  /** Glean { "field": "scheme" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> scheme() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_scheme};
  }

  /** Glean { "field": "scheme" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> scheme() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_scheme)};
  }

  /** Glean { "field": "domain" } */
  template <typename..., typename fbthrift_T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> domain_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_domain};
  }

  /** Glean { "field": "domain" } */
  template <typename..., typename fbthrift_T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> domain_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_domain};
  }

  /** Glean { "field": "domain" } */
  template <typename..., typename fbthrift_T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> domain_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_domain)};
  }

  /** Glean { "field": "domain" } */
  template <typename..., typename fbthrift_T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> domain() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_domain};
  }

  /** Glean { "field": "domain" } */
  template <typename..., typename fbthrift_T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> domain() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_domain};
  }

  /** Glean { "field": "domain" } */
  template <typename..., typename fbthrift_T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> domain() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_domain)};
  }

  /** Glean { "field": "path" } */
  template <typename..., typename fbthrift_T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> path_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_path};
  }

  /** Glean { "field": "path" } */
  template <typename..., typename fbthrift_T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> path_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_path};
  }

  /** Glean { "field": "path" } */
  template <typename..., typename fbthrift_T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> path_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_path)};
  }

  /** Glean { "field": "path" } */
  template <typename..., typename fbthrift_T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> path() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_path};
  }

  /** Glean { "field": "path" } */
  template <typename..., typename fbthrift_T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> path() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_path};
  }

  /** Glean { "field": "path" } */
  template <typename..., typename fbthrift_T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> path() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_path)};
  }

  /** Glean { "field": "query" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> query_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_query};
  }

  /** Glean { "field": "query" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> query_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_query};
  }

  /** Glean { "field": "query" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> query_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_query)};
  }

  /** Glean { "field": "query" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> query() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_query};
  }

  /** Glean { "field": "query" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> query() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_query};
  }

  /** Glean { "field": "query" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> query() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_query)};
  }

  /** Glean { "field": "fragment" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> fragment_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_fragment};
  }

  /** Glean { "field": "fragment" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> fragment_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_fragment};
  }

  /** Glean { "field": "fragment" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> fragment_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_fragment)};
  }

  /** Glean { "field": "fragment" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> fragment() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_fragment};
  }

  /** Glean { "field": "fragment" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> fragment() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_fragment};
  }

  /** Glean { "field": "fragment" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> fragment() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_fragment)};
  }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "SourceRange", "kind": "struct" } */
class SourceRange final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/SourceRange";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 5;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2,3,4,5};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::programId,
    ::apache::thrift::ident::beginLine,
    ::apache::thrift::ident::beginColumn,
    ::apache::thrift::ident::endLine,
    ::apache::thrift::ident::endColumn
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::adapted<::apache::thrift::type::detail::StrongIntegerAdapter<::apache::thrift::type::ProgramId>, ::apache::thrift::type::i64_t>,
    ::apache::thrift::type::i32_t,
    ::apache::thrift::type::i32_t,
    ::apache::thrift::type::i32_t,
    ::apache::thrift::type::i32_t
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  SourceRange() :
      __fbthrift_field_programId(),
      __fbthrift_field_beginLine(),
      __fbthrift_field_beginColumn(),
      __fbthrift_field_endLine(),
      __fbthrift_field_endColumn() {
    ::apache::thrift::adapt_detail::construct<::apache::thrift::type::detail::StrongIntegerAdapter<::apache::thrift::type::ProgramId>, 1>(__fbthrift_field_programId, *this);
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  SourceRange(apache::thrift::FragileConstructor, ::apache::thrift::type::ProgramId programId__arg, ::std::int32_t beginLine__arg, ::std::int32_t beginColumn__arg, ::std::int32_t endLine__arg, ::std::int32_t endColumn__arg);

  SourceRange(SourceRange&&) noexcept;
  SourceRange(const SourceRange& src);


  SourceRange& operator=(SourceRange&&) noexcept;
  SourceRange& operator=(const SourceRange& src);
 private:
  ::apache::thrift::type::ProgramId __fbthrift_field_programId;
 private:
  ::std::int32_t __fbthrift_field_beginLine;
 private:
  ::std::int32_t __fbthrift_field_beginColumn;
 private:
  ::std::int32_t __fbthrift_field_endLine;
 private:
  ::std::int32_t __fbthrift_field_endColumn;

 public:

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

  /** Glean { "field": "programId" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> programId_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_programId};
  }

  /** Glean { "field": "programId" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> programId_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_programId};
  }

  /** Glean { "field": "programId" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> programId_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_programId)};
  }

  /** Glean { "field": "programId" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> programId() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_programId};
  }

  /** Glean { "field": "programId" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> programId() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_programId};
  }

  /** Glean { "field": "programId" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> programId() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_programId)};
  }

  /** Glean { "field": "beginLine" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> beginLine_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_beginLine};
  }

  /** Glean { "field": "beginLine" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> beginLine_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_beginLine};
  }

  /** Glean { "field": "beginLine" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> beginLine_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_beginLine)};
  }

  /** Glean { "field": "beginLine" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> beginLine() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_beginLine};
  }

  /** Glean { "field": "beginLine" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> beginLine() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_beginLine};
  }

  /** Glean { "field": "beginLine" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> beginLine() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_beginLine)};
  }

  /** Glean { "field": "beginColumn" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> beginColumn_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_beginColumn};
  }

  /** Glean { "field": "beginColumn" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> beginColumn_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_beginColumn};
  }

  /** Glean { "field": "beginColumn" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> beginColumn_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_beginColumn)};
  }

  /** Glean { "field": "beginColumn" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> beginColumn() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_beginColumn};
  }

  /** Glean { "field": "beginColumn" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> beginColumn() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_beginColumn};
  }

  /** Glean { "field": "beginColumn" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> beginColumn() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_beginColumn)};
  }

  /** Glean { "field": "endLine" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> endLine_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_endLine};
  }

  /** Glean { "field": "endLine" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> endLine_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_endLine};
  }

  /** Glean { "field": "endLine" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> endLine_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_endLine)};
  }

  /** Glean { "field": "endLine" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> endLine() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_endLine};
  }

  /** Glean { "field": "endLine" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> endLine() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_endLine};
  }

  /** Glean { "field": "endLine" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> endLine() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_endLine)};
  }

  /** Glean { "field": "endColumn" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> endColumn_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_endColumn};
  }

  /** Glean { "field": "endColumn" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> endColumn_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_endColumn};
  }

  /** Glean { "field": "endColumn" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> endColumn_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_endColumn)};
  }

  /** Glean { "field": "endColumn" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> endColumn() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_endColumn};
  }

  /** Glean { "field": "endColumn" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> endColumn() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_endColumn};
  }

  /** Glean { "field": "endColumn" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> endColumn() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_endColumn)};
  }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "DocBlock", "kind": "struct" } */
class DocBlock final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/DocBlock";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 2;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::contents,
    ::apache::thrift::ident::sourceRange
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::struct_t<::apache::thrift::type::SourceRange>
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  DocBlock();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  DocBlock(apache::thrift::FragileConstructor, ::std::string contents__arg, ::apache::thrift::type::SourceRange sourceRange__arg);

  DocBlock(DocBlock&&) noexcept;

  DocBlock(const DocBlock& src);


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

  ~DocBlock();

 private:
  ::std::string __fbthrift_field_contents;
 private:
  ::apache::thrift::type::SourceRange __fbthrift_field_sourceRange;

 public:

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

  /** Glean { "field": "contents" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> contents_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_contents};
  }

  /** Glean { "field": "contents" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> contents_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_contents};
  }

  /** Glean { "field": "contents" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> contents_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_contents)};
  }

  /** Glean { "field": "contents" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> contents() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_contents};
  }

  /** Glean { "field": "contents" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> contents() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_contents};
  }

  /** Glean { "field": "contents" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> contents() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_contents)};
  }

  /** Glean { "field": "sourceRange" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> sourceRange_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_sourceRange};
  }

  /** Glean { "field": "sourceRange" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> sourceRange_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_sourceRange};
  }

  /** Glean { "field": "sourceRange" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> sourceRange_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_sourceRange)};
  }

  /** Glean { "field": "sourceRange" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> sourceRange() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_sourceRange};
  }

  /** Glean { "field": "sourceRange" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> sourceRange() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_sourceRange};
  }

  /** Glean { "field": "sourceRange" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> sourceRange() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_sourceRange)};
  }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "DefinitionAttrs", "kind": "struct" } */
class DefinitionAttrs final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/DefinitionAttrs";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 8;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2,3,8,9,4,6,7};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::name,
    ::apache::thrift::ident::uri,
    ::apache::thrift::ident::structuredAnnotations,
    ::apache::thrift::ident::annotations,
    ::apache::thrift::ident::annotationsByKey,
    ::apache::thrift::ident::unstructuredAnnotations,
    ::apache::thrift::ident::docs,
    ::apache::thrift::ident::sourceRange
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::set<::apache::thrift::type::adapted<::apache::thrift::type::detail::StrongIntegerAdapter<::apache::thrift::type::ValueId>, ::apache::thrift::type::i64_t>>,
    ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::apache::thrift::type::Annotation>>,
    ::apache::thrift::type::map<::apache::thrift::type::cpp_type<folly::fbstring, ::apache::thrift::type::binary_t>, ::apache::thrift::type::struct_t<::apache::thrift::type::Annotation>>,
    ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::string_t>,
    ::apache::thrift::type::struct_t<::apache::thrift::type::DocBlock>,
    ::apache::thrift::type::struct_t<::apache::thrift::type::SourceRange>
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  DefinitionAttrs();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  DefinitionAttrs(apache::thrift::FragileConstructor, ::std::string name__arg, ::std::string uri__arg, ::apache::thrift::type::AnnotationIds structuredAnnotations__arg, ::std::map<::std::string, ::apache::thrift::type::Annotation> annotations__arg, ::std::map<::apache::thrift::type::DefinitionKey, ::apache::thrift::type::Annotation> annotationsByKey__arg, ::std::map<::std::string, ::std::string> unstructuredAnnotations__arg, ::apache::thrift::type::DocBlock docs__arg, ::apache::thrift::type::SourceRange sourceRange__arg);

  DefinitionAttrs(DefinitionAttrs&&) noexcept;

  DefinitionAttrs(const DefinitionAttrs& src);


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

  ~DefinitionAttrs();

 private:
  ::std::string __fbthrift_field_name;
 private:
  ::std::string __fbthrift_field_uri;
 private:
  ::apache::thrift::type::AnnotationIds __fbthrift_field_structuredAnnotations;
 private:
  ::std::map<::std::string, ::apache::thrift::type::Annotation> __fbthrift_field_annotations;
 private:
  ::std::map<::apache::thrift::type::DefinitionKey, ::apache::thrift::type::Annotation> __fbthrift_field_annotationsByKey;
 private:
  ::std::map<::std::string, ::std::string> __fbthrift_field_unstructuredAnnotations;
 private:
  ::apache::thrift::type::DocBlock __fbthrift_field_docs;
 private:
  ::apache::thrift::type::SourceRange __fbthrift_field_sourceRange;

 public:

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

  /** Glean { "field": "name" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> name_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_name};
  }

  /** Glean { "field": "name" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> name_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_name};
  }

  /** Glean { "field": "name" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> name_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_name)};
  }

  /** Glean { "field": "name" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> name() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_name};
  }

  /** Glean { "field": "name" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> name() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_name};
  }

  /** Glean { "field": "name" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> name() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_name)};
  }

  /** Glean { "field": "uri" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> uri_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_uri};
  }

  /** Glean { "field": "uri" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> uri_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_uri};
  }

  /** Glean { "field": "uri" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> uri_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_uri)};
  }

  /** Glean { "field": "uri" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> uri() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_uri};
  }

  /** Glean { "field": "uri" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> uri() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_uri};
  }

  /** Glean { "field": "uri" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> uri() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_uri)};
  }

  /** Glean { "field": "structuredAnnotations" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::AnnotationIds>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> structuredAnnotations_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_structuredAnnotations};
  }

  /** Glean { "field": "structuredAnnotations" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::AnnotationIds>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> structuredAnnotations_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_structuredAnnotations};
  }

  /** Glean { "field": "structuredAnnotations" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::AnnotationIds>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> structuredAnnotations_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_structuredAnnotations)};
  }

  /** Glean { "field": "structuredAnnotations" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::AnnotationIds>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> structuredAnnotations() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_structuredAnnotations};
  }

  /** Glean { "field": "structuredAnnotations" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::AnnotationIds>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> structuredAnnotations() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_structuredAnnotations};
  }

  /** Glean { "field": "structuredAnnotations" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::AnnotationIds>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> structuredAnnotations() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_structuredAnnotations)};
  }

  /** Glean { "field": "annotations" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::type::Annotation>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> annotations_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_annotations};
  }

  /** Glean { "field": "annotations" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::type::Annotation>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> annotations_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_annotations};
  }

  /** Glean { "field": "annotations" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::type::Annotation>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> annotations_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_annotations)};
  }

  /** Glean { "field": "annotations" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::type::Annotation>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> annotations() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_annotations};
  }

  /** Glean { "field": "annotations" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::type::Annotation>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> annotations() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_annotations};
  }

  /** Glean { "field": "annotations" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::type::Annotation>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> annotations() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_annotations)};
  }

  /** Glean { "field": "annotationsByKey" } */
  template <typename..., typename fbthrift_T = ::std::map<::apache::thrift::type::DefinitionKey, ::apache::thrift::type::Annotation>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> annotationsByKey_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_annotationsByKey};
  }

  /** Glean { "field": "annotationsByKey" } */
  template <typename..., typename fbthrift_T = ::std::map<::apache::thrift::type::DefinitionKey, ::apache::thrift::type::Annotation>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> annotationsByKey_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_annotationsByKey};
  }

  /** Glean { "field": "annotationsByKey" } */
  template <typename..., typename fbthrift_T = ::std::map<::apache::thrift::type::DefinitionKey, ::apache::thrift::type::Annotation>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> annotationsByKey_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_annotationsByKey)};
  }

  /** Glean { "field": "annotationsByKey" } */
  template <typename..., typename fbthrift_T = ::std::map<::apache::thrift::type::DefinitionKey, ::apache::thrift::type::Annotation>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> annotationsByKey() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_annotationsByKey};
  }

  /** Glean { "field": "annotationsByKey" } */
  template <typename..., typename fbthrift_T = ::std::map<::apache::thrift::type::DefinitionKey, ::apache::thrift::type::Annotation>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> annotationsByKey() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_annotationsByKey};
  }

  /** Glean { "field": "annotationsByKey" } */
  template <typename..., typename fbthrift_T = ::std::map<::apache::thrift::type::DefinitionKey, ::apache::thrift::type::Annotation>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> annotationsByKey() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_annotationsByKey)};
  }

  /** Glean { "field": "unstructuredAnnotations" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> unstructuredAnnotations_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_unstructuredAnnotations};
  }

  /** Glean { "field": "unstructuredAnnotations" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> unstructuredAnnotations_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_unstructuredAnnotations};
  }

  /** Glean { "field": "unstructuredAnnotations" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> unstructuredAnnotations_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_unstructuredAnnotations)};
  }

  /** Glean { "field": "unstructuredAnnotations" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> unstructuredAnnotations() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_unstructuredAnnotations};
  }

  /** Glean { "field": "unstructuredAnnotations" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> unstructuredAnnotations() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_unstructuredAnnotations};
  }

  /** Glean { "field": "unstructuredAnnotations" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> unstructuredAnnotations() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_unstructuredAnnotations)};
  }

  /** Glean { "field": "docs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DocBlock>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> docs_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_docs};
  }

  /** Glean { "field": "docs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DocBlock>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> docs_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_docs};
  }

  /** Glean { "field": "docs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DocBlock>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> docs_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_docs)};
  }

  /** Glean { "field": "docs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DocBlock>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> docs() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_docs};
  }

  /** Glean { "field": "docs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DocBlock>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> docs() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_docs};
  }

  /** Glean { "field": "docs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DocBlock>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> docs() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_docs)};
  }

  /** Glean { "field": "sourceRange" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> sourceRange_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_sourceRange};
  }

  /** Glean { "field": "sourceRange" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> sourceRange_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_sourceRange};
  }

  /** Glean { "field": "sourceRange" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> sourceRange_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_sourceRange)};
  }

  /** Glean { "field": "sourceRange" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> sourceRange() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_sourceRange};
  }

  /** Glean { "field": "sourceRange" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> sourceRange() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_sourceRange};
  }

  /** Glean { "field": "sourceRange" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> sourceRange() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_sourceRange)};
  }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "InterfaceRef", "kind": "struct" } */
class InterfaceRef final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/InterfaceRef";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 1;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::uri
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::union_t<::apache::thrift::type::TypeUri>
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

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

  InterfaceRef(InterfaceRef&&) noexcept;

  InterfaceRef(const InterfaceRef& src);


  InterfaceRef& operator=(InterfaceRef&&) noexcept;
  InterfaceRef& operator=(const InterfaceRef& src);
 private:
  ::apache::thrift::type::TypeUri __fbthrift_field_uri;

 public:

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

  /** Glean { "field": "uri" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::TypeUri>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> uri_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_uri};
  }

  /** Glean { "field": "uri" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::TypeUri>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> uri_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_uri};
  }

  /** Glean { "field": "uri" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::TypeUri>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> uri_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_uri)};
  }

  /** Glean { "field": "uri" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::TypeUri>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> uri() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_uri};
  }

  /** Glean { "field": "uri" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::TypeUri>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> uri() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_uri};
  }

  /** Glean { "field": "uri" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::TypeUri>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> uri() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_uri)};
  }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "EnumValue", "kind": "struct" } */
class EnumValue final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/EnumValue";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 2;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::attrs,
    ::apache::thrift::ident::value
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::struct_t<::apache::thrift::type::DefinitionAttrs>,
    ::apache::thrift::type::i32_t
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  EnumValue() :
      __fbthrift_field_value() {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  EnumValue(apache::thrift::FragileConstructor, ::apache::thrift::type::DefinitionAttrs attrs__arg, ::std::int32_t value__arg);

  EnumValue(EnumValue&&) noexcept;

  EnumValue(const EnumValue& src);


  EnumValue& operator=(EnumValue&&) noexcept;
  EnumValue& operator=(const EnumValue& src);
 private:
  ::apache::thrift::type::DefinitionAttrs __fbthrift_field_attrs;
 private:
  ::std::int32_t __fbthrift_field_value;

 public:

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

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "value" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> value_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_value};
  }

  /** Glean { "field": "value" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> value_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_value};
  }

  /** Glean { "field": "value" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> value_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_value)};
  }

  /** Glean { "field": "value" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> value() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_value};
  }

  /** Glean { "field": "value" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> value() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_value};
  }

  /** Glean { "field": "value" } */
  template <typename..., typename fbthrift_T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> value() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_value)};
  }
  FOLLY_ERASE auto name() &           { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() const&      { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() &&          { return std::move(*attrs_ref()).name_ref(); }
  FOLLY_ERASE auto name() const&&     { return std::move(*attrs_ref()).name_ref(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &       { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&  { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &&      { return std::move(*this).name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&& { return std::move(*this).name(); }
  FOLLY_ERASE auto uri() &           { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() const&      { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() &&          { return std::move(*attrs_ref()).uri_ref(); }
  FOLLY_ERASE auto uri() const&&     { return std::move(*attrs_ref()).uri_ref(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &       { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&  { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &&      { return std::move(*this).uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&& { return std::move(*this).uri(); }
  FOLLY_ERASE auto structuredAnnotations() &           { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&      { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() &&          { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&&     { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &       { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&  { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &&      { return std::move(*this).structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&& { return std::move(*this).structuredAnnotations(); }
  FOLLY_ERASE auto annotations() &           { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() const&      { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() &&          { return std::move(*attrs_ref()).annotations_ref(); }
  FOLLY_ERASE auto annotations() const&&     { return std::move(*attrs_ref()).annotations_ref(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &       { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&  { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &&      { return std::move(*this).annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&& { return std::move(*this).annotations(); }
  FOLLY_ERASE auto annotationsByKey() &           { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&      { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() &&          { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&&     { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &       { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&  { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &&      { return std::move(*this).annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&& { return std::move(*this).annotationsByKey(); }
  FOLLY_ERASE auto unstructuredAnnotations() &           { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&      { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() &&          { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&&     { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &       { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&  { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &&      { return std::move(*this).unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&& { return std::move(*this).unstructuredAnnotations(); }
  FOLLY_ERASE auto docs() &           { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() const&      { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() &&          { return std::move(*attrs_ref()).docs_ref(); }
  FOLLY_ERASE auto docs() const&&     { return std::move(*attrs_ref()).docs_ref(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &       { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&  { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &&      { return std::move(*this).docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&& { return std::move(*this).docs(); }
  FOLLY_ERASE auto sourceRange() &           { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&      { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() &&          { return std::move(*attrs_ref()).sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&&     { return std::move(*attrs_ref()).sourceRange_ref(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &       { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&  { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &&      { return std::move(*this).sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&& { return std::move(*this).sourceRange(); }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "Enum", "kind": "struct" } */
class Enum final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/Enum";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 2;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::attrs,
    ::apache::thrift::ident::values
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::struct_t<::apache::thrift::type::DefinitionAttrs>,
    ::apache::thrift::type::list<::apache::thrift::type::struct_t<::apache::thrift::type::EnumValue>>
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  Enum();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  Enum(apache::thrift::FragileConstructor, ::apache::thrift::type::DefinitionAttrs attrs__arg, ::std::vector<::apache::thrift::type::EnumValue> values__arg);

  Enum(Enum&&) noexcept;

  Enum(const Enum& src);


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

  ~Enum();

 private:
  ::apache::thrift::type::DefinitionAttrs __fbthrift_field_attrs;
 private:
  ::std::vector<::apache::thrift::type::EnumValue> __fbthrift_field_values;

 public:

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

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "values" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::EnumValue>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> values_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_values};
  }

  /** Glean { "field": "values" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::EnumValue>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> values_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_values};
  }

  /** Glean { "field": "values" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::EnumValue>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> values_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_values)};
  }

  /** Glean { "field": "values" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::EnumValue>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> values() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_values};
  }

  /** Glean { "field": "values" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::EnumValue>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> values() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_values};
  }

  /** Glean { "field": "values" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::EnumValue>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> values() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_values)};
  }
  FOLLY_ERASE auto name() &           { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() const&      { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() &&          { return std::move(*attrs_ref()).name_ref(); }
  FOLLY_ERASE auto name() const&&     { return std::move(*attrs_ref()).name_ref(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &       { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&  { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &&      { return std::move(*this).name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&& { return std::move(*this).name(); }
  FOLLY_ERASE auto uri() &           { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() const&      { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() &&          { return std::move(*attrs_ref()).uri_ref(); }
  FOLLY_ERASE auto uri() const&&     { return std::move(*attrs_ref()).uri_ref(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &       { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&  { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &&      { return std::move(*this).uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&& { return std::move(*this).uri(); }
  FOLLY_ERASE auto structuredAnnotations() &           { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&      { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() &&          { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&&     { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &       { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&  { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &&      { return std::move(*this).structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&& { return std::move(*this).structuredAnnotations(); }
  FOLLY_ERASE auto annotations() &           { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() const&      { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() &&          { return std::move(*attrs_ref()).annotations_ref(); }
  FOLLY_ERASE auto annotations() const&&     { return std::move(*attrs_ref()).annotations_ref(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &       { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&  { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &&      { return std::move(*this).annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&& { return std::move(*this).annotations(); }
  FOLLY_ERASE auto annotationsByKey() &           { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&      { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() &&          { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&&     { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &       { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&  { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &&      { return std::move(*this).annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&& { return std::move(*this).annotationsByKey(); }
  FOLLY_ERASE auto unstructuredAnnotations() &           { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&      { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() &&          { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&&     { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &       { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&  { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &&      { return std::move(*this).unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&& { return std::move(*this).unstructuredAnnotations(); }
  FOLLY_ERASE auto docs() &           { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() const&      { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() &&          { return std::move(*attrs_ref()).docs_ref(); }
  FOLLY_ERASE auto docs() const&&     { return std::move(*attrs_ref()).docs_ref(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &       { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&  { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &&      { return std::move(*this).docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&& { return std::move(*this).docs(); }
  FOLLY_ERASE auto sourceRange() &           { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&      { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() &&          { return std::move(*attrs_ref()).sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&&     { return std::move(*attrs_ref()).sourceRange_ref(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &       { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&  { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &&      { return std::move(*this).sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&& { return std::move(*this).sourceRange(); }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "Field", "kind": "struct" } */
class Field final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/Field";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 5;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2,3,4,5};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::id,
    ::apache::thrift::ident::qualifier,
    ::apache::thrift::ident::type,
    ::apache::thrift::ident::attrs,
    ::apache::thrift::ident::customDefault
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::adapted<::apache::thrift::type::detail::StrongIntegerAdapter<::apache::thrift::type::FieldId>, ::apache::thrift::type::i16_t>,
    ::apache::thrift::type::enum_t<::apache::thrift::type::FieldQualifier>,
    ::apache::thrift::type::adapted<::apache::thrift::InlineAdapter<::apache::thrift::type::Type>, ::apache::thrift::type::struct_t<::apache::thrift::type::TypeStruct>>,
    ::apache::thrift::type::struct_t<::apache::thrift::type::DefinitionAttrs>,
    ::apache::thrift::type::adapted<::apache::thrift::type::detail::StrongIntegerAdapter<::apache::thrift::type::ValueId>, ::apache::thrift::type::i64_t>
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  Field() :
      __fbthrift_field_id(),
      __fbthrift_field_qualifier(),
      __fbthrift_field_customDefault() {
    ::apache::thrift::adapt_detail::construct<::apache::thrift::type::detail::StrongIntegerAdapter<::apache::thrift::type::FieldId>, 1>(__fbthrift_field_id, *this);
    ::apache::thrift::adapt_detail::construct<::apache::thrift::InlineAdapter<::apache::thrift::type::Type>, 3>(__fbthrift_field_type, *this);
    ::apache::thrift::adapt_detail::construct<::apache::thrift::type::detail::StrongIntegerAdapter<::apache::thrift::type::ValueId>, 5>(__fbthrift_field_customDefault, *this);
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  Field(apache::thrift::FragileConstructor, ::apache::thrift::type::FieldId id__arg, ::apache::thrift::type::FieldQualifier qualifier__arg, ::apache::thrift::type::Type type__arg, ::apache::thrift::type::DefinitionAttrs attrs__arg, ::apache::thrift::type::ValueId customDefault__arg);

  Field(Field&&) noexcept;
  Field(const Field& src);


  Field& operator=(Field&&) noexcept;
  Field& operator=(const Field& src);
 private:
  ::apache::thrift::type::FieldId __fbthrift_field_id;
 private:
  ::apache::thrift::type::FieldQualifier __fbthrift_field_qualifier;
 private:
  ::apache::thrift::type::Type __fbthrift_field_type;
 private:
  ::apache::thrift::type::DefinitionAttrs __fbthrift_field_attrs;
 private:
  ::apache::thrift::type::ValueId __fbthrift_field_customDefault;

 public:

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

  /** Glean { "field": "id" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::FieldId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> id_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_id};
  }

  /** Glean { "field": "id" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::FieldId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> id_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_id};
  }

  /** Glean { "field": "id" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::FieldId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> id_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_id)};
  }

  /** Glean { "field": "id" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::FieldId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> id() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_id};
  }

  /** Glean { "field": "id" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::FieldId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> id() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_id};
  }

  /** Glean { "field": "id" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::FieldId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> id() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_id)};
  }

  /** Glean { "field": "qualifier" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::FieldQualifier>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> qualifier_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_qualifier};
  }

  /** Glean { "field": "qualifier" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::FieldQualifier>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> qualifier_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_qualifier};
  }

  /** Glean { "field": "qualifier" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::FieldQualifier>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> qualifier_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_qualifier)};
  }

  /** Glean { "field": "qualifier" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::FieldQualifier>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> qualifier() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_qualifier};
  }

  /** Glean { "field": "qualifier" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::FieldQualifier>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> qualifier() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_qualifier};
  }

  /** Glean { "field": "qualifier" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::FieldQualifier>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> qualifier() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_qualifier)};
  }

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> type_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_type};
  }

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> type_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_type};
  }

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> type_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_type)};
  }

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> type() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_type};
  }

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> type() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_type};
  }

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> type() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_type)};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "customDefault" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ValueId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> customDefault_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_customDefault};
  }

  /** Glean { "field": "customDefault" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ValueId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> customDefault_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_customDefault};
  }

  /** Glean { "field": "customDefault" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ValueId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> customDefault_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_customDefault)};
  }

  /** Glean { "field": "customDefault" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ValueId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> customDefault() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_customDefault};
  }

  /** Glean { "field": "customDefault" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ValueId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> customDefault() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_customDefault};
  }

  /** Glean { "field": "customDefault" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ValueId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> customDefault() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_customDefault)};
  }
  FOLLY_ERASE auto name() &           { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() const&      { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() &&          { return std::move(*attrs_ref()).name_ref(); }
  FOLLY_ERASE auto name() const&&     { return std::move(*attrs_ref()).name_ref(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &       { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&  { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &&      { return std::move(*this).name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&& { return std::move(*this).name(); }
  FOLLY_ERASE auto uri() &           { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() const&      { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() &&          { return std::move(*attrs_ref()).uri_ref(); }
  FOLLY_ERASE auto uri() const&&     { return std::move(*attrs_ref()).uri_ref(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &       { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&  { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &&      { return std::move(*this).uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&& { return std::move(*this).uri(); }
  FOLLY_ERASE auto structuredAnnotations() &           { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&      { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() &&          { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&&     { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &       { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&  { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &&      { return std::move(*this).structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&& { return std::move(*this).structuredAnnotations(); }
  FOLLY_ERASE auto annotations() &           { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() const&      { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() &&          { return std::move(*attrs_ref()).annotations_ref(); }
  FOLLY_ERASE auto annotations() const&&     { return std::move(*attrs_ref()).annotations_ref(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &       { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&  { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &&      { return std::move(*this).annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&& { return std::move(*this).annotations(); }
  FOLLY_ERASE auto annotationsByKey() &           { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&      { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() &&          { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&&     { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &       { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&  { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &&      { return std::move(*this).annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&& { return std::move(*this).annotationsByKey(); }
  FOLLY_ERASE auto unstructuredAnnotations() &           { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&      { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() &&          { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&&     { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &       { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&  { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &&      { return std::move(*this).unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&& { return std::move(*this).unstructuredAnnotations(); }
  FOLLY_ERASE auto docs() &           { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() const&      { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() &&          { return std::move(*attrs_ref()).docs_ref(); }
  FOLLY_ERASE auto docs() const&&     { return std::move(*attrs_ref()).docs_ref(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &       { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&  { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &&      { return std::move(*this).docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&& { return std::move(*this).docs(); }
  FOLLY_ERASE auto sourceRange() &           { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&      { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() &&          { return std::move(*attrs_ref()).sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&&     { return std::move(*attrs_ref()).sourceRange_ref(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &       { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&  { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &&      { return std::move(*this).sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&& { return std::move(*this).sourceRange(); }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "Struct", "kind": "struct" } */
class Struct final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/Struct";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 2;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::attrs,
    ::apache::thrift::ident::fields
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::struct_t<::apache::thrift::type::DefinitionAttrs>,
    ::apache::thrift::type::list<::apache::thrift::type::struct_t<::apache::thrift::type::Field>>
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  Struct();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  Struct(apache::thrift::FragileConstructor, ::apache::thrift::type::DefinitionAttrs attrs__arg, ::apache::thrift::type::Fields fields__arg);

  Struct(Struct&&) noexcept;

  Struct(const Struct& src);


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

  ~Struct();

 private:
  ::apache::thrift::type::DefinitionAttrs __fbthrift_field_attrs;
 private:
  ::apache::thrift::type::Fields __fbthrift_field_fields;

 public:

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

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> fields_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> fields_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> fields_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_fields)};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> fields() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> fields() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> fields() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_fields)};
  }
  FOLLY_ERASE auto name() &           { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() const&      { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() &&          { return std::move(*attrs_ref()).name_ref(); }
  FOLLY_ERASE auto name() const&&     { return std::move(*attrs_ref()).name_ref(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &       { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&  { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &&      { return std::move(*this).name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&& { return std::move(*this).name(); }
  FOLLY_ERASE auto uri() &           { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() const&      { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() &&          { return std::move(*attrs_ref()).uri_ref(); }
  FOLLY_ERASE auto uri() const&&     { return std::move(*attrs_ref()).uri_ref(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &       { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&  { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &&      { return std::move(*this).uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&& { return std::move(*this).uri(); }
  FOLLY_ERASE auto structuredAnnotations() &           { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&      { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() &&          { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&&     { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &       { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&  { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &&      { return std::move(*this).structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&& { return std::move(*this).structuredAnnotations(); }
  FOLLY_ERASE auto annotations() &           { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() const&      { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() &&          { return std::move(*attrs_ref()).annotations_ref(); }
  FOLLY_ERASE auto annotations() const&&     { return std::move(*attrs_ref()).annotations_ref(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &       { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&  { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &&      { return std::move(*this).annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&& { return std::move(*this).annotations(); }
  FOLLY_ERASE auto annotationsByKey() &           { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&      { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() &&          { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&&     { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &       { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&  { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &&      { return std::move(*this).annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&& { return std::move(*this).annotationsByKey(); }
  FOLLY_ERASE auto unstructuredAnnotations() &           { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&      { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() &&          { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&&     { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &       { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&  { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &&      { return std::move(*this).unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&& { return std::move(*this).unstructuredAnnotations(); }
  FOLLY_ERASE auto docs() &           { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() const&      { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() &&          { return std::move(*attrs_ref()).docs_ref(); }
  FOLLY_ERASE auto docs() const&&     { return std::move(*attrs_ref()).docs_ref(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &       { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&  { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &&      { return std::move(*this).docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&& { return std::move(*this).docs(); }
  FOLLY_ERASE auto sourceRange() &           { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&      { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() &&          { return std::move(*attrs_ref()).sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&&     { return std::move(*attrs_ref()).sourceRange_ref(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &       { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&  { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &&      { return std::move(*this).sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&& { return std::move(*this).sourceRange(); }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "Union", "kind": "struct" } */
class Union final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/Union";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 2;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::attrs,
    ::apache::thrift::ident::fields
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::struct_t<::apache::thrift::type::DefinitionAttrs>,
    ::apache::thrift::type::list<::apache::thrift::type::struct_t<::apache::thrift::type::Field>>
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  Union();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  Union(apache::thrift::FragileConstructor, ::apache::thrift::type::DefinitionAttrs attrs__arg, ::apache::thrift::type::Fields fields__arg);

  Union(Union&&) noexcept;

  Union(const Union& src);


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

  ~Union();

 private:
  ::apache::thrift::type::DefinitionAttrs __fbthrift_field_attrs;
 private:
  ::apache::thrift::type::Fields __fbthrift_field_fields;

 public:

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

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> fields_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> fields_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> fields_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_fields)};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> fields() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> fields() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> fields() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_fields)};
  }
  FOLLY_ERASE auto name() &           { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() const&      { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() &&          { return std::move(*attrs_ref()).name_ref(); }
  FOLLY_ERASE auto name() const&&     { return std::move(*attrs_ref()).name_ref(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &       { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&  { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &&      { return std::move(*this).name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&& { return std::move(*this).name(); }
  FOLLY_ERASE auto uri() &           { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() const&      { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() &&          { return std::move(*attrs_ref()).uri_ref(); }
  FOLLY_ERASE auto uri() const&&     { return std::move(*attrs_ref()).uri_ref(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &       { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&  { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &&      { return std::move(*this).uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&& { return std::move(*this).uri(); }
  FOLLY_ERASE auto structuredAnnotations() &           { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&      { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() &&          { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&&     { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &       { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&  { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &&      { return std::move(*this).structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&& { return std::move(*this).structuredAnnotations(); }
  FOLLY_ERASE auto annotations() &           { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() const&      { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() &&          { return std::move(*attrs_ref()).annotations_ref(); }
  FOLLY_ERASE auto annotations() const&&     { return std::move(*attrs_ref()).annotations_ref(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &       { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&  { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &&      { return std::move(*this).annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&& { return std::move(*this).annotations(); }
  FOLLY_ERASE auto annotationsByKey() &           { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&      { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() &&          { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&&     { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &       { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&  { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &&      { return std::move(*this).annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&& { return std::move(*this).annotationsByKey(); }
  FOLLY_ERASE auto unstructuredAnnotations() &           { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&      { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() &&          { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&&     { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &       { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&  { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &&      { return std::move(*this).unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&& { return std::move(*this).unstructuredAnnotations(); }
  FOLLY_ERASE auto docs() &           { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() const&      { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() &&          { return std::move(*attrs_ref()).docs_ref(); }
  FOLLY_ERASE auto docs() const&&     { return std::move(*attrs_ref()).docs_ref(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &       { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&  { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &&      { return std::move(*this).docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&& { return std::move(*this).docs(); }
  FOLLY_ERASE auto sourceRange() &           { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&      { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() &&          { return std::move(*attrs_ref()).sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&&     { return std::move(*attrs_ref()).sourceRange_ref(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &       { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&  { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &&      { return std::move(*this).sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&& { return std::move(*this).sourceRange(); }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "Exception", "kind": "struct" } */
class Exception final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/Exception";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 5;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2,3,4,5};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::attrs,
    ::apache::thrift::ident::fields,
    ::apache::thrift::ident::safety,
    ::apache::thrift::ident::kind,
    ::apache::thrift::ident::blame
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::struct_t<::apache::thrift::type::DefinitionAttrs>,
    ::apache::thrift::type::list<::apache::thrift::type::struct_t<::apache::thrift::type::Field>>,
    ::apache::thrift::type::enum_t<::apache::thrift::type::ErrorSafety>,
    ::apache::thrift::type::enum_t<::apache::thrift::type::ErrorKind>,
    ::apache::thrift::type::enum_t<::apache::thrift::type::ErrorBlame>
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  Exception();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  Exception(apache::thrift::FragileConstructor, ::apache::thrift::type::DefinitionAttrs attrs__arg, ::apache::thrift::type::Fields fields__arg, ::apache::thrift::type::ErrorSafety safety__arg, ::apache::thrift::type::ErrorKind kind__arg, ::apache::thrift::type::ErrorBlame blame__arg);

  Exception(Exception&&) noexcept;

  Exception(const Exception& src);


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

  ~Exception();

 private:
  ::apache::thrift::type::DefinitionAttrs __fbthrift_field_attrs;
 private:
  ::apache::thrift::type::Fields __fbthrift_field_fields;
 private:
  ::apache::thrift::type::ErrorSafety __fbthrift_field_safety;
 private:
  ::apache::thrift::type::ErrorKind __fbthrift_field_kind;
 private:
  ::apache::thrift::type::ErrorBlame __fbthrift_field_blame;

 public:

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

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> fields_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> fields_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> fields_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_fields)};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> fields() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> fields() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> fields() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_fields)};
  }

  /** Glean { "field": "safety" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ErrorSafety>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> safety_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_safety};
  }

  /** Glean { "field": "safety" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ErrorSafety>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> safety_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_safety};
  }

  /** Glean { "field": "safety" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ErrorSafety>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> safety_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_safety)};
  }

  /** Glean { "field": "safety" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ErrorSafety>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> safety() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_safety};
  }

  /** Glean { "field": "safety" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ErrorSafety>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> safety() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_safety};
  }

  /** Glean { "field": "safety" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ErrorSafety>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> safety() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_safety)};
  }

  /** Glean { "field": "kind" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ErrorKind>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> kind_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_kind};
  }

  /** Glean { "field": "kind" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ErrorKind>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> kind_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_kind};
  }

  /** Glean { "field": "kind" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ErrorKind>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> kind_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_kind)};
  }

  /** Glean { "field": "kind" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ErrorKind>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> kind() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_kind};
  }

  /** Glean { "field": "kind" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ErrorKind>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> kind() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_kind};
  }

  /** Glean { "field": "kind" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ErrorKind>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> kind() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_kind)};
  }

  /** Glean { "field": "blame" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ErrorBlame>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> blame_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_blame};
  }

  /** Glean { "field": "blame" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ErrorBlame>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> blame_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_blame};
  }

  /** Glean { "field": "blame" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ErrorBlame>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> blame_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_blame)};
  }

  /** Glean { "field": "blame" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ErrorBlame>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> blame() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_blame};
  }

  /** Glean { "field": "blame" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ErrorBlame>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> blame() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_blame};
  }

  /** Glean { "field": "blame" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ErrorBlame>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> blame() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_blame)};
  }
  FOLLY_ERASE auto name() &           { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() const&      { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() &&          { return std::move(*attrs_ref()).name_ref(); }
  FOLLY_ERASE auto name() const&&     { return std::move(*attrs_ref()).name_ref(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &       { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&  { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &&      { return std::move(*this).name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&& { return std::move(*this).name(); }
  FOLLY_ERASE auto uri() &           { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() const&      { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() &&          { return std::move(*attrs_ref()).uri_ref(); }
  FOLLY_ERASE auto uri() const&&     { return std::move(*attrs_ref()).uri_ref(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &       { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&  { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &&      { return std::move(*this).uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&& { return std::move(*this).uri(); }
  FOLLY_ERASE auto structuredAnnotations() &           { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&      { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() &&          { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&&     { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &       { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&  { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &&      { return std::move(*this).structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&& { return std::move(*this).structuredAnnotations(); }
  FOLLY_ERASE auto annotations() &           { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() const&      { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() &&          { return std::move(*attrs_ref()).annotations_ref(); }
  FOLLY_ERASE auto annotations() const&&     { return std::move(*attrs_ref()).annotations_ref(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &       { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&  { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &&      { return std::move(*this).annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&& { return std::move(*this).annotations(); }
  FOLLY_ERASE auto annotationsByKey() &           { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&      { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() &&          { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&&     { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &       { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&  { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &&      { return std::move(*this).annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&& { return std::move(*this).annotationsByKey(); }
  FOLLY_ERASE auto unstructuredAnnotations() &           { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&      { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() &&          { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&&     { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &       { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&  { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &&      { return std::move(*this).unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&& { return std::move(*this).unstructuredAnnotations(); }
  FOLLY_ERASE auto docs() &           { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() const&      { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() &&          { return std::move(*attrs_ref()).docs_ref(); }
  FOLLY_ERASE auto docs() const&&     { return std::move(*attrs_ref()).docs_ref(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &       { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&  { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &&      { return std::move(*this).docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&& { return std::move(*this).docs(); }
  FOLLY_ERASE auto sourceRange() &           { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&      { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() &&          { return std::move(*attrs_ref()).sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&&     { return std::move(*attrs_ref()).sourceRange_ref(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &       { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&  { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &&      { return std::move(*this).sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&& { return std::move(*this).sourceRange(); }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "Paramlist", "kind": "struct" } */
class Paramlist final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/Paramlist";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 1;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::fields
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::list<::apache::thrift::type::struct_t<::apache::thrift::type::Field>>
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  Paramlist();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  Paramlist(apache::thrift::FragileConstructor, ::apache::thrift::type::Fields fields__arg);

  Paramlist(Paramlist&&) noexcept;

  Paramlist(const Paramlist& src);


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

  ~Paramlist();

 private:
  ::apache::thrift::type::Fields __fbthrift_field_fields;

 public:

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

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> fields_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> fields_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> fields_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_fields)};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> fields() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> fields() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_fields};
  }

  /** Glean { "field": "fields" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Fields>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> fields() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_fields)};
  }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "Stream", "kind": "struct" } */
class Stream final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/Stream";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 2;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::payload,
    ::apache::thrift::ident::exceptions
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::adapted<::apache::thrift::InlineAdapter<::apache::thrift::type::Type>, ::apache::thrift::type::struct_t<::apache::thrift::type::TypeStruct>>,
    ::apache::thrift::type::list<::apache::thrift::type::struct_t<::apache::thrift::type::Field>>
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  Stream();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  Stream(apache::thrift::FragileConstructor, ::apache::thrift::type::Type payload__arg, ::apache::thrift::type::Exceptions exceptions__arg);

  Stream(Stream&&) noexcept;
  Stream(const Stream& src);


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

  ~Stream();

 private:
  ::apache::thrift::type::Type __fbthrift_field_payload;
 private:
  ::apache::thrift::type::Exceptions __fbthrift_field_exceptions;

 public:

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

  /** Glean { "field": "payload" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> payload_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_payload};
  }

  /** Glean { "field": "payload" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> payload_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_payload};
  }

  /** Glean { "field": "payload" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> payload_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_payload)};
  }

  /** Glean { "field": "payload" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> payload() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_payload};
  }

  /** Glean { "field": "payload" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> payload() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_payload};
  }

  /** Glean { "field": "payload" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> payload() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_payload)};
  }

  /** Glean { "field": "exceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> exceptions_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_exceptions};
  }

  /** Glean { "field": "exceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> exceptions_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_exceptions};
  }

  /** Glean { "field": "exceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> exceptions_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_exceptions)};
  }

  /** Glean { "field": "exceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> exceptions() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_exceptions};
  }

  /** Glean { "field": "exceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> exceptions() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_exceptions};
  }

  /** Glean { "field": "exceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> exceptions() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_exceptions)};
  }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "Sink", "kind": "struct" } */
class Sink final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/Sink";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 4;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2,3,4};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::payload,
    ::apache::thrift::ident::clientExceptions,
    ::apache::thrift::ident::finalResponse,
    ::apache::thrift::ident::serverExceptions
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::adapted<::apache::thrift::InlineAdapter<::apache::thrift::type::Type>, ::apache::thrift::type::struct_t<::apache::thrift::type::TypeStruct>>,
    ::apache::thrift::type::list<::apache::thrift::type::struct_t<::apache::thrift::type::Field>>,
    ::apache::thrift::type::adapted<::apache::thrift::InlineAdapter<::apache::thrift::type::Type>, ::apache::thrift::type::struct_t<::apache::thrift::type::TypeStruct>>,
    ::apache::thrift::type::list<::apache::thrift::type::struct_t<::apache::thrift::type::Field>>
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  Sink();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  Sink(apache::thrift::FragileConstructor, ::apache::thrift::type::Type payload__arg, ::apache::thrift::type::Exceptions clientExceptions__arg, ::apache::thrift::type::Type finalResponse__arg, ::apache::thrift::type::Exceptions serverExceptions__arg);

  Sink(Sink&&) noexcept;
  Sink(const Sink& src);


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

  ~Sink();

 private:
  ::apache::thrift::type::Type __fbthrift_field_payload;
 private:
  ::apache::thrift::type::Exceptions __fbthrift_field_clientExceptions;
 private:
  ::apache::thrift::type::Type __fbthrift_field_finalResponse;
 private:
  ::apache::thrift::type::Exceptions __fbthrift_field_serverExceptions;

 public:

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

  /** Glean { "field": "payload" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> payload_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_payload};
  }

  /** Glean { "field": "payload" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> payload_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_payload};
  }

  /** Glean { "field": "payload" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> payload_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_payload)};
  }

  /** Glean { "field": "payload" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> payload() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_payload};
  }

  /** Glean { "field": "payload" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> payload() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_payload};
  }

  /** Glean { "field": "payload" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> payload() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_payload)};
  }

  /** Glean { "field": "clientExceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> clientExceptions_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_clientExceptions};
  }

  /** Glean { "field": "clientExceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> clientExceptions_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_clientExceptions};
  }

  /** Glean { "field": "clientExceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> clientExceptions_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_clientExceptions)};
  }

  /** Glean { "field": "clientExceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> clientExceptions() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_clientExceptions};
  }

  /** Glean { "field": "clientExceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> clientExceptions() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_clientExceptions};
  }

  /** Glean { "field": "clientExceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> clientExceptions() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_clientExceptions)};
  }

  /** Glean { "field": "finalResponse" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> finalResponse_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_finalResponse};
  }

  /** Glean { "field": "finalResponse" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> finalResponse_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_finalResponse};
  }

  /** Glean { "field": "finalResponse" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> finalResponse_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_finalResponse)};
  }

  /** Glean { "field": "finalResponse" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> finalResponse() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_finalResponse};
  }

  /** Glean { "field": "finalResponse" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> finalResponse() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_finalResponse};
  }

  /** Glean { "field": "finalResponse" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> finalResponse() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_finalResponse)};
  }

  /** Glean { "field": "serverExceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> serverExceptions_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_serverExceptions};
  }

  /** Glean { "field": "serverExceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> serverExceptions_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_serverExceptions};
  }

  /** Glean { "field": "serverExceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> serverExceptions_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_serverExceptions)};
  }

  /** Glean { "field": "serverExceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> serverExceptions() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_serverExceptions};
  }

  /** Glean { "field": "serverExceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> serverExceptions() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_serverExceptions};
  }

  /** Glean { "field": "serverExceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> serverExceptions() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_serverExceptions)};
  }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "Interaction", "kind": "struct" } */
class Interaction final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/Interaction";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 2;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::attrs,
    ::apache::thrift::ident::functions
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::struct_t<::apache::thrift::type::DefinitionAttrs>,
    ::apache::thrift::type::list<::apache::thrift::type::struct_t<::apache::thrift::type::Function>>
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  Interaction();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  Interaction(apache::thrift::FragileConstructor, ::apache::thrift::type::DefinitionAttrs attrs__arg, ::apache::thrift::type::Functions functions__arg);

  Interaction(Interaction&&) noexcept;

  Interaction(const Interaction& src);


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

  ~Interaction();

 private:
  ::apache::thrift::type::DefinitionAttrs __fbthrift_field_attrs;
 private:
  ::apache::thrift::type::Functions __fbthrift_field_functions;

 public:

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

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "functions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Functions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> functions_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_functions};
  }

  /** Glean { "field": "functions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Functions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> functions_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_functions};
  }

  /** Glean { "field": "functions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Functions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> functions_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_functions)};
  }

  /** Glean { "field": "functions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Functions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> functions() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_functions};
  }

  /** Glean { "field": "functions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Functions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> functions() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_functions};
  }

  /** Glean { "field": "functions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Functions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> functions() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_functions)};
  }
  FOLLY_ERASE auto name() &           { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() const&      { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() &&          { return std::move(*attrs_ref()).name_ref(); }
  FOLLY_ERASE auto name() const&&     { return std::move(*attrs_ref()).name_ref(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &       { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&  { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &&      { return std::move(*this).name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&& { return std::move(*this).name(); }
  FOLLY_ERASE auto uri() &           { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() const&      { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() &&          { return std::move(*attrs_ref()).uri_ref(); }
  FOLLY_ERASE auto uri() const&&     { return std::move(*attrs_ref()).uri_ref(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &       { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&  { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &&      { return std::move(*this).uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&& { return std::move(*this).uri(); }
  FOLLY_ERASE auto structuredAnnotations() &           { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&      { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() &&          { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&&     { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &       { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&  { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &&      { return std::move(*this).structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&& { return std::move(*this).structuredAnnotations(); }
  FOLLY_ERASE auto annotations() &           { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() const&      { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() &&          { return std::move(*attrs_ref()).annotations_ref(); }
  FOLLY_ERASE auto annotations() const&&     { return std::move(*attrs_ref()).annotations_ref(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &       { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&  { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &&      { return std::move(*this).annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&& { return std::move(*this).annotations(); }
  FOLLY_ERASE auto annotationsByKey() &           { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&      { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() &&          { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&&     { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &       { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&  { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &&      { return std::move(*this).annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&& { return std::move(*this).annotationsByKey(); }
  FOLLY_ERASE auto unstructuredAnnotations() &           { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&      { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() &&          { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&&     { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &       { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&  { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &&      { return std::move(*this).unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&& { return std::move(*this).unstructuredAnnotations(); }
  FOLLY_ERASE auto docs() &           { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() const&      { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() &&          { return std::move(*attrs_ref()).docs_ref(); }
  FOLLY_ERASE auto docs() const&&     { return std::move(*attrs_ref()).docs_ref(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &       { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&  { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &&      { return std::move(*this).docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&& { return std::move(*this).docs(); }
  FOLLY_ERASE auto sourceRange() &           { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&      { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() &&          { return std::move(*attrs_ref()).sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&&     { return std::move(*attrs_ref()).sourceRange_ref(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &       { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&  { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &&      { return std::move(*this).sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&& { return std::move(*this).sourceRange(); }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "ReturnType", "kind": "union" } */
class ReturnType final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/ReturnType";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 4;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2,3,4};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::thriftType,
    ::apache::thrift::ident::streamType,
    ::apache::thrift::ident::sinkType,
    ::apache::thrift::ident::interactionType
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::adapted<::apache::thrift::InlineAdapter<::apache::thrift::type::Type>, ::apache::thrift::type::struct_t<::apache::thrift::type::TypeStruct>>,
    ::apache::thrift::type::struct_t<::apache::thrift::type::Stream>,
    ::apache::thrift::type::struct_t<::apache::thrift::type::Sink>,
    ::apache::thrift::type::adapted<::apache::thrift::type::detail::StrongIntegerAdapter<::apache::thrift::type::DefinitionId>, ::apache::thrift::type::i64_t>
  >;
  void __fbthrift_clear();
  void __fbthrift_destruct();
  bool __fbthrift_is_empty() const;

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


 public:
  enum class Type : int {
    __EMPTY__ = 0,
    thriftType = 1,
    streamType = 2,
    sinkType = 3,
    interactionType = 4,
  } ;

  ReturnType()
      : fbthrift_type_(folly::to_underlying(Type::__EMPTY__)) {}

  ReturnType(ReturnType&& rhs) noexcept
      : fbthrift_type_(folly::to_underlying(Type::__EMPTY__)) {
    if (this == &rhs) { return; }
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return;
      }
      case Type::thriftType:
      {
        set_thriftType(std::move(rhs.value_.thriftType));
        break;
      }
      case Type::streamType:
      {
        set_streamType(std::move(rhs.value_.streamType));
        break;
      }
      case Type::sinkType:
      {
        set_sinkType(std::move(rhs.value_.sinkType));
        break;
      }
      case Type::interactionType:
      {
        set_interactionType(std::move(rhs.value_.interactionType));
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
    apache::thrift::clear(rhs);
  }

  ReturnType(const ReturnType& rhs);

  ReturnType& operator=(ReturnType&& rhs) noexcept {
    if (this == &rhs) { return *this; }
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        __fbthrift_clear();
        return *this;
      }
      case Type::thriftType:
      {
        set_thriftType(std::move(rhs.value_.thriftType));
        break;
      }
      case Type::streamType:
      {
        set_streamType(std::move(rhs.value_.streamType));
        break;
      }
      case Type::sinkType:
      {
        set_sinkType(std::move(rhs.value_.sinkType));
        break;
      }
      case Type::interactionType:
      {
        set_interactionType(std::move(rhs.value_.interactionType));
        break;
      }
      default:
      {
        assert(false);
        __fbthrift_clear();
      }
    }
    apache::thrift::clear(rhs);
    return *this;
  }

  ReturnType& operator=(const ReturnType& rhs);

  ~ReturnType();

  union storage_type {
    ::apache::thrift::type::Type thriftType;
    ::apache::thrift::type::Stream streamType;
    ::apache::thrift::type::Sink sinkType;
    ::apache::thrift::type::DefinitionId interactionType;

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

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

  /** Glean { "field": "thriftType" } */
  template <typename... A> requires (sizeof...(A) == 0)
  ::apache::thrift::type::Type& set_thriftType(::apache::thrift::type::Type const &t) {
    using T0 = ::apache::thrift::type::Type;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::thriftType);
    ::new (std::addressof(value_.thriftType)) T(t);
    return value_.thriftType;
  }

  /** Glean { "field": "thriftType" } */
  template <typename... A> requires (sizeof...(A) == 0)
  ::apache::thrift::type::Type& set_thriftType(::apache::thrift::type::Type&& t) {
    using T0 = ::apache::thrift::type::Type;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::thriftType);
    ::new (std::addressof(value_.thriftType)) T(std::move(t));
    return value_.thriftType;
  }

  /** Glean { "field": "thriftType" } */
  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::type::Type, T...>> ::apache::thrift::type::Type& set_thriftType(T&&... t) {
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::thriftType);
    ::new (std::addressof(value_.thriftType)) ::apache::thrift::type::Type(std::forward<T>(t)...);
    return value_.thriftType;
  }

  /** Glean { "field": "streamType" } */
  template <typename... A> requires (sizeof...(A) == 0)
  ::apache::thrift::type::Stream& set_streamType(::apache::thrift::type::Stream const &t) {
    using T0 = ::apache::thrift::type::Stream;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::streamType);
    ::new (std::addressof(value_.streamType)) T(t);
    return value_.streamType;
  }

  /** Glean { "field": "streamType" } */
  template <typename... A> requires (sizeof...(A) == 0)
  ::apache::thrift::type::Stream& set_streamType(::apache::thrift::type::Stream&& t) {
    using T0 = ::apache::thrift::type::Stream;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::streamType);
    ::new (std::addressof(value_.streamType)) T(std::move(t));
    return value_.streamType;
  }

  /** Glean { "field": "streamType" } */
  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::type::Stream, T...>> ::apache::thrift::type::Stream& set_streamType(T&&... t) {
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::streamType);
    ::new (std::addressof(value_.streamType)) ::apache::thrift::type::Stream(std::forward<T>(t)...);
    return value_.streamType;
  }

  /** Glean { "field": "sinkType" } */
  template <typename... A> requires (sizeof...(A) == 0)
  ::apache::thrift::type::Sink& set_sinkType(::apache::thrift::type::Sink const &t) {
    using T0 = ::apache::thrift::type::Sink;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::sinkType);
    ::new (std::addressof(value_.sinkType)) T(t);
    return value_.sinkType;
  }

  /** Glean { "field": "sinkType" } */
  template <typename... A> requires (sizeof...(A) == 0)
  ::apache::thrift::type::Sink& set_sinkType(::apache::thrift::type::Sink&& t) {
    using T0 = ::apache::thrift::type::Sink;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::sinkType);
    ::new (std::addressof(value_.sinkType)) T(std::move(t));
    return value_.sinkType;
  }

  /** Glean { "field": "sinkType" } */
  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::type::Sink, T...>> ::apache::thrift::type::Sink& set_sinkType(T&&... t) {
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::sinkType);
    ::new (std::addressof(value_.sinkType)) ::apache::thrift::type::Sink(std::forward<T>(t)...);
    return value_.sinkType;
  }

  /** Glean { "field": "interactionType" } */
  template <typename... A> requires (sizeof...(A) == 0)
  ::apache::thrift::type::DefinitionId& set_interactionType(::apache::thrift::type::DefinitionId t = ::apache::thrift::type::DefinitionId()) {
    using T0 = ::apache::thrift::type::DefinitionId;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::interactionType);
    ::new (std::addressof(value_.interactionType)) T(t);
    return value_.interactionType;
  }


  /** Glean { "field": "thriftType" } */
  ::apache::thrift::type::Type const& get_thriftType() const {
    if (getType() != Type::thriftType) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.thriftType;
  }

  /** Glean { "field": "streamType" } */
  ::apache::thrift::type::Stream const& get_streamType() const {
    if (getType() != Type::streamType) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.streamType;
  }

  /** Glean { "field": "sinkType" } */
  ::apache::thrift::type::Sink const& get_sinkType() const {
    if (getType() != Type::sinkType) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.sinkType;
  }

  /** Glean { "field": "interactionType" } */
  ::apache::thrift::type::DefinitionId const& get_interactionType() const {
    if (getType() != Type::interactionType) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.interactionType;
  }

  ::apache::thrift::type::Type& mutable_thriftType() {
    assert(getType() == Type::thriftType);
    return value_.thriftType;
  }

  ::apache::thrift::type::Stream& mutable_streamType() {
    assert(getType() == Type::streamType);
    return value_.streamType;
  }

  ::apache::thrift::type::Sink& mutable_sinkType() {
    assert(getType() == Type::sinkType);
    return value_.sinkType;
  }

  ::apache::thrift::type::DefinitionId& mutable_interactionType() {
    assert(getType() == Type::interactionType);
    return value_.interactionType;
  }

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

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

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

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

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

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

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

  /** Glean { "field": "thriftType" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<const ::apache::thrift::type::Type&> thriftType() const& {
    return {value_.thriftType, fbthrift_type_, folly::to_underlying(Type::thriftType), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "thriftType" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<::apache::thrift::type::Type&> thriftType() & {
    return {value_.thriftType, fbthrift_type_, folly::to_underlying(Type::thriftType), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

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

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

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

  /** Glean { "field": "streamType" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<const ::apache::thrift::type::Stream&> streamType() const& {
    return {value_.streamType, fbthrift_type_, folly::to_underlying(Type::streamType), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "streamType" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<::apache::thrift::type::Stream&> streamType() & {
    return {value_.streamType, fbthrift_type_, folly::to_underlying(Type::streamType), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "streamType" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<::apache::thrift::type::Stream&&> streamType() && {
    return {std::move(value_.streamType), fbthrift_type_, folly::to_underlying(Type::streamType), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  /** Glean { "field": "sinkType" } */
  template <typename..., typename T = ::apache::thrift::type::Sink>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> sinkType_ref() const& {
    return {value_.sinkType, fbthrift_type_, folly::to_underlying(Type::sinkType), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

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

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

  /** Glean { "field": "sinkType" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<const ::apache::thrift::type::Sink&> sinkType() const& {
    return {value_.sinkType, fbthrift_type_, folly::to_underlying(Type::sinkType), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "sinkType" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<::apache::thrift::type::Sink&> sinkType() & {
    return {value_.sinkType, fbthrift_type_, folly::to_underlying(Type::sinkType), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "sinkType" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<::apache::thrift::type::Sink&&> sinkType() && {
    return {std::move(value_.sinkType), fbthrift_type_, folly::to_underlying(Type::sinkType), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  /** Glean { "field": "interactionType" } */
  template <typename..., typename T = ::apache::thrift::type::DefinitionId>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> interactionType_ref() const& {
    return {value_.interactionType, fbthrift_type_, folly::to_underlying(Type::interactionType), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

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

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

  /** Glean { "field": "interactionType" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<const ::apache::thrift::type::DefinitionId&> interactionType() const& {
    return {value_.interactionType, fbthrift_type_, folly::to_underlying(Type::interactionType), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "interactionType" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<::apache::thrift::type::DefinitionId&> interactionType() & {
    return {value_.interactionType, fbthrift_type_, folly::to_underlying(Type::interactionType), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "interactionType" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<::apache::thrift::type::DefinitionId&&> interactionType() && {
    return {std::move(value_.interactionType), fbthrift_type_, folly::to_underlying(Type::interactionType), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  Type getType() const { return static_cast<Type>(fbthrift_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> fbthrift_type_;

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

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "Function", "kind": "struct" } */
class Function final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/Function";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 9;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2,3,4,5,6,7,8,9};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::qualifier,
    ::apache::thrift::ident::returnTypes,
    ::apache::thrift::ident::attrs,
    ::apache::thrift::ident::paramlist,
    ::apache::thrift::ident::exceptions,
    ::apache::thrift::ident::returnType,
    ::apache::thrift::ident::streamOrSink,
    ::apache::thrift::ident::interactionType,
    ::apache::thrift::ident::isPerforms
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::enum_t<::apache::thrift::type::FunctionQualifier>,
    ::apache::thrift::type::list<::apache::thrift::type::union_t<::apache::thrift::type::ReturnType>>,
    ::apache::thrift::type::struct_t<::apache::thrift::type::DefinitionAttrs>,
    ::apache::thrift::type::struct_t<::apache::thrift::type::Paramlist>,
    ::apache::thrift::type::list<::apache::thrift::type::struct_t<::apache::thrift::type::Field>>,
    ::apache::thrift::type::adapted<::apache::thrift::InlineAdapter<::apache::thrift::type::Type>, ::apache::thrift::type::struct_t<::apache::thrift::type::TypeStruct>>,
    ::apache::thrift::type::union_t<::apache::thrift::type::ReturnType>,
    ::apache::thrift::type::struct_t<::apache::thrift::type::InterfaceRef>,
    ::apache::thrift::type::bool_t
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  Function();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  Function(apache::thrift::FragileConstructor, ::apache::thrift::type::FunctionQualifier qualifier__arg, ::apache::thrift::type::ReturnTypes returnTypes__arg, ::apache::thrift::type::DefinitionAttrs attrs__arg, ::apache::thrift::type::Paramlist paramlist__arg, ::apache::thrift::type::Exceptions exceptions__arg, ::apache::thrift::type::Type returnType__arg, ::apache::thrift::type::ReturnType streamOrSink__arg, ::apache::thrift::type::InterfaceRef interactionType__arg, bool isPerforms__arg);

  Function(Function&&) noexcept;
  Function(const Function& src);


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

  ~Function();

 private:
  ::apache::thrift::type::FunctionQualifier __fbthrift_field_qualifier;
 private:
  ::apache::thrift::type::ReturnTypes __fbthrift_field_returnTypes;
 private:
  ::apache::thrift::type::DefinitionAttrs __fbthrift_field_attrs;
 private:
  ::apache::thrift::type::Paramlist __fbthrift_field_paramlist;
 private:
  ::apache::thrift::type::Exceptions __fbthrift_field_exceptions;
 private:
  ::apache::thrift::type::Type __fbthrift_field_returnType;
 private:
  ::apache::thrift::type::ReturnType __fbthrift_field_streamOrSink;
 private:
  ::apache::thrift::type::InterfaceRef __fbthrift_field_interactionType;
 private:
  bool __fbthrift_field_isPerforms;

 public:

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

  /** Glean { "field": "qualifier" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::FunctionQualifier>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> qualifier_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_qualifier};
  }

  /** Glean { "field": "qualifier" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::FunctionQualifier>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> qualifier_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_qualifier};
  }

  /** Glean { "field": "qualifier" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::FunctionQualifier>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> qualifier_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_qualifier)};
  }

  /** Glean { "field": "qualifier" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::FunctionQualifier>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> qualifier() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_qualifier};
  }

  /** Glean { "field": "qualifier" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::FunctionQualifier>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> qualifier() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_qualifier};
  }

  /** Glean { "field": "qualifier" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::FunctionQualifier>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> qualifier() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_qualifier)};
  }

  /** Glean { "field": "returnTypes" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ReturnTypes>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> returnTypes_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_returnTypes};
  }

  /** Glean { "field": "returnTypes" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ReturnTypes>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> returnTypes_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_returnTypes};
  }

  /** Glean { "field": "returnTypes" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ReturnTypes>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> returnTypes_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_returnTypes)};
  }

  /** Glean { "field": "returnTypes" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ReturnTypes>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> returnTypes() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_returnTypes};
  }

  /** Glean { "field": "returnTypes" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ReturnTypes>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> returnTypes() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_returnTypes};
  }

  /** Glean { "field": "returnTypes" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ReturnTypes>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> returnTypes() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_returnTypes)};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "paramlist" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Paramlist>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> paramlist_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_paramlist};
  }

  /** Glean { "field": "paramlist" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Paramlist>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> paramlist_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_paramlist};
  }

  /** Glean { "field": "paramlist" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Paramlist>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> paramlist_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_paramlist)};
  }

  /** Glean { "field": "paramlist" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Paramlist>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> paramlist() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_paramlist};
  }

  /** Glean { "field": "paramlist" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Paramlist>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> paramlist() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_paramlist};
  }

  /** Glean { "field": "paramlist" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Paramlist>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> paramlist() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_paramlist)};
  }

  /** Glean { "field": "exceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> exceptions_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_exceptions};
  }

  /** Glean { "field": "exceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> exceptions_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_exceptions};
  }

  /** Glean { "field": "exceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> exceptions_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_exceptions)};
  }

  /** Glean { "field": "exceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> exceptions() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_exceptions};
  }

  /** Glean { "field": "exceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> exceptions() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_exceptions};
  }

  /** Glean { "field": "exceptions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Exceptions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> exceptions() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_exceptions)};
  }

  /** Glean { "field": "returnType" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> returnType_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_returnType};
  }

  /** Glean { "field": "returnType" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> returnType_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_returnType};
  }

  /** Glean { "field": "returnType" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> returnType_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_returnType)};
  }

  /** Glean { "field": "returnType" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> returnType() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_returnType};
  }

  /** Glean { "field": "returnType" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> returnType() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_returnType};
  }

  /** Glean { "field": "returnType" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> returnType() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_returnType)};
  }

  /** Glean { "field": "streamOrSink" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ReturnType>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> streamOrSink_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_streamOrSink};
  }

  /** Glean { "field": "streamOrSink" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ReturnType>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> streamOrSink_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_streamOrSink};
  }

  /** Glean { "field": "streamOrSink" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ReturnType>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> streamOrSink_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_streamOrSink)};
  }

  /** Glean { "field": "streamOrSink" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ReturnType>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> streamOrSink() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_streamOrSink};
  }

  /** Glean { "field": "streamOrSink" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ReturnType>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> streamOrSink() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_streamOrSink};
  }

  /** Glean { "field": "streamOrSink" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ReturnType>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> streamOrSink() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_streamOrSink)};
  }

  /** Glean { "field": "interactionType" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::InterfaceRef>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> interactionType_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_interactionType};
  }

  /** Glean { "field": "interactionType" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::InterfaceRef>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> interactionType_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_interactionType};
  }

  /** Glean { "field": "interactionType" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::InterfaceRef>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> interactionType_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_interactionType)};
  }

  /** Glean { "field": "interactionType" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::InterfaceRef>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> interactionType() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_interactionType};
  }

  /** Glean { "field": "interactionType" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::InterfaceRef>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> interactionType() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_interactionType};
  }

  /** Glean { "field": "interactionType" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::InterfaceRef>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> interactionType() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_interactionType)};
  }

  /** Glean { "field": "isPerforms" } */
  template <typename..., typename fbthrift_T = bool>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> isPerforms_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_isPerforms};
  }

  /** Glean { "field": "isPerforms" } */
  template <typename..., typename fbthrift_T = bool>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> isPerforms_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_isPerforms};
  }

  /** Glean { "field": "isPerforms" } */
  template <typename..., typename fbthrift_T = bool>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> isPerforms_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_isPerforms)};
  }

  /** Glean { "field": "isPerforms" } */
  template <typename..., typename fbthrift_T = bool>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> isPerforms() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_isPerforms};
  }

  /** Glean { "field": "isPerforms" } */
  template <typename..., typename fbthrift_T = bool>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> isPerforms() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_isPerforms};
  }

  /** Glean { "field": "isPerforms" } */
  template <typename..., typename fbthrift_T = bool>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> isPerforms() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_isPerforms)};
  }
  FOLLY_ERASE auto name() &           { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() const&      { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() &&          { return std::move(*attrs_ref()).name_ref(); }
  FOLLY_ERASE auto name() const&&     { return std::move(*attrs_ref()).name_ref(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &       { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&  { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &&      { return std::move(*this).name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&& { return std::move(*this).name(); }
  FOLLY_ERASE auto uri() &           { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() const&      { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() &&          { return std::move(*attrs_ref()).uri_ref(); }
  FOLLY_ERASE auto uri() const&&     { return std::move(*attrs_ref()).uri_ref(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &       { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&  { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &&      { return std::move(*this).uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&& { return std::move(*this).uri(); }
  FOLLY_ERASE auto structuredAnnotations() &           { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&      { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() &&          { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&&     { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &       { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&  { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &&      { return std::move(*this).structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&& { return std::move(*this).structuredAnnotations(); }
  FOLLY_ERASE auto annotations() &           { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() const&      { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() &&          { return std::move(*attrs_ref()).annotations_ref(); }
  FOLLY_ERASE auto annotations() const&&     { return std::move(*attrs_ref()).annotations_ref(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &       { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&  { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &&      { return std::move(*this).annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&& { return std::move(*this).annotations(); }
  FOLLY_ERASE auto annotationsByKey() &           { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&      { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() &&          { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&&     { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &       { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&  { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &&      { return std::move(*this).annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&& { return std::move(*this).annotationsByKey(); }
  FOLLY_ERASE auto unstructuredAnnotations() &           { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&      { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() &&          { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&&     { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &       { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&  { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &&      { return std::move(*this).unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&& { return std::move(*this).unstructuredAnnotations(); }
  FOLLY_ERASE auto docs() &           { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() const&      { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() &&          { return std::move(*attrs_ref()).docs_ref(); }
  FOLLY_ERASE auto docs() const&&     { return std::move(*attrs_ref()).docs_ref(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &       { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&  { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &&      { return std::move(*this).docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&& { return std::move(*this).docs(); }
  FOLLY_ERASE auto sourceRange() &           { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&      { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() &&          { return std::move(*attrs_ref()).sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&&     { return std::move(*attrs_ref()).sourceRange_ref(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &       { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&  { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &&      { return std::move(*this).sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&& { return std::move(*this).sourceRange(); }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "Service", "kind": "struct" } */
class Service final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/Service";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 3;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2,3};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::attrs,
    ::apache::thrift::ident::functions,
    ::apache::thrift::ident::baseService
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::struct_t<::apache::thrift::type::DefinitionAttrs>,
    ::apache::thrift::type::list<::apache::thrift::type::struct_t<::apache::thrift::type::Function>>,
    ::apache::thrift::type::struct_t<::apache::thrift::type::InterfaceRef>
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  Service();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  Service(apache::thrift::FragileConstructor, ::apache::thrift::type::DefinitionAttrs attrs__arg, ::apache::thrift::type::Functions functions__arg, ::apache::thrift::type::InterfaceRef baseService__arg);

  Service(Service&&) noexcept;

  Service(const Service& src);


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

  ~Service();

 private:
  ::apache::thrift::type::DefinitionAttrs __fbthrift_field_attrs;
 private:
  ::apache::thrift::type::Functions __fbthrift_field_functions;
 private:
  ::apache::thrift::type::InterfaceRef __fbthrift_field_baseService;

 public:

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

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "functions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Functions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> functions_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_functions};
  }

  /** Glean { "field": "functions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Functions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> functions_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_functions};
  }

  /** Glean { "field": "functions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Functions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> functions_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_functions)};
  }

  /** Glean { "field": "functions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Functions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> functions() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_functions};
  }

  /** Glean { "field": "functions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Functions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> functions() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_functions};
  }

  /** Glean { "field": "functions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Functions>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> functions() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_functions)};
  }

  /** Glean { "field": "baseService" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::InterfaceRef>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> baseService_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_baseService};
  }

  /** Glean { "field": "baseService" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::InterfaceRef>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> baseService_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_baseService};
  }

  /** Glean { "field": "baseService" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::InterfaceRef>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> baseService_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_baseService)};
  }

  /** Glean { "field": "baseService" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::InterfaceRef>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> baseService() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_baseService};
  }

  /** Glean { "field": "baseService" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::InterfaceRef>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> baseService() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_baseService};
  }

  /** Glean { "field": "baseService" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::InterfaceRef>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> baseService() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_baseService)};
  }
  FOLLY_ERASE auto name() &           { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() const&      { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() &&          { return std::move(*attrs_ref()).name_ref(); }
  FOLLY_ERASE auto name() const&&     { return std::move(*attrs_ref()).name_ref(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &       { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&  { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &&      { return std::move(*this).name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&& { return std::move(*this).name(); }
  FOLLY_ERASE auto uri() &           { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() const&      { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() &&          { return std::move(*attrs_ref()).uri_ref(); }
  FOLLY_ERASE auto uri() const&&     { return std::move(*attrs_ref()).uri_ref(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &       { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&  { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &&      { return std::move(*this).uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&& { return std::move(*this).uri(); }
  FOLLY_ERASE auto structuredAnnotations() &           { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&      { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() &&          { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&&     { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &       { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&  { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &&      { return std::move(*this).structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&& { return std::move(*this).structuredAnnotations(); }
  FOLLY_ERASE auto annotations() &           { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() const&      { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() &&          { return std::move(*attrs_ref()).annotations_ref(); }
  FOLLY_ERASE auto annotations() const&&     { return std::move(*attrs_ref()).annotations_ref(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &       { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&  { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &&      { return std::move(*this).annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&& { return std::move(*this).annotations(); }
  FOLLY_ERASE auto annotationsByKey() &           { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&      { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() &&          { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&&     { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &       { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&  { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &&      { return std::move(*this).annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&& { return std::move(*this).annotationsByKey(); }
  FOLLY_ERASE auto unstructuredAnnotations() &           { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&      { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() &&          { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&&     { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &       { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&  { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &&      { return std::move(*this).unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&& { return std::move(*this).unstructuredAnnotations(); }
  FOLLY_ERASE auto docs() &           { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() const&      { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() &&          { return std::move(*attrs_ref()).docs_ref(); }
  FOLLY_ERASE auto docs() const&&     { return std::move(*attrs_ref()).docs_ref(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &       { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&  { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &&      { return std::move(*this).docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&& { return std::move(*this).docs(); }
  FOLLY_ERASE auto sourceRange() &           { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&      { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() &&          { return std::move(*attrs_ref()).sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&&     { return std::move(*attrs_ref()).sourceRange_ref(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &       { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&  { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &&      { return std::move(*this).sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&& { return std::move(*this).sourceRange(); }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "Const", "kind": "struct" } */
class Const final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/Const";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 3;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2,3};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::attrs,
    ::apache::thrift::ident::type,
    ::apache::thrift::ident::value
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::struct_t<::apache::thrift::type::DefinitionAttrs>,
    ::apache::thrift::type::adapted<::apache::thrift::InlineAdapter<::apache::thrift::type::Type>, ::apache::thrift::type::struct_t<::apache::thrift::type::TypeStruct>>,
    ::apache::thrift::type::adapted<::apache::thrift::type::detail::StrongIntegerAdapter<::apache::thrift::type::ValueId>, ::apache::thrift::type::i64_t>
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  Const() :
      __fbthrift_field_value() {
    ::apache::thrift::adapt_detail::construct<::apache::thrift::InlineAdapter<::apache::thrift::type::Type>, 2>(__fbthrift_field_type, *this);
    ::apache::thrift::adapt_detail::construct<::apache::thrift::type::detail::StrongIntegerAdapter<::apache::thrift::type::ValueId>, 3>(__fbthrift_field_value, *this);
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  Const(apache::thrift::FragileConstructor, ::apache::thrift::type::DefinitionAttrs attrs__arg, ::apache::thrift::type::Type type__arg, ::apache::thrift::type::ValueId value__arg);

  Const(Const&&) noexcept;
  Const(const Const& src);


  Const& operator=(Const&&) noexcept;
  Const& operator=(const Const& src);
 private:
  ::apache::thrift::type::DefinitionAttrs __fbthrift_field_attrs;
 private:
  ::apache::thrift::type::Type __fbthrift_field_type;
 private:
  ::apache::thrift::type::ValueId __fbthrift_field_value;

 public:

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

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> type_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_type};
  }

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> type_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_type};
  }

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> type_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_type)};
  }

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> type() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_type};
  }

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> type() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_type};
  }

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> type() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_type)};
  }

  /** Glean { "field": "value" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ValueId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> value_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_value};
  }

  /** Glean { "field": "value" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ValueId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> value_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_value};
  }

  /** Glean { "field": "value" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ValueId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> value_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_value)};
  }

  /** Glean { "field": "value" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ValueId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> value() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_value};
  }

  /** Glean { "field": "value" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ValueId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> value() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_value};
  }

  /** Glean { "field": "value" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ValueId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> value() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_value)};
  }
  FOLLY_ERASE auto name() &           { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() const&      { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() &&          { return std::move(*attrs_ref()).name_ref(); }
  FOLLY_ERASE auto name() const&&     { return std::move(*attrs_ref()).name_ref(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &       { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&  { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &&      { return std::move(*this).name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&& { return std::move(*this).name(); }
  FOLLY_ERASE auto uri() &           { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() const&      { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() &&          { return std::move(*attrs_ref()).uri_ref(); }
  FOLLY_ERASE auto uri() const&&     { return std::move(*attrs_ref()).uri_ref(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &       { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&  { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &&      { return std::move(*this).uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&& { return std::move(*this).uri(); }
  FOLLY_ERASE auto structuredAnnotations() &           { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&      { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() &&          { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&&     { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &       { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&  { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &&      { return std::move(*this).structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&& { return std::move(*this).structuredAnnotations(); }
  FOLLY_ERASE auto annotations() &           { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() const&      { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() &&          { return std::move(*attrs_ref()).annotations_ref(); }
  FOLLY_ERASE auto annotations() const&&     { return std::move(*attrs_ref()).annotations_ref(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &       { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&  { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &&      { return std::move(*this).annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&& { return std::move(*this).annotations(); }
  FOLLY_ERASE auto annotationsByKey() &           { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&      { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() &&          { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&&     { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &       { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&  { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &&      { return std::move(*this).annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&& { return std::move(*this).annotationsByKey(); }
  FOLLY_ERASE auto unstructuredAnnotations() &           { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&      { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() &&          { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&&     { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &       { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&  { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &&      { return std::move(*this).unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&& { return std::move(*this).unstructuredAnnotations(); }
  FOLLY_ERASE auto docs() &           { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() const&      { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() &&          { return std::move(*attrs_ref()).docs_ref(); }
  FOLLY_ERASE auto docs() const&&     { return std::move(*attrs_ref()).docs_ref(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &       { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&  { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &&      { return std::move(*this).docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&& { return std::move(*this).docs(); }
  FOLLY_ERASE auto sourceRange() &           { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&      { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() &&          { return std::move(*attrs_ref()).sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&&     { return std::move(*attrs_ref()).sourceRange_ref(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &       { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&  { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &&      { return std::move(*this).sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&& { return std::move(*this).sourceRange(); }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "Typedef", "kind": "struct" } */
class Typedef final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/Typedef";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 2;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::attrs,
    ::apache::thrift::ident::type
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::struct_t<::apache::thrift::type::DefinitionAttrs>,
    ::apache::thrift::type::adapted<::apache::thrift::InlineAdapter<::apache::thrift::type::Type>, ::apache::thrift::type::struct_t<::apache::thrift::type::TypeStruct>>
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  Typedef() {
    ::apache::thrift::adapt_detail::construct<::apache::thrift::InlineAdapter<::apache::thrift::type::Type>, 2>(__fbthrift_field_type, *this);
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  Typedef(apache::thrift::FragileConstructor, ::apache::thrift::type::DefinitionAttrs attrs__arg, ::apache::thrift::type::Type type__arg);

  Typedef(Typedef&&) noexcept;
  Typedef(const Typedef& src);


  Typedef& operator=(Typedef&&) noexcept;
  Typedef& operator=(const Typedef& src);
 private:
  ::apache::thrift::type::DefinitionAttrs __fbthrift_field_attrs;
 private:
  ::apache::thrift::type::Type __fbthrift_field_type;

 public:

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

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> type_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_type};
  }

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> type_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_type};
  }

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> type_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_type)};
  }

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> type() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_type};
  }

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> type() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_type};
  }

  /** Glean { "field": "type" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::Type>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> type() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_type)};
  }
  FOLLY_ERASE auto name() &           { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() const&      { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() &&          { return std::move(*attrs_ref()).name_ref(); }
  FOLLY_ERASE auto name() const&&     { return std::move(*attrs_ref()).name_ref(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &       { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&  { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &&      { return std::move(*this).name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&& { return std::move(*this).name(); }
  FOLLY_ERASE auto uri() &           { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() const&      { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() &&          { return std::move(*attrs_ref()).uri_ref(); }
  FOLLY_ERASE auto uri() const&&     { return std::move(*attrs_ref()).uri_ref(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &       { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&  { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &&      { return std::move(*this).uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&& { return std::move(*this).uri(); }
  FOLLY_ERASE auto structuredAnnotations() &           { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&      { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() &&          { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&&     { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &       { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&  { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &&      { return std::move(*this).structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&& { return std::move(*this).structuredAnnotations(); }
  FOLLY_ERASE auto annotations() &           { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() const&      { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() &&          { return std::move(*attrs_ref()).annotations_ref(); }
  FOLLY_ERASE auto annotations() const&&     { return std::move(*attrs_ref()).annotations_ref(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &       { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&  { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &&      { return std::move(*this).annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&& { return std::move(*this).annotations(); }
  FOLLY_ERASE auto annotationsByKey() &           { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&      { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() &&          { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&&     { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &       { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&  { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &&      { return std::move(*this).annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&& { return std::move(*this).annotationsByKey(); }
  FOLLY_ERASE auto unstructuredAnnotations() &           { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&      { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() &&          { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&&     { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &       { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&  { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &&      { return std::move(*this).unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&& { return std::move(*this).unstructuredAnnotations(); }
  FOLLY_ERASE auto docs() &           { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() const&      { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() &&          { return std::move(*attrs_ref()).docs_ref(); }
  FOLLY_ERASE auto docs() const&&     { return std::move(*attrs_ref()).docs_ref(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &       { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&  { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &&      { return std::move(*this).docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&& { return std::move(*this).docs(); }
  FOLLY_ERASE auto sourceRange() &           { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&      { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() &&          { return std::move(*attrs_ref()).sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&&     { return std::move(*attrs_ref()).sourceRange_ref(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &       { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&  { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &&      { return std::move(*this).sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&& { return std::move(*this).sourceRange(); }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "Definition", "kind": "union" } */
class Definition final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/Definition";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 8;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2,3,4,5,6,7,8};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::structDef,
    ::apache::thrift::ident::unionDef,
    ::apache::thrift::ident::exceptionDef,
    ::apache::thrift::ident::enumDef,
    ::apache::thrift::ident::typedefDef,
    ::apache::thrift::ident::constDef,
    ::apache::thrift::ident::serviceDef,
    ::apache::thrift::ident::interactionDef
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::struct_t<::apache::thrift::type::Struct>,
    ::apache::thrift::type::struct_t<::apache::thrift::type::Union>,
    ::apache::thrift::type::struct_t<::apache::thrift::type::Exception>,
    ::apache::thrift::type::struct_t<::apache::thrift::type::Enum>,
    ::apache::thrift::type::struct_t<::apache::thrift::type::Typedef>,
    ::apache::thrift::type::struct_t<::apache::thrift::type::Const>,
    ::apache::thrift::type::struct_t<::apache::thrift::type::Service>,
    ::apache::thrift::type::struct_t<::apache::thrift::type::Interaction>
  >;
  void __fbthrift_clear();
  void __fbthrift_destruct();
  bool __fbthrift_is_empty() const;

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


 public:
  enum class Type : int {
    __EMPTY__ = 0,
    structDef = 1,
    unionDef = 2,
    exceptionDef = 3,
    enumDef = 4,
    typedefDef = 5,
    constDef = 6,
    serviceDef = 7,
    interactionDef = 8,
  } ;

  Definition()
      : fbthrift_type_(folly::to_underlying(Type::__EMPTY__)) {}

  Definition(Definition&& rhs) noexcept
      : fbthrift_type_(folly::to_underlying(Type::__EMPTY__)) {
    if (this == &rhs) { return; }
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return;
      }
      case Type::structDef:
      {
        set_structDef(std::move(rhs.value_.structDef));
        break;
      }
      case Type::unionDef:
      {
        set_unionDef(std::move(rhs.value_.unionDef));
        break;
      }
      case Type::exceptionDef:
      {
        set_exceptionDef(std::move(rhs.value_.exceptionDef));
        break;
      }
      case Type::enumDef:
      {
        set_enumDef(std::move(rhs.value_.enumDef));
        break;
      }
      case Type::typedefDef:
      {
        set_typedefDef(std::move(rhs.value_.typedefDef));
        break;
      }
      case Type::constDef:
      {
        set_constDef(std::move(rhs.value_.constDef));
        break;
      }
      case Type::serviceDef:
      {
        set_serviceDef(std::move(rhs.value_.serviceDef));
        break;
      }
      case Type::interactionDef:
      {
        set_interactionDef(std::move(rhs.value_.interactionDef));
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
    apache::thrift::clear(rhs);
  }

  Definition(const Definition& rhs);

  Definition& operator=(Definition&& rhs) noexcept {
    if (this == &rhs) { return *this; }
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        __fbthrift_clear();
        return *this;
      }
      case Type::structDef:
      {
        set_structDef(std::move(rhs.value_.structDef));
        break;
      }
      case Type::unionDef:
      {
        set_unionDef(std::move(rhs.value_.unionDef));
        break;
      }
      case Type::exceptionDef:
      {
        set_exceptionDef(std::move(rhs.value_.exceptionDef));
        break;
      }
      case Type::enumDef:
      {
        set_enumDef(std::move(rhs.value_.enumDef));
        break;
      }
      case Type::typedefDef:
      {
        set_typedefDef(std::move(rhs.value_.typedefDef));
        break;
      }
      case Type::constDef:
      {
        set_constDef(std::move(rhs.value_.constDef));
        break;
      }
      case Type::serviceDef:
      {
        set_serviceDef(std::move(rhs.value_.serviceDef));
        break;
      }
      case Type::interactionDef:
      {
        set_interactionDef(std::move(rhs.value_.interactionDef));
        break;
      }
      default:
      {
        assert(false);
        __fbthrift_clear();
      }
    }
    apache::thrift::clear(rhs);
    return *this;
  }

  Definition& operator=(const Definition& rhs);

  ~Definition();

  union storage_type {
    ::apache::thrift::type::Struct structDef;
    ::apache::thrift::type::Union unionDef;
    ::apache::thrift::type::Exception exceptionDef;
    ::apache::thrift::type::Enum enumDef;
    ::apache::thrift::type::Typedef typedefDef;
    ::apache::thrift::type::Const constDef;
    ::apache::thrift::type::Service serviceDef;
    ::apache::thrift::type::Interaction interactionDef;

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

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

  /** Glean { "field": "structDef" } */
  template <typename... A> requires (sizeof...(A) == 0)
  ::apache::thrift::type::Struct& set_structDef(::apache::thrift::type::Struct const &t) {
    using T0 = ::apache::thrift::type::Struct;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::structDef);
    ::new (std::addressof(value_.structDef)) T(t);
    return value_.structDef;
  }

  /** Glean { "field": "structDef" } */
  template <typename... A> requires (sizeof...(A) == 0)
  ::apache::thrift::type::Struct& set_structDef(::apache::thrift::type::Struct&& t) {
    using T0 = ::apache::thrift::type::Struct;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::structDef);
    ::new (std::addressof(value_.structDef)) T(std::move(t));
    return value_.structDef;
  }

  /** Glean { "field": "structDef" } */
  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::type::Struct, T...>> ::apache::thrift::type::Struct& set_structDef(T&&... t) {
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::structDef);
    ::new (std::addressof(value_.structDef)) ::apache::thrift::type::Struct(std::forward<T>(t)...);
    return value_.structDef;
  }

  /** Glean { "field": "unionDef" } */
  template <typename... A> requires (sizeof...(A) == 0)
  ::apache::thrift::type::Union& set_unionDef(::apache::thrift::type::Union const &t) {
    using T0 = ::apache::thrift::type::Union;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::unionDef);
    ::new (std::addressof(value_.unionDef)) T(t);
    return value_.unionDef;
  }

  /** Glean { "field": "unionDef" } */
  template <typename... A> requires (sizeof...(A) == 0)
  ::apache::thrift::type::Union& set_unionDef(::apache::thrift::type::Union&& t) {
    using T0 = ::apache::thrift::type::Union;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::unionDef);
    ::new (std::addressof(value_.unionDef)) T(std::move(t));
    return value_.unionDef;
  }

  /** Glean { "field": "unionDef" } */
  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::type::Union, T...>> ::apache::thrift::type::Union& set_unionDef(T&&... t) {
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::unionDef);
    ::new (std::addressof(value_.unionDef)) ::apache::thrift::type::Union(std::forward<T>(t)...);
    return value_.unionDef;
  }

  /** Glean { "field": "exceptionDef" } */
  template <typename... A> requires (sizeof...(A) == 0)
  ::apache::thrift::type::Exception& set_exceptionDef(::apache::thrift::type::Exception const &t) {
    using T0 = ::apache::thrift::type::Exception;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::exceptionDef);
    ::new (std::addressof(value_.exceptionDef)) T(t);
    return value_.exceptionDef;
  }

  /** Glean { "field": "exceptionDef" } */
  template <typename... A> requires (sizeof...(A) == 0)
  ::apache::thrift::type::Exception& set_exceptionDef(::apache::thrift::type::Exception&& t) {
    using T0 = ::apache::thrift::type::Exception;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::exceptionDef);
    ::new (std::addressof(value_.exceptionDef)) T(std::move(t));
    return value_.exceptionDef;
  }

  /** Glean { "field": "exceptionDef" } */
  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::type::Exception, T...>> ::apache::thrift::type::Exception& set_exceptionDef(T&&... t) {
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::exceptionDef);
    ::new (std::addressof(value_.exceptionDef)) ::apache::thrift::type::Exception(std::forward<T>(t)...);
    return value_.exceptionDef;
  }

  /** Glean { "field": "enumDef" } */
  template <typename... A> requires (sizeof...(A) == 0)
  ::apache::thrift::type::Enum& set_enumDef(::apache::thrift::type::Enum const &t) {
    using T0 = ::apache::thrift::type::Enum;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::enumDef);
    ::new (std::addressof(value_.enumDef)) T(t);
    return value_.enumDef;
  }

  /** Glean { "field": "enumDef" } */
  template <typename... A> requires (sizeof...(A) == 0)
  ::apache::thrift::type::Enum& set_enumDef(::apache::thrift::type::Enum&& t) {
    using T0 = ::apache::thrift::type::Enum;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::enumDef);
    ::new (std::addressof(value_.enumDef)) T(std::move(t));
    return value_.enumDef;
  }

  /** Glean { "field": "enumDef" } */
  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::type::Enum, T...>> ::apache::thrift::type::Enum& set_enumDef(T&&... t) {
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::enumDef);
    ::new (std::addressof(value_.enumDef)) ::apache::thrift::type::Enum(std::forward<T>(t)...);
    return value_.enumDef;
  }

  /** Glean { "field": "typedefDef" } */
  template <typename... A> requires (sizeof...(A) == 0)
  ::apache::thrift::type::Typedef& set_typedefDef(::apache::thrift::type::Typedef const &t) {
    using T0 = ::apache::thrift::type::Typedef;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::typedefDef);
    ::new (std::addressof(value_.typedefDef)) T(t);
    return value_.typedefDef;
  }

  /** Glean { "field": "typedefDef" } */
  template <typename... A> requires (sizeof...(A) == 0)
  ::apache::thrift::type::Typedef& set_typedefDef(::apache::thrift::type::Typedef&& t) {
    using T0 = ::apache::thrift::type::Typedef;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::typedefDef);
    ::new (std::addressof(value_.typedefDef)) T(std::move(t));
    return value_.typedefDef;
  }

  /** Glean { "field": "typedefDef" } */
  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::type::Typedef, T...>> ::apache::thrift::type::Typedef& set_typedefDef(T&&... t) {
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::typedefDef);
    ::new (std::addressof(value_.typedefDef)) ::apache::thrift::type::Typedef(std::forward<T>(t)...);
    return value_.typedefDef;
  }

  /** Glean { "field": "constDef" } */
  template <typename... A> requires (sizeof...(A) == 0)
  ::apache::thrift::type::Const& set_constDef(::apache::thrift::type::Const const &t) {
    using T0 = ::apache::thrift::type::Const;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::constDef);
    ::new (std::addressof(value_.constDef)) T(t);
    return value_.constDef;
  }

  /** Glean { "field": "constDef" } */
  template <typename... A> requires (sizeof...(A) == 0)
  ::apache::thrift::type::Const& set_constDef(::apache::thrift::type::Const&& t) {
    using T0 = ::apache::thrift::type::Const;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::constDef);
    ::new (std::addressof(value_.constDef)) T(std::move(t));
    return value_.constDef;
  }

  /** Glean { "field": "constDef" } */
  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::type::Const, T...>> ::apache::thrift::type::Const& set_constDef(T&&... t) {
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::constDef);
    ::new (std::addressof(value_.constDef)) ::apache::thrift::type::Const(std::forward<T>(t)...);
    return value_.constDef;
  }

  /** Glean { "field": "serviceDef" } */
  template <typename... A> requires (sizeof...(A) == 0)
  ::apache::thrift::type::Service& set_serviceDef(::apache::thrift::type::Service const &t) {
    using T0 = ::apache::thrift::type::Service;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::serviceDef);
    ::new (std::addressof(value_.serviceDef)) T(t);
    return value_.serviceDef;
  }

  /** Glean { "field": "serviceDef" } */
  template <typename... A> requires (sizeof...(A) == 0)
  ::apache::thrift::type::Service& set_serviceDef(::apache::thrift::type::Service&& t) {
    using T0 = ::apache::thrift::type::Service;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::serviceDef);
    ::new (std::addressof(value_.serviceDef)) T(std::move(t));
    return value_.serviceDef;
  }

  /** Glean { "field": "serviceDef" } */
  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::type::Service, T...>> ::apache::thrift::type::Service& set_serviceDef(T&&... t) {
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::serviceDef);
    ::new (std::addressof(value_.serviceDef)) ::apache::thrift::type::Service(std::forward<T>(t)...);
    return value_.serviceDef;
  }

  /** Glean { "field": "interactionDef" } */
  template <typename... A> requires (sizeof...(A) == 0)
  ::apache::thrift::type::Interaction& set_interactionDef(::apache::thrift::type::Interaction const &t) {
    using T0 = ::apache::thrift::type::Interaction;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::interactionDef);
    ::new (std::addressof(value_.interactionDef)) T(t);
    return value_.interactionDef;
  }

  /** Glean { "field": "interactionDef" } */
  template <typename... A> requires (sizeof...(A) == 0)
  ::apache::thrift::type::Interaction& set_interactionDef(::apache::thrift::type::Interaction&& t) {
    using T0 = ::apache::thrift::type::Interaction;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::interactionDef);
    ::new (std::addressof(value_.interactionDef)) T(std::move(t));
    return value_.interactionDef;
  }

  /** Glean { "field": "interactionDef" } */
  template<typename... T, typename = ::apache::thrift::safe_overload_t<::apache::thrift::type::Interaction, T...>> ::apache::thrift::type::Interaction& set_interactionDef(T&&... t) {
    __fbthrift_clear();
    fbthrift_type_ = folly::to_underlying(Type::interactionDef);
    ::new (std::addressof(value_.interactionDef)) ::apache::thrift::type::Interaction(std::forward<T>(t)...);
    return value_.interactionDef;
  }

  /** Glean { "field": "structDef" } */
  ::apache::thrift::type::Struct const& get_structDef() const {
    if (getType() != Type::structDef) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.structDef;
  }

  /** Glean { "field": "unionDef" } */
  ::apache::thrift::type::Union const& get_unionDef() const {
    if (getType() != Type::unionDef) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.unionDef;
  }

  /** Glean { "field": "exceptionDef" } */
  ::apache::thrift::type::Exception const& get_exceptionDef() const {
    if (getType() != Type::exceptionDef) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.exceptionDef;
  }

  /** Glean { "field": "enumDef" } */
  ::apache::thrift::type::Enum const& get_enumDef() const {
    if (getType() != Type::enumDef) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.enumDef;
  }

  /** Glean { "field": "typedefDef" } */
  ::apache::thrift::type::Typedef const& get_typedefDef() const {
    if (getType() != Type::typedefDef) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.typedefDef;
  }

  /** Glean { "field": "constDef" } */
  ::apache::thrift::type::Const const& get_constDef() const {
    if (getType() != Type::constDef) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.constDef;
  }

  /** Glean { "field": "serviceDef" } */
  ::apache::thrift::type::Service const& get_serviceDef() const {
    if (getType() != Type::serviceDef) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.serviceDef;
  }

  /** Glean { "field": "interactionDef" } */
  ::apache::thrift::type::Interaction const& get_interactionDef() const {
    if (getType() != Type::interactionDef) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.interactionDef;
  }

  ::apache::thrift::type::Struct& mutable_structDef() {
    assert(getType() == Type::structDef);
    return value_.structDef;
  }

  ::apache::thrift::type::Union& mutable_unionDef() {
    assert(getType() == Type::unionDef);
    return value_.unionDef;
  }

  ::apache::thrift::type::Exception& mutable_exceptionDef() {
    assert(getType() == Type::exceptionDef);
    return value_.exceptionDef;
  }

  ::apache::thrift::type::Enum& mutable_enumDef() {
    assert(getType() == Type::enumDef);
    return value_.enumDef;
  }

  ::apache::thrift::type::Typedef& mutable_typedefDef() {
    assert(getType() == Type::typedefDef);
    return value_.typedefDef;
  }

  ::apache::thrift::type::Const& mutable_constDef() {
    assert(getType() == Type::constDef);
    return value_.constDef;
  }

  ::apache::thrift::type::Service& mutable_serviceDef() {
    assert(getType() == Type::serviceDef);
    return value_.serviceDef;
  }

  ::apache::thrift::type::Interaction& mutable_interactionDef() {
    assert(getType() == Type::interactionDef);
    return value_.interactionDef;
  }

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

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

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

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

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

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

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

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

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

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

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

  /** Glean { "field": "structDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<const ::apache::thrift::type::Struct&> structDef() const& {
    return {value_.structDef, fbthrift_type_, folly::to_underlying(Type::structDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "structDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<::apache::thrift::type::Struct&> structDef() & {
    return {value_.structDef, fbthrift_type_, folly::to_underlying(Type::structDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "structDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<::apache::thrift::type::Struct&&> structDef() && {
    return {std::move(value_.structDef), fbthrift_type_, folly::to_underlying(Type::structDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  /** Glean { "field": "unionDef" } */
  template <typename..., typename T = ::apache::thrift::type::Union>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> unionDef_ref() const& {
    return {value_.unionDef, fbthrift_type_, folly::to_underlying(Type::unionDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

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

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

  /** Glean { "field": "unionDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<const ::apache::thrift::type::Union&> unionDef() const& {
    return {value_.unionDef, fbthrift_type_, folly::to_underlying(Type::unionDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "unionDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<::apache::thrift::type::Union&> unionDef() & {
    return {value_.unionDef, fbthrift_type_, folly::to_underlying(Type::unionDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "unionDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<::apache::thrift::type::Union&&> unionDef() && {
    return {std::move(value_.unionDef), fbthrift_type_, folly::to_underlying(Type::unionDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  /** Glean { "field": "exceptionDef" } */
  template <typename..., typename T = ::apache::thrift::type::Exception>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> exceptionDef_ref() const& {
    return {value_.exceptionDef, fbthrift_type_, folly::to_underlying(Type::exceptionDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

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

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

  /** Glean { "field": "exceptionDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<const ::apache::thrift::type::Exception&> exceptionDef() const& {
    return {value_.exceptionDef, fbthrift_type_, folly::to_underlying(Type::exceptionDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "exceptionDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<::apache::thrift::type::Exception&> exceptionDef() & {
    return {value_.exceptionDef, fbthrift_type_, folly::to_underlying(Type::exceptionDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "exceptionDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<::apache::thrift::type::Exception&&> exceptionDef() && {
    return {std::move(value_.exceptionDef), fbthrift_type_, folly::to_underlying(Type::exceptionDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  /** Glean { "field": "enumDef" } */
  template <typename..., typename T = ::apache::thrift::type::Enum>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> enumDef_ref() const& {
    return {value_.enumDef, fbthrift_type_, folly::to_underlying(Type::enumDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

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

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

  /** Glean { "field": "enumDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<const ::apache::thrift::type::Enum&> enumDef() const& {
    return {value_.enumDef, fbthrift_type_, folly::to_underlying(Type::enumDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "enumDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<::apache::thrift::type::Enum&> enumDef() & {
    return {value_.enumDef, fbthrift_type_, folly::to_underlying(Type::enumDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "enumDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<::apache::thrift::type::Enum&&> enumDef() && {
    return {std::move(value_.enumDef), fbthrift_type_, folly::to_underlying(Type::enumDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  /** Glean { "field": "typedefDef" } */
  template <typename..., typename T = ::apache::thrift::type::Typedef>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> typedefDef_ref() const& {
    return {value_.typedefDef, fbthrift_type_, folly::to_underlying(Type::typedefDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

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

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

  /** Glean { "field": "typedefDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<const ::apache::thrift::type::Typedef&> typedefDef() const& {
    return {value_.typedefDef, fbthrift_type_, folly::to_underlying(Type::typedefDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "typedefDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<::apache::thrift::type::Typedef&> typedefDef() & {
    return {value_.typedefDef, fbthrift_type_, folly::to_underlying(Type::typedefDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "typedefDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<::apache::thrift::type::Typedef&&> typedefDef() && {
    return {std::move(value_.typedefDef), fbthrift_type_, folly::to_underlying(Type::typedefDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  /** Glean { "field": "constDef" } */
  template <typename..., typename T = ::apache::thrift::type::Const>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> constDef_ref() const& {
    return {value_.constDef, fbthrift_type_, folly::to_underlying(Type::constDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

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

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

  /** Glean { "field": "constDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<const ::apache::thrift::type::Const&> constDef() const& {
    return {value_.constDef, fbthrift_type_, folly::to_underlying(Type::constDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "constDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<::apache::thrift::type::Const&> constDef() & {
    return {value_.constDef, fbthrift_type_, folly::to_underlying(Type::constDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "constDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<::apache::thrift::type::Const&&> constDef() && {
    return {std::move(value_.constDef), fbthrift_type_, folly::to_underlying(Type::constDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  /** Glean { "field": "serviceDef" } */
  template <typename..., typename T = ::apache::thrift::type::Service>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> serviceDef_ref() const& {
    return {value_.serviceDef, fbthrift_type_, folly::to_underlying(Type::serviceDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

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

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

  /** Glean { "field": "serviceDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<const ::apache::thrift::type::Service&> serviceDef() const& {
    return {value_.serviceDef, fbthrift_type_, folly::to_underlying(Type::serviceDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "serviceDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<::apache::thrift::type::Service&> serviceDef() & {
    return {value_.serviceDef, fbthrift_type_, folly::to_underlying(Type::serviceDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "serviceDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<::apache::thrift::type::Service&&> serviceDef() && {
    return {std::move(value_.serviceDef), fbthrift_type_, folly::to_underlying(Type::serviceDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  /** Glean { "field": "interactionDef" } */
  template <typename..., typename T = ::apache::thrift::type::Interaction>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> interactionDef_ref() const& {
    return {value_.interactionDef, fbthrift_type_, folly::to_underlying(Type::interactionDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

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

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

  /** Glean { "field": "interactionDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<const ::apache::thrift::type::Interaction&> interactionDef() const& {
    return {value_.interactionDef, fbthrift_type_, folly::to_underlying(Type::interactionDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "interactionDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<::apache::thrift::type::Interaction&> interactionDef() & {
    return {value_.interactionDef, fbthrift_type_, folly::to_underlying(Type::interactionDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "interactionDef" } */
  FOLLY_ERASE ::apache::thrift::union_field_ref<::apache::thrift::type::Interaction&&> interactionDef() && {
    return {std::move(value_.interactionDef), fbthrift_type_, folly::to_underlying(Type::interactionDef), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  Type getType() const { return static_cast<Type>(fbthrift_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> fbthrift_type_;

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

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "Program", "kind": "struct" } */
class Program final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/Program";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 8;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2,3,4,8,5,6,7};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::attrs,
    ::apache::thrift::ident::id,
    ::apache::thrift::ident::includes,
    ::apache::thrift::ident::definitions,
    ::apache::thrift::ident::definitionKeys,
    ::apache::thrift::ident::path,
    ::apache::thrift::ident::languageIncludes,
    ::apache::thrift::ident::namespaces
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::struct_t<::apache::thrift::type::DefinitionAttrs>,
    ::apache::thrift::type::adapted<::apache::thrift::type::detail::StrongIntegerAdapter<::apache::thrift::type::ProgramId>, ::apache::thrift::type::i64_t>,
    ::apache::thrift::type::list<::apache::thrift::type::adapted<::apache::thrift::type::detail::StrongIntegerAdapter<::apache::thrift::type::ProgramId>, ::apache::thrift::type::i64_t>>,
    ::apache::thrift::type::list<::apache::thrift::type::adapted<::apache::thrift::type::detail::StrongIntegerAdapter<::apache::thrift::type::DefinitionId>, ::apache::thrift::type::i64_t>>,
    ::apache::thrift::type::list<::apache::thrift::type::cpp_type<folly::fbstring, ::apache::thrift::type::binary_t>>,
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::list<::apache::thrift::type::string_t>>,
    ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::string_t>
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  Program();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  Program(apache::thrift::FragileConstructor, ::apache::thrift::type::DefinitionAttrs attrs__arg, ::apache::thrift::type::ProgramId id__arg, ::apache::thrift::type::IncludeIds includes__arg, ::apache::thrift::type::DefinitionIds definitions__arg, ::std::vector<::apache::thrift::type::DefinitionKey> definitionKeys__arg, ::std::string path__arg, ::std::map<::std::string, ::std::vector<::std::string>> languageIncludes__arg, ::std::map<::std::string, ::std::string> namespaces__arg);

  Program(Program&&) noexcept;
  Program(const Program& src);


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

  ~Program();

 private:
  ::apache::thrift::type::DefinitionAttrs __fbthrift_field_attrs;
 private:
  ::apache::thrift::type::ProgramId __fbthrift_field_id;
 private:
  ::apache::thrift::type::IncludeIds __fbthrift_field_includes;
 private:
  ::apache::thrift::type::DefinitionIds __fbthrift_field_definitions;
 private:
  ::std::vector<::apache::thrift::type::DefinitionKey> __fbthrift_field_definitionKeys;
 private:
  ::std::string __fbthrift_field_path;
 private:
  ::std::map<::std::string, ::std::vector<::std::string>> __fbthrift_field_languageIncludes;
 private:
  ::std::map<::std::string, ::std::string> __fbthrift_field_namespaces;

 public:

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

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> attrs() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> attrs() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_attrs};
  }

  /** Glean { "field": "attrs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionAttrs>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> attrs() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_attrs)};
  }

  /** Glean { "field": "id" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> id_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_id};
  }

  /** Glean { "field": "id" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> id_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_id};
  }

  /** Glean { "field": "id" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> id_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_id)};
  }

  /** Glean { "field": "id" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> id() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_id};
  }

  /** Glean { "field": "id" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> id() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_id};
  }

  /** Glean { "field": "id" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> id() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_id)};
  }

  /** Glean { "field": "includes" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::IncludeIds>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> includes_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_includes};
  }

  /** Glean { "field": "includes" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::IncludeIds>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> includes_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_includes};
  }

  /** Glean { "field": "includes" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::IncludeIds>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> includes_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_includes)};
  }

  /** Glean { "field": "includes" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::IncludeIds>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> includes() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_includes};
  }

  /** Glean { "field": "includes" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::IncludeIds>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> includes() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_includes};
  }

  /** Glean { "field": "includes" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::IncludeIds>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> includes() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_includes)};
  }

  /** Glean { "field": "definitions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionIds>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> definitions_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_definitions};
  }

  /** Glean { "field": "definitions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionIds>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> definitions_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_definitions};
  }

  /** Glean { "field": "definitions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionIds>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> definitions_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_definitions)};
  }

  /** Glean { "field": "definitions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionIds>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> definitions() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_definitions};
  }

  /** Glean { "field": "definitions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionIds>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> definitions() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_definitions};
  }

  /** Glean { "field": "definitions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionIds>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> definitions() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_definitions)};
  }

  /** Glean { "field": "definitionKeys" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::DefinitionKey>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> definitionKeys_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_definitionKeys};
  }

  /** Glean { "field": "definitionKeys" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::DefinitionKey>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> definitionKeys_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_definitionKeys};
  }

  /** Glean { "field": "definitionKeys" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::DefinitionKey>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> definitionKeys_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_definitionKeys)};
  }

  /** Glean { "field": "definitionKeys" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::DefinitionKey>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> definitionKeys() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_definitionKeys};
  }

  /** Glean { "field": "definitionKeys" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::DefinitionKey>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> definitionKeys() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_definitionKeys};
  }

  /** Glean { "field": "definitionKeys" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::DefinitionKey>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> definitionKeys() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_definitionKeys)};
  }

  /** Glean { "field": "path" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> path_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_path};
  }

  /** Glean { "field": "path" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> path_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_path};
  }

  /** Glean { "field": "path" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> path_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_path)};
  }

  /** Glean { "field": "path" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> path() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_path};
  }

  /** Glean { "field": "path" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> path() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_path};
  }

  /** Glean { "field": "path" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> path() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_path)};
  }

  /** Glean { "field": "languageIncludes" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::vector<::std::string>>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> languageIncludes_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_languageIncludes};
  }

  /** Glean { "field": "languageIncludes" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::vector<::std::string>>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> languageIncludes_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_languageIncludes};
  }

  /** Glean { "field": "languageIncludes" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::vector<::std::string>>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> languageIncludes_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_languageIncludes)};
  }

  /** Glean { "field": "languageIncludes" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::vector<::std::string>>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> languageIncludes() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_languageIncludes};
  }

  /** Glean { "field": "languageIncludes" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::vector<::std::string>>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> languageIncludes() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_languageIncludes};
  }

  /** Glean { "field": "languageIncludes" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::vector<::std::string>>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> languageIncludes() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_languageIncludes)};
  }

  /** Glean { "field": "namespaces" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> namespaces_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_namespaces};
  }

  /** Glean { "field": "namespaces" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> namespaces_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_namespaces};
  }

  /** Glean { "field": "namespaces" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> namespaces_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_namespaces)};
  }

  /** Glean { "field": "namespaces" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> namespaces() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_namespaces};
  }

  /** Glean { "field": "namespaces" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> namespaces() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_namespaces};
  }

  /** Glean { "field": "namespaces" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::string>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> namespaces() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_namespaces)};
  }
  FOLLY_ERASE auto name() &           { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() const&      { return attrs_ref()->name_ref(); }
  FOLLY_ERASE auto name() &&          { return std::move(*attrs_ref()).name_ref(); }
  FOLLY_ERASE auto name() const&&     { return std::move(*attrs_ref()).name_ref(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &       { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&  { return name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() &&      { return std::move(*this).name(); }
  [[deprecated("name_ref() is deprecated, use name() instead.")]]
  FOLLY_ERASE auto name_ref() const&& { return std::move(*this).name(); }
  FOLLY_ERASE auto uri() &           { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() const&      { return attrs_ref()->uri_ref(); }
  FOLLY_ERASE auto uri() &&          { return std::move(*attrs_ref()).uri_ref(); }
  FOLLY_ERASE auto uri() const&&     { return std::move(*attrs_ref()).uri_ref(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &       { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&  { return uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() &&      { return std::move(*this).uri(); }
  [[deprecated("uri_ref() is deprecated, use uri() instead.")]]
  FOLLY_ERASE auto uri_ref() const&& { return std::move(*this).uri(); }
  FOLLY_ERASE auto structuredAnnotations() &           { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&      { return attrs_ref()->structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() &&          { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  FOLLY_ERASE auto structuredAnnotations() const&&     { return std::move(*attrs_ref()).structuredAnnotations_ref(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &       { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&  { return structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() &&      { return std::move(*this).structuredAnnotations(); }
  [[deprecated("structuredAnnotations_ref() is deprecated, use structuredAnnotations() instead.")]]
  FOLLY_ERASE auto structuredAnnotations_ref() const&& { return std::move(*this).structuredAnnotations(); }
  FOLLY_ERASE auto annotations() &           { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() const&      { return attrs_ref()->annotations_ref(); }
  FOLLY_ERASE auto annotations() &&          { return std::move(*attrs_ref()).annotations_ref(); }
  FOLLY_ERASE auto annotations() const&&     { return std::move(*attrs_ref()).annotations_ref(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &       { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&  { return annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() &&      { return std::move(*this).annotations(); }
  [[deprecated("annotations_ref() is deprecated, use annotations() instead.")]]
  FOLLY_ERASE auto annotations_ref() const&& { return std::move(*this).annotations(); }
  FOLLY_ERASE auto annotationsByKey() &           { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&      { return attrs_ref()->annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() &&          { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  FOLLY_ERASE auto annotationsByKey() const&&     { return std::move(*attrs_ref()).annotationsByKey_ref(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &       { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&  { return annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() &&      { return std::move(*this).annotationsByKey(); }
  [[deprecated("annotationsByKey_ref() is deprecated, use annotationsByKey() instead.")]]
  FOLLY_ERASE auto annotationsByKey_ref() const&& { return std::move(*this).annotationsByKey(); }
  FOLLY_ERASE auto unstructuredAnnotations() &           { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&      { return attrs_ref()->unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() &&          { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  FOLLY_ERASE auto unstructuredAnnotations() const&&     { return std::move(*attrs_ref()).unstructuredAnnotations_ref(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &       { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&  { return unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() &&      { return std::move(*this).unstructuredAnnotations(); }
  [[deprecated("unstructuredAnnotations_ref() is deprecated, use unstructuredAnnotations() instead.")]]
  FOLLY_ERASE auto unstructuredAnnotations_ref() const&& { return std::move(*this).unstructuredAnnotations(); }
  FOLLY_ERASE auto docs() &           { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() const&      { return attrs_ref()->docs_ref(); }
  FOLLY_ERASE auto docs() &&          { return std::move(*attrs_ref()).docs_ref(); }
  FOLLY_ERASE auto docs() const&&     { return std::move(*attrs_ref()).docs_ref(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &       { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&  { return docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() &&      { return std::move(*this).docs(); }
  [[deprecated("docs_ref() is deprecated, use docs() instead.")]]
  FOLLY_ERASE auto docs_ref() const&& { return std::move(*this).docs(); }
  FOLLY_ERASE auto sourceRange() &           { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&      { return attrs_ref()->sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() &&          { return std::move(*attrs_ref()).sourceRange_ref(); }
  FOLLY_ERASE auto sourceRange() const&&     { return std::move(*attrs_ref()).sourceRange_ref(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &       { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&  { return sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() &&      { return std::move(*this).sourceRange(); }
  [[deprecated("sourceRange_ref() is deprecated, use sourceRange() instead.")]]
  FOLLY_ERASE auto sourceRange_ref() const&& { return std::move(*this).sourceRange(); }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "Schema", "kind": "struct" } */
class Schema final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/Schema";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 8;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2,3,4,8,5,6,7};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::programs,
    ::apache::thrift::ident::values,
    ::apache::thrift::ident::valuesMap,
    ::apache::thrift::ident::definitions,
    ::apache::thrift::ident::definitionsMap,
    ::apache::thrift::ident::sources,
    ::apache::thrift::ident::identifierSourceRanges,
    ::apache::thrift::ident::includeSourceRanges
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::cpp_type<std::deque<::apache::thrift::type::Program>, ::apache::thrift::type::list<::apache::thrift::type::struct_t<::apache::thrift::type::Program>>>,
    ::apache::thrift::type::list<::apache::thrift::type::adapted<::apache::thrift::InlineAdapter<::apache::thrift::protocol::detail::ValueWrapper<::apache::thrift::protocol::detail::detail::Value>>, ::apache::thrift::type::union_t<::apache::thrift::protocol::detail::detail::Value>>>,
    ::apache::thrift::type::map<::apache::thrift::type::adapted<::apache::thrift::type::detail::StrongIntegerAdapter<::apache::thrift::type::ValueId>, ::apache::thrift::type::i64_t>, ::apache::thrift::type::adapted<::apache::thrift::InlineAdapter<::apache::thrift::protocol::detail::ValueWrapper<::apache::thrift::protocol::detail::detail::Value>>, ::apache::thrift::type::union_t<::apache::thrift::protocol::detail::detail::Value>>>,
    ::apache::thrift::type::list<::apache::thrift::type::union_t<::apache::thrift::type::Definition>>,
    ::apache::thrift::type::map<::apache::thrift::type::cpp_type<folly::fbstring, ::apache::thrift::type::binary_t>, ::apache::thrift::type::union_t<::apache::thrift::type::Definition>>,
    ::apache::thrift::type::map<::apache::thrift::type::adapted<::apache::thrift::type::detail::StrongIntegerAdapter<::apache::thrift::type::ProgramId>, ::apache::thrift::type::i64_t>, ::apache::thrift::type::struct_t<::apache::thrift::type::SourceInfo>>,
    ::apache::thrift::type::list<::apache::thrift::type::struct_t<::apache::thrift::type::IdentifierRef>>,
    ::apache::thrift::type::list<::apache::thrift::type::struct_t<::apache::thrift::type::IncludeRef>>
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  Schema();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  Schema(apache::thrift::FragileConstructor, ::apache::thrift::type::ProgramList programs__arg, ::std::vector<::apache::thrift::protocol::Value> values__arg, ::std::map<::apache::thrift::type::ValueKey, ::apache::thrift::protocol::Value> valuesMap__arg, ::apache::thrift::type::DefinitionList definitions__arg, ::apache::thrift::type::DefinitionMap definitionsMap__arg, ::std::map<::apache::thrift::type::ProgramId, ::apache::thrift::type::SourceInfo> sources__arg, ::std::vector<::apache::thrift::type::IdentifierRef> identifierSourceRanges__arg, ::std::vector<::apache::thrift::type::IncludeRef> includeSourceRanges__arg);

  Schema(Schema&&) noexcept;

  Schema(const Schema& src);


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

  ~Schema();

 private:
  ::apache::thrift::type::ProgramList __fbthrift_field_programs;
 private:
  ::std::vector<::apache::thrift::protocol::Value> __fbthrift_field_values;
 private:
  ::std::map<::apache::thrift::type::ValueKey, ::apache::thrift::protocol::Value> __fbthrift_field_valuesMap;
 private:
  ::apache::thrift::type::DefinitionList __fbthrift_field_definitions;
 private:
  ::apache::thrift::type::DefinitionMap __fbthrift_field_definitionsMap;
 private:
  ::std::map<::apache::thrift::type::ProgramId, ::apache::thrift::type::SourceInfo> __fbthrift_field_sources;
 private:
  ::std::vector<::apache::thrift::type::IdentifierRef> __fbthrift_field_identifierSourceRanges;
 private:
  ::std::vector<::apache::thrift::type::IncludeRef> __fbthrift_field_includeSourceRanges;

 public:

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

  /** Glean { "field": "programs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramList>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> programs_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_programs};
  }

  /** Glean { "field": "programs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramList>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> programs_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_programs};
  }

  /** Glean { "field": "programs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramList>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> programs_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_programs)};
  }

  /** Glean { "field": "programs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramList>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> programs() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_programs};
  }

  /** Glean { "field": "programs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramList>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> programs() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_programs};
  }

  /** Glean { "field": "programs" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramList>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> programs() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_programs)};
  }

  /** Glean { "field": "values" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> values_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_values};
  }

  /** Glean { "field": "values" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> values_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_values};
  }

  /** Glean { "field": "values" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> values_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_values)};
  }

  /** Glean { "field": "values" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> values() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_values};
  }

  /** Glean { "field": "values" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> values() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_values};
  }

  /** Glean { "field": "values" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> values() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_values)};
  }

  /** Glean { "field": "valuesMap" } */
  template <typename..., typename fbthrift_T = ::std::map<::apache::thrift::type::ValueKey, ::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> valuesMap_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_valuesMap};
  }

  /** Glean { "field": "valuesMap" } */
  template <typename..., typename fbthrift_T = ::std::map<::apache::thrift::type::ValueKey, ::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> valuesMap_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_valuesMap};
  }

  /** Glean { "field": "valuesMap" } */
  template <typename..., typename fbthrift_T = ::std::map<::apache::thrift::type::ValueKey, ::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> valuesMap_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_valuesMap)};
  }

  /** Glean { "field": "valuesMap" } */
  template <typename..., typename fbthrift_T = ::std::map<::apache::thrift::type::ValueKey, ::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> valuesMap() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_valuesMap};
  }

  /** Glean { "field": "valuesMap" } */
  template <typename..., typename fbthrift_T = ::std::map<::apache::thrift::type::ValueKey, ::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> valuesMap() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_valuesMap};
  }

  /** Glean { "field": "valuesMap" } */
  template <typename..., typename fbthrift_T = ::std::map<::apache::thrift::type::ValueKey, ::apache::thrift::protocol::Value>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> valuesMap() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_valuesMap)};
  }

  /** Glean { "field": "definitions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionList>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> definitions_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_definitions};
  }

  /** Glean { "field": "definitions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionList>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> definitions_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_definitions};
  }

  /** Glean { "field": "definitions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionList>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> definitions_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_definitions)};
  }

  /** Glean { "field": "definitions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionList>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> definitions() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_definitions};
  }

  /** Glean { "field": "definitions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionList>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> definitions() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_definitions};
  }

  /** Glean { "field": "definitions" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionList>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> definitions() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_definitions)};
  }

  /** Glean { "field": "definitionsMap" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionMap>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> definitionsMap_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_definitionsMap};
  }

  /** Glean { "field": "definitionsMap" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionMap>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> definitionsMap_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_definitionsMap};
  }

  /** Glean { "field": "definitionsMap" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionMap>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> definitionsMap_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_definitionsMap)};
  }

  /** Glean { "field": "definitionsMap" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionMap>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> definitionsMap() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_definitionsMap};
  }

  /** Glean { "field": "definitionsMap" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionMap>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> definitionsMap() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_definitionsMap};
  }

  /** Glean { "field": "definitionsMap" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::DefinitionMap>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> definitionsMap() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_definitionsMap)};
  }

  /** Glean { "field": "sources" } */
  template <typename..., typename fbthrift_T = ::std::map<::apache::thrift::type::ProgramId, ::apache::thrift::type::SourceInfo>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> sources_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_sources};
  }

  /** Glean { "field": "sources" } */
  template <typename..., typename fbthrift_T = ::std::map<::apache::thrift::type::ProgramId, ::apache::thrift::type::SourceInfo>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> sources_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_sources};
  }

  /** Glean { "field": "sources" } */
  template <typename..., typename fbthrift_T = ::std::map<::apache::thrift::type::ProgramId, ::apache::thrift::type::SourceInfo>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> sources_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_sources)};
  }

  /** Glean { "field": "sources" } */
  template <typename..., typename fbthrift_T = ::std::map<::apache::thrift::type::ProgramId, ::apache::thrift::type::SourceInfo>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> sources() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_sources};
  }

  /** Glean { "field": "sources" } */
  template <typename..., typename fbthrift_T = ::std::map<::apache::thrift::type::ProgramId, ::apache::thrift::type::SourceInfo>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> sources() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_sources};
  }

  /** Glean { "field": "sources" } */
  template <typename..., typename fbthrift_T = ::std::map<::apache::thrift::type::ProgramId, ::apache::thrift::type::SourceInfo>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> sources() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_sources)};
  }

  /** Glean { "field": "identifierSourceRanges" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::IdentifierRef>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> identifierSourceRanges_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_identifierSourceRanges};
  }

  /** Glean { "field": "identifierSourceRanges" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::IdentifierRef>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> identifierSourceRanges_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_identifierSourceRanges};
  }

  /** Glean { "field": "identifierSourceRanges" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::IdentifierRef>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> identifierSourceRanges_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_identifierSourceRanges)};
  }

  /** Glean { "field": "identifierSourceRanges" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::IdentifierRef>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> identifierSourceRanges() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_identifierSourceRanges};
  }

  /** Glean { "field": "identifierSourceRanges" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::IdentifierRef>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> identifierSourceRanges() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_identifierSourceRanges};
  }

  /** Glean { "field": "identifierSourceRanges" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::IdentifierRef>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> identifierSourceRanges() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_identifierSourceRanges)};
  }

  /** Glean { "field": "includeSourceRanges" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::IncludeRef>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> includeSourceRanges_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_includeSourceRanges};
  }

  /** Glean { "field": "includeSourceRanges" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::IncludeRef>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> includeSourceRanges_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_includeSourceRanges};
  }

  /** Glean { "field": "includeSourceRanges" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::IncludeRef>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> includeSourceRanges_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_includeSourceRanges)};
  }

  /** Glean { "field": "includeSourceRanges" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::IncludeRef>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> includeSourceRanges() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_includeSourceRanges};
  }

  /** Glean { "field": "includeSourceRanges" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::IncludeRef>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> includeSourceRanges() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_includeSourceRanges};
  }

  /** Glean { "field": "includeSourceRanges" } */
  template <typename..., typename fbthrift_T = ::std::vector<::apache::thrift::type::IncludeRef>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> includeSourceRanges() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_includeSourceRanges)};
  }

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

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

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "SourceInfo", "kind": "struct" } */
class SourceInfo final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/SourceInfo";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 3;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2,3};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::fileName,
    ::apache::thrift::ident::languageIncludes,
    ::apache::thrift::ident::namespaces
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::list<::apache::thrift::type::adapted<::apache::thrift::type::detail::StrongIntegerAdapter<::apache::thrift::type::ValueId>, ::apache::thrift::type::i64_t>>>,
    ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::adapted<::apache::thrift::type::detail::StrongIntegerAdapter<::apache::thrift::type::ValueId>, ::apache::thrift::type::i64_t>>
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  SourceInfo();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  SourceInfo(apache::thrift::FragileConstructor, ::std::string fileName__arg, ::std::map<::std::string, ::std::vector<::apache::thrift::type::ValueId>> languageIncludes__arg, ::std::map<::std::string, ::apache::thrift::type::ValueId> namespaces__arg);

  SourceInfo(SourceInfo&&) noexcept;

  SourceInfo(const SourceInfo& src);


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

  ~SourceInfo();

 private:
  ::std::string __fbthrift_field_fileName;
 private:
  ::std::map<::std::string, ::std::vector<::apache::thrift::type::ValueId>> __fbthrift_field_languageIncludes;
 private:
  ::std::map<::std::string, ::apache::thrift::type::ValueId> __fbthrift_field_namespaces;

 public:

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

  /** Glean { "field": "fileName" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> fileName_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_fileName};
  }

  /** Glean { "field": "fileName" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> fileName_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_fileName};
  }

  /** Glean { "field": "fileName" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> fileName_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_fileName)};
  }

  /** Glean { "field": "fileName" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> fileName() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_fileName};
  }

  /** Glean { "field": "fileName" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> fileName() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_fileName};
  }

  /** Glean { "field": "fileName" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> fileName() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_fileName)};
  }

  /** Glean { "field": "languageIncludes" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::vector<::apache::thrift::type::ValueId>>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> languageIncludes_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_languageIncludes};
  }

  /** Glean { "field": "languageIncludes" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::vector<::apache::thrift::type::ValueId>>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> languageIncludes_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_languageIncludes};
  }

  /** Glean { "field": "languageIncludes" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::vector<::apache::thrift::type::ValueId>>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> languageIncludes_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_languageIncludes)};
  }

  /** Glean { "field": "languageIncludes" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::vector<::apache::thrift::type::ValueId>>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> languageIncludes() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_languageIncludes};
  }

  /** Glean { "field": "languageIncludes" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::vector<::apache::thrift::type::ValueId>>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> languageIncludes() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_languageIncludes};
  }

  /** Glean { "field": "languageIncludes" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::std::vector<::apache::thrift::type::ValueId>>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> languageIncludes() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_languageIncludes)};
  }

  /** Glean { "field": "namespaces" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::type::ValueId>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> namespaces_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_namespaces};
  }

  /** Glean { "field": "namespaces" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::type::ValueId>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> namespaces_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_namespaces};
  }

  /** Glean { "field": "namespaces" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::type::ValueId>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> namespaces_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_namespaces)};
  }

  /** Glean { "field": "namespaces" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::type::ValueId>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> namespaces() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_namespaces};
  }

  /** Glean { "field": "namespaces" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::type::ValueId>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> namespaces() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_namespaces};
  }

  /** Glean { "field": "namespaces" } */
  template <typename..., typename fbthrift_T = ::std::map<::std::string, ::apache::thrift::type::ValueId>>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> namespaces() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_namespaces)};
  }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "IdentifierRef", "kind": "struct" } */
class IdentifierRef final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/IdentifierRef";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 3;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2,3};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::range,
    ::apache::thrift::ident::uri,
    ::apache::thrift::ident::enumValue
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::struct_t<::apache::thrift::type::SourceRange>,
    ::apache::thrift::type::union_t<::apache::thrift::type::TypeUri>,
    ::apache::thrift::type::string_t
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  IdentifierRef();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  IdentifierRef(apache::thrift::FragileConstructor, ::apache::thrift::type::SourceRange range__arg, ::apache::thrift::type::TypeUri uri__arg, ::std::string enumValue__arg);

  IdentifierRef(IdentifierRef&&) noexcept;

  IdentifierRef(const IdentifierRef& src);


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

  ~IdentifierRef();

 private:
  ::apache::thrift::type::SourceRange __fbthrift_field_range;
 private:
  ::apache::thrift::type::TypeUri __fbthrift_field_uri;
 private:
  ::std::string __fbthrift_field_enumValue;

 public:

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

  /** Glean { "field": "range" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> range_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_range};
  }

  /** Glean { "field": "range" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> range_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_range};
  }

  /** Glean { "field": "range" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> range_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_range)};
  }

  /** Glean { "field": "range" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> range() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_range};
  }

  /** Glean { "field": "range" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> range() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_range};
  }

  /** Glean { "field": "range" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> range() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_range)};
  }

  /** Glean { "field": "uri" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::TypeUri>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> uri_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_uri};
  }

  /** Glean { "field": "uri" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::TypeUri>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> uri_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_uri};
  }

  /** Glean { "field": "uri" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::TypeUri>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> uri_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_uri)};
  }

  /** Glean { "field": "uri" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::TypeUri>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> uri() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_uri};
  }

  /** Glean { "field": "uri" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::TypeUri>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> uri() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_uri};
  }

  /** Glean { "field": "uri" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::TypeUri>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> uri() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_uri)};
  }

  /** Glean { "field": "enumValue" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> enumValue_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_enumValue};
  }

  /** Glean { "field": "enumValue" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> enumValue_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_enumValue};
  }

  /** Glean { "field": "enumValue" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> enumValue_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_enumValue)};
  }

  /** Glean { "field": "enumValue" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> enumValue() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_enumValue};
  }

  /** Glean { "field": "enumValue" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> enumValue() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_enumValue};
  }

  /** Glean { "field": "enumValue" } */
  template <typename..., typename fbthrift_T = ::std::string>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> enumValue() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_enumValue)};
  }

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

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


/** Glean {"file": "/opt/local/var/macports/build/fbthrift-07c1dc61/work/fbthrift-2025.12.15.00/thrift/lib/thrift/schema.thrift", "name": "IncludeRef", "kind": "struct" } */
class IncludeRef final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static constexpr folly::cstring_view __fbthrift_thrift_uri = "facebook.com/thrift/type/IncludeRef";
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  template <class ...>
  FOLLY_ERASE static constexpr std::string_view __fbthrift_get_module_name() noexcept {
    return "schema";
  }
  static constexpr std::size_t __fbthrift_num_fields = 2;

  static constexpr const int16_t __fbthrift_reflection_field_ids[] = {0,1,2};

  using __fbthrift_reflection_idents = folly::tag_t<
    ::apache::thrift::ident::range,
    ::apache::thrift::ident::target
  >;

  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::struct_t<::apache::thrift::type::SourceRange>,
    ::apache::thrift::type::adapted<::apache::thrift::type::detail::StrongIntegerAdapter<::apache::thrift::type::ProgramId>, ::apache::thrift::type::i64_t>
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

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


 public:

  IncludeRef() :
      __fbthrift_field_target() {
    ::apache::thrift::adapt_detail::construct<::apache::thrift::type::detail::StrongIntegerAdapter<::apache::thrift::type::ProgramId>, 2>(__fbthrift_field_target, *this);
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  IncludeRef(apache::thrift::FragileConstructor, ::apache::thrift::type::SourceRange range__arg, ::apache::thrift::type::ProgramId target__arg);

  IncludeRef(IncludeRef&&) noexcept;
  IncludeRef(const IncludeRef& src);


  IncludeRef& operator=(IncludeRef&&) noexcept;
  IncludeRef& operator=(const IncludeRef& src);
 private:
  ::apache::thrift::type::SourceRange __fbthrift_field_range;
 private:
  ::apache::thrift::type::ProgramId __fbthrift_field_target;

 public:

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

  /** Glean { "field": "range" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> range_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_range};
  }

  /** Glean { "field": "range" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> range_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_range};
  }

  /** Glean { "field": "range" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> range_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_range)};
  }

  /** Glean { "field": "range" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> range() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_range};
  }

  /** Glean { "field": "range" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> range() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_range};
  }

  /** Glean { "field": "range" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::SourceRange>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> range() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_range)};
  }

  /** Glean { "field": "target" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> target_ref() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_target};
  }

  /** Glean { "field": "target" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> target_ref() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_target};
  }

  /** Glean { "field": "target" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> target_ref() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_target)};
  }

  /** Glean { "field": "target" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<const fbthrift_T&> target() const& {
    return ::apache::thrift::terse_field_ref<const fbthrift_T&>{this->__fbthrift_field_target};
  }

  /** Glean { "field": "target" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&> target() & {
    return ::apache::thrift::terse_field_ref<fbthrift_T&>{this->__fbthrift_field_target};
  }

  /** Glean { "field": "target" } */
  template <typename..., typename fbthrift_T = ::apache::thrift::type::ProgramId>
  FOLLY_ERASE ::apache::thrift::terse_field_ref<fbthrift_T&&> target() && {
    return ::apache::thrift::terse_field_ref<fbthrift_T&&>{static_cast<fbthrift_T&&>(this->__fbthrift_field_target)};
  }

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

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


} // namespace apache::thrift::type

namespace apache::thrift {

template <> struct TEnumDataStorage<::apache::thrift::type::ReturnType::Type>;

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

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

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

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

  static constexpr type min() { return type::thriftType; }
  static constexpr type max() { return type::interactionType; }
};

template <> struct TEnumDataStorage<::apache::thrift::type::Definition::Type>;

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

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

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

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

  static constexpr type min() { return type::structDef; }
  static constexpr type max() { return type::interactionDef; }
};
} // namespace apache::thrift

namespace apache::thrift::detail {
template <> struct TSchemaAssociation<::apache::thrift::type::Annotation, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\xe0\xa5\x38\x28\x31\xf5\x5b\xd4\xe4\xec\x81\x20\xaa\xf7\xda\x55", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::StructuredAnnotation, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x18\xf4\x11\xf5\x58\x4d\x11\xeb\xd4\x1c\x4a\x1e\x22\xec\x5c\xe3", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::DecodedUri, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x6e\x8d\xc0\x40\xd5\x01\x5d\xc1\x93\x19\x7e\x41\xdb\x48\xe7\x09", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::DefinitionAttrs, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x4a\xbf\x05\x3e\x93\x31\xe6\x38\x0d\x48\x70\xee\xdf\x53\x67\x72", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::SourceRange, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\xff\x78\x5c\xbf\xd3\x33\x18\x11\x76\xbb\x2c\xe5\xfa\x06\x84\xf8", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::DocBlock, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x31\x8d\xa2\xd7\xf8\x77\xcc\xb2\x3e\xcc\x93\xe5\x6a\xc3\xaa\x6f", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::InterfaceRef, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x47\x80\x01\x3c\x39\x80\xe0\xf3\x2d\x82\xce\xd0\xa0\xe0\xb8\xd5", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::EnumValue, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x05\xe2\x0e\xe2\xf8\x01\x85\x45\x49\xe1\xb9\x25\x4c\x76\x73\xfa", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::Enum, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x8a\x71\x1c\xa4\x49\xd1\xce\xfc\x5b\x15\x85\x3c\x0e\xc1\x20\x8f", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::Field, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x6f\x8e\x39\x76\xa6\xd2\x62\xe6\x99\x8f\x80\xec\x5a\xb4\xfc\xe7", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::Struct, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x7f\xf2\xd5\x7a\x84\x94\xa0\x30\xa6\x76\x6a\x84\x75\x18\x12\x5a", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::Union, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x02\x48\x21\x26\xaa\x22\x5e\x50\x8f\xae\x2b\xea\x58\x38\xd5\xc0", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::Exception, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x8a\xbd\x5a\xb0\x3e\xdb\x30\x64\xe3\x96\x29\x06\xf2\xfe\xa7\x23", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::Paramlist, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\xb1\xa0\x75\x1a\xb8\x81\xb0\xc8\x17\x20\xeb\xe3\xff\xc3\xa2\x38", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::Stream, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x1b\xec\x3f\xe5\x30\xf0\xc8\x24\x06\xe6\xa3\x56\xf8\xa7\x1d\xb3", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::Sink, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x81\xcc\xed\xeb\x1c\x8b\xa0\x3b\xa9\xc7\x77\xce\xdc\x90\xad\x40", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::Interaction, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x95\x1f\x54\x98\x2a\x17\x9e\x41\xa3\x3b\xba\xba\x95\xf7\x30\xf6", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::ReturnType, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\xde\x2b\x0b\xe4\xfa\x63\x15\x8d\x9b\xf7\xf0\x50\x6c\xd4\xe2\x4c", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::Function, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x58\xcc\xe8\x56\x4d\x66\xac\x6c\x01\x74\xdc\xee\x37\x67\x7c\x05", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::Service, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x1e\x1a\xe1\x52\xf5\xc9\x96\xdf\xe9\x8b\x7c\x5b\x84\x60\x12\x92", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::Const, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x67\xb6\x67\xf3\x91\x5d\x87\x04\x55\x8c\x73\x72\xec\x23\xe8\xc7", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::Typedef, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x2d\xac\x31\x61\x7f\x01\x9b\x23\xe6\x69\x02\x15\xfe\xf7\xe1\x1a", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::Definition, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\xb0\xbb\xf3\x34\xc9\x84\xf5\x1c\xf9\xf0\xbd\xfe\xda\x3a\x14\xcd", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::Program, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\xcc\x60\xea\x6f\xae\x97\x81\xad\x72\x49\x53\xbc\x90\x1d\x06\x42", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::Schema, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x7f\x4a\xd1\xac\xc7\x15\x88\xb5\xbc\xf3\x21\x7a\x76\xa1\x0c\x65", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::SourceInfo, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\xae\x4c\x37\xdd\x2b\xa6\x59\x93\x1b\xa5\x86\x30\xbd\x84\x73\xf3", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::IdentifierRef, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\xa9\x55\x99\xe0\xc6\x98\xe3\xcf\x2f\x2e\xe2\x8d\x48\xbd\x1a\x47", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::IncludeRef, false> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x38\xca\xb1\x2c\x55\x69\x7e\x2a\x4d\x28\x8c\xc4\xb1\x03\x91\xd5", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::FieldQualifier, true> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\xeb\x30\xb7\x51\x33\x61\x4c\x1a\xcb\x55\xcc\xd5\xd6\x96\xe8\x7b", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::ErrorKind, true> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x1e\xa6\x53\x16\xa1\xd2\xf1\x26\x32\xfa\x9b\xf3\x65\x5a\xf4\x3d", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::ErrorBlame, true> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x48\x9b\xee\x11\xbc\x9b\x1e\x62\xe1\x0b\x09\x52\xf3\xdf\xff\xa3", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::ErrorSafety, true> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x02\xa0\x51\x44\x32\x77\xf2\xf8\x04\x2c\x7b\x18\x84\x98\xaa\x90", 16};
};
template <> struct TSchemaAssociation<::apache::thrift::type::FunctionQualifier, true> {
  static constexpr ::folly::Range<const ::std::string_view*>(*bundle)() = nullptr;
  static constexpr int64_t programId = 8649564176098980131;
  static constexpr ::std::string_view definitionKey = {"\x8f\xef\x01\x66\xbc\x5e\x08\x00\xf0\xcb\x30\xb2\xca\x30\xde\xa7", 16};
};
} // namespace apache::thrift::detail
