Skip to content

Commit

Permalink
Dont set group for optional fields (#528)
Browse files Browse the repository at this point in the history
Fixes #523
  • Loading branch information
124C41p authored Oct 16, 2023
1 parent 3514991 commit 8b5dd6c
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/betterproto/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -909,7 +909,7 @@ def dump(self, stream: BinaryIO) -> None:
# Note that proto3 field presence/optional fields are put in a
# synthetic single-item oneof by protoc, which helps us ensure we
# send the value even if the value is the default zero value.
selected_in_group = bool(meta.group)
selected_in_group = bool(meta.group) or meta.optional

# Empty messages can still be sent on the wire if they were
# set (or received empty).
Expand Down
5 changes: 4 additions & 1 deletion src/betterproto/plugin/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -385,7 +385,10 @@ def is_oneof(proto_field_obj: FieldDescriptorProto) -> bool:
us to tell whether it was set, via the which_one_of interface.
"""

return which_one_of(proto_field_obj, "oneof_index")[0] == "oneof_index"
return (
not proto_field_obj.proto3_optional
and which_one_of(proto_field_obj, "oneof_index")[0] == "oneof_index"
)


@dataclass
Expand Down

0 comments on commit 8b5dd6c

Please sign in to comment.