Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When protogofakeit attempts to fake out a oneof union, depending on the random value it rolls it may choose to have the oneof have no set fields. Instead of ignoring it, the faker attempts to clear the oneof, in the event the message already had fields set within the oneof. The previous logic handled this by populating the first field in the oneof with its default (
protoreflect.FieldDescriptor#Default
), and then clearing that field, which would force the oneof to be empty. This worked fine for scalar fields, but a message field's default isnil
. Callingprotoreflect.Message#Set
with a nil value results in a panic.Two solutions were available here. First, is to instead do
protoreflect.Message#NewField
which would return a viable message value that could be set and subsequently cleared, but I realized that this was unnecessary work to clear the field. Instead, the message is now interrogated about which field in the oneof is set (if any) and clear that specific field. Much better imo.Fixes #5