Skip to content

Add linked descriptor types for runtime reflection#9

Draft
iainmcgin wants to merge 1 commit intomainfrom
buffa-descriptor-linked-types
Draft

Add linked descriptor types for runtime reflection#9
iainmcgin wants to merge 1 commit intomainfrom
buffa-descriptor-linked-types

Conversation

@iainmcgin
Copy link
Copy Markdown
Collaborator

Introduces MessageDescriptor, FieldDescriptor, EnumDescriptor and
supporting types as the processed, feature-resolved layer on top of the
raw FileDescriptorProto tree. Where raw protos use string type_name
references and unresolved FeatureSet options, these use pool indices
(MessageIndex/EnumIndex, avoiding Arc cycles) and pre-resolved edition
features (FieldPresence, packed, delimited).

FieldKind flattens protobuf's type × label × map-entry axes into a
single Copy discriminant via a SingularKind sub-enum — invalid states
like List(List(...)) are unrepresentable, and no Box allocation is
needed.

These types are constructed by DescriptorPool (next PR) and consumed by
DynamicMessage. #[non_exhaustive] with pub fields allows reads without
external construction.

@iainmcgin iainmcgin force-pushed the buffa-descriptor-crate branch from 93b88c2 to e1e0949 Compare March 24, 2026 20:54
@iainmcgin iainmcgin force-pushed the buffa-descriptor-linked-types branch from 21128f0 to 75f320c Compare March 24, 2026 20:54
Base automatically changed from buffa-descriptor-crate to main March 26, 2026 18:46
Introduces MessageDescriptor, FieldDescriptor, EnumDescriptor and
supporting types as the processed, feature-resolved layer on top of the
raw FileDescriptorProto tree. Where raw protos use string type_name
references and unresolved FeatureSet options, these use pool indices
(MessageIndex/EnumIndex, avoiding Arc cycles) and pre-resolved edition
features (FieldPresence, packed, delimited).

FieldKind flattens protobuf's type × label × map-entry axes into a
single Copy discriminant via a SingularKind sub-enum — invalid states
like List(List(...)) are unrepresentable, and no Box allocation is
needed.

These types are constructed by DescriptorPool (next PR) and consumed by
DynamicMessage. #[non_exhaustive] with pub fields allows reads without
external construction.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant