Skip to content

Commit 1d1412c

Browse files
authored
Validate MessageOneofRule (#320)
bufbuild/protovalidate#379.
1 parent 9bbafe0 commit 1d1412c

File tree

5 files changed

+83
-10
lines changed

5 files changed

+83
-10
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ ADD_LICENSE_HEADER := $(BIN)/license-header \
1717
--copyright-holder "Buf Technologies, Inc." \
1818
--year-range "2023-2025"
1919
# This version should be kept in sync with the version in buf.yaml
20-
PROTOVALIDATE_VERSION ?= v0.13.0
20+
PROTOVALIDATE_VERSION ?= v0.13.1
2121
# Version of the cel-spec that this implementation is conformant with
2222
# This should be kept in sync with the version in format_test.py
2323
CEL_SPEC_VERSION ?= v0.24.0

buf.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ version: v2
22
modules:
33
- path: proto
44
deps:
5-
- buf.build/bufbuild/protovalidate:v0.13.0
6-
- buf.build/bufbuild/protovalidate-testing:v0.13.0
5+
- buf.build/bufbuild/protovalidate:v0.13.1
6+
- buf.build/bufbuild/protovalidate-testing:v0.13.1
77
lint:
88
use:
99
- STANDARD

gen/buf/validate/conformance/cases/messages_pb2.py

Lines changed: 27 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gen/buf/validate/conformance/cases/messages_pb2.pyi

Lines changed: 44 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

protovalidate/internal/rules.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,9 +454,18 @@ def add_oneof(
454454
rule: validate_pb2.MessageOneofRule,
455455
):
456456
fields = []
457+
seen = set()
458+
if len(rule.fields) == 0:
459+
msg = f"at least one field must be specified in oneof rule for the message {self._desc.full_name}"
460+
raise CompilationError(msg)
461+
457462
for name in rule.fields:
458463
if name in self._desc.fields_by_name:
464+
if name in seen:
465+
msg = f"duplicate {name} in oneof rule for the message {self._desc.full_name}"
466+
raise CompilationError(msg)
459467
fields.append(self._desc.fields_by_name[name])
468+
seen.add(name)
460469
else:
461470
msg = f'field "{name}" not found in message {self._desc.full_name}'
462471
raise CompilationError(msg)

0 commit comments

Comments
 (0)