pb: Add presence check support#540
Merged
Uh oh!
There was an error while loading. Please reload this page.
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.
Subsystem
Protobuf
Problem Description
Even if a field in a message is optional, we can't make it nullable. This is because fields may either have a default value, or we want to be able to access a default value in a nested field such that the parent object must not be null.
However, users must be able to distinguish between a field that was manually set with the default value and one that was not actively set.
Solution
This PR solves this problem by adding a
presenceAPI to each message that contains fields with presence tracking.presenceis an extension getter on the generated message interface that provides ahasXYZgetter for all fields with tracked/explicit presence.This intermediate
presenceobject is employed to ensure concise code completion and minimize the number of suggestions provided by the IDE.The only field type that lacks a
hasXYZgetter while its presence is tracked is theoneoffield. Sinceoneoffields are nullable, they are null if they are not set.