Improvement for oneof support - #94
Open
boekkooi-impossiblecloud wants to merge 13 commits into
Open
Conversation
boekkooi-impossiblecloud
force-pushed
the
improve-oneof-support
branch
2 times, most recently
from
July 31, 2025 12:39
5414270 to
10e9606
Compare
Author
|
Due to the upgrade to 1.14 in #98 and the addition of buf.validate.message.oneof i have rebased the PR and added the commits 331fc79, 10e9606 and 2972675. |
Author
|
Hey @pkwarren Sorry to bug but is there any chance you could maybe have a look at this PR and let me know if this is an addition that would be welcome? Thanks in advance! |
Draft
|
Hey @boekkooi-impossiblecloud, thanks for the PR! I have some questions over here: #109 (comment) |
This allows for later usage of the fieldProperty name.
Ran `make lint` and resolved warnings/errors.
boekkooi-impossiblecloud
force-pushed
the
improve-oneof-support
branch
from
January 16, 2026 14:40
2972675 to
778e7dd
Compare
stefanvanburen
left a comment
Contributor
There was a problem hiding this comment.
hi @boekkooi-impossiblecloud, thanks for the PR. mind getting it merged with main and I'll take another look?
| if r, found := schema["required"]; found { | ||
| rs, ok := r.([]string) | ||
| if !ok { | ||
| return errors.New("invalid required field in schema") |
Contributor
There was a problem hiding this comment.
is this an invariant from the generator? or should we at least print the actual type of r in the case of an error?
The anyOf approach explodes the resultant jsonschema, and also contains
a bug. In the earlier code, a oneof a/b/c would generate:
{"required": ["a"], "not": {"required": ["b", "c"]}}
This means `b` and `c` can't be together, but `a` and `b` can.
This rule can name fields without presence, which means the jsonschema must reflect that at most one of the fields can be set to their non-zero value. This is doable, but requires a separate discussion.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Good day,
While I was using the
protoc-gen-jsonschemaand it's generated schemas I noticed that oneOf validation was not happening for the on the JSON schema level.This PR implements the protobuf oneOf functionality and
(buf.validate.message).oneofusing the JSON Schema allOf and anyOf by using not in combination with required to exclude all other fields except for the one needed.Thanks for reviewing this PR! Please let me know what you think and have a great day!