Skip to content

Commit 5ca38de

Browse files
smaye81timostamm
andauthored
Implement MessageOneof rule (#254)
This implements the `MessageOneof` rule specified in bufbuild/protovalidate#377 --------- Co-authored-by: Timo Stamm <[email protected]>
1 parent 1a8547e commit 5ca38de

File tree

8 files changed

+742
-44
lines changed

8 files changed

+742
-44
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ GOLANGCI_LINT_VERSION ?= v2.1.2
1616
# Set to use a different version of protovalidate-conformance.
1717
# Should be kept in sync with the version referenced in buf.yaml and
1818
# 'buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go' in go.mod.
19-
CONFORMANCE_VERSION ?= v1.0.0-rc.1
19+
CONFORMANCE_VERSION ?= v1.0.0-rc.2
2020

2121
.PHONY: help
2222
help: ## Describe useful make targets

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:v1.0.0-rc.1
6-
- buf.build/bufbuild/protovalidate-testing:v1.0.0-rc.1
5+
- buf.build/bufbuild/protovalidate:v1.0.0-rc.2
6+
- buf.build/bufbuild/protovalidate-testing:v1.0.0-rc.2
77
lint:
88
use:
99
- STANDARD

builder.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,25 @@ func (bldr *builder) buildMessage(
127127
return
128128
}
129129

130+
oneofRules := msgRules.GetOneof()
131+
for _, rule := range oneofRules {
132+
fdescs := make([]protoreflect.FieldDescriptor, 0, len(rule.GetFields()))
133+
for _, name := range rule.GetFields() {
134+
fdesc := desc.Fields().ByName(protoreflect.Name(name))
135+
if fdesc == nil {
136+
msgEval.Err = &CompilationError{cause: fmt.Errorf(
137+
"field %q not found in message %s", name, desc.FullName())}
138+
} else {
139+
fdescs = append(fdescs, fdesc)
140+
}
141+
}
142+
oneofEval := &oneofEvaluator{
143+
Fields: fdescs,
144+
Required: rule.GetRequired(),
145+
}
146+
msgEval.AppendNested(oneofEval)
147+
}
148+
130149
steps := []func(
131150
desc protoreflect.MessageDescriptor,
132151
msgRules *validate.MessageRules,

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module buf.build/go/protovalidate
33
go 1.23.0
44

55
require (
6-
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.6-00000000000000-c7344d9f5dae.1
6+
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.6-00000000000000-c6451e2c05a6.1
77
github.com/google/cel-go v0.25.0
88
github.com/stretchr/testify v1.10.0
99
google.golang.org/protobuf v1.36.6

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.6-00000000000000-c7344d9f5dae.1 h1:nmsl+LeZt89FPjFhJvd0LTaUjmLy4MDAC+XEbzXc3xU=
2-
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.6-00000000000000-c7344d9f5dae.1/go.mod h1:avRlCjnFzl98VPaeCtJ24RrV/wwHFzB8sWXhj26+n/U=
1+
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.6-00000000000000-c6451e2c05a6.1 h1:foZfk56KWDz932pQ0gr0OfM5GrEBZVJvxyBzPBkik/U=
2+
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.6-00000000000000-c6451e2c05a6.1/go.mod h1:avRlCjnFzl98VPaeCtJ24RrV/wwHFzB8sWXhj26+n/U=
33
cel.dev/expr v0.23.1 h1:K4KOtPCJQjVggkARsjG9RWXP6O4R73aHeJMa/dmCQQg=
44
cel.dev/expr v0.23.1/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
55
github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI=

0 commit comments

Comments
 (0)