Skip to content

Commit 1365e7b

Browse files
committed
fix loading field message when dependency is more than one step
1 parent bfb9d45 commit 1365e7b

File tree

7 files changed

+137
-25
lines changed

7 files changed

+137
-25
lines changed

buf.gen.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ managed:
66
except:
77
- buf.build/envoyproxy/protoc-gen-validate
88
- buf.build/bufbuild/protovalidate
9+
- buf.build/googleapis/googleapis
910
plugins:
1011
- plugin: buf.build/protocolbuffers/go:v1.31.0
1112
out: internal/gen

internal/evaluator/builder.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ func (bldr *Builder) processFieldExpressions(
268268
var opts []cel.EnvOption
269269
if fieldDesc.Kind() == protoreflect.MessageKind {
270270
opts = []cel.EnvOption{
271-
cel.TypeDescs(fieldDesc.Message().ParentFile()),
271+
cel.Types(dynamicpb.NewMessage(fieldDesc.Message())),
272272
cel.Variable("this", cel.ObjectType(string(fieldDesc.Message().FullName()))),
273273
}
274274
} else {

internal/gen/tests/example/v1/validations.pb.go

+103-24
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

proto/buf.lock

+5
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,8 @@ deps:
1616
repository: protoc-gen-validate
1717
commit: eac44469a7af47e7839a7f1f3d7ac004
1818
digest: shake256:0feabcde01b6b11e3c75a5e3f807968d5995626546f39c37e5d4205892b3a59cced0ed83b35a2eb9e6dddd3309660ad46b737c9dcd224b425de0a6654ce04417
19+
- remote: buf.build
20+
owner: googleapis
21+
repository: googleapis
22+
commit: 28151c0d0a1641bf938a7672c500e01d
23+
digest: shake256:49215edf8ef57f7863004539deff8834cfb2195113f0b890dd1f67815d9353e28e668019165b9d872395871eeafcbab3ccfdb2b5f11734d3cca95be9e8d139de

proto/buf.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ deps:
33
- buf.build/bufbuild/protovalidate
44
- buf.build/bufbuild/protovalidate-testing
55
- buf.build/envoyproxy/protoc-gen-validate
6+
- buf.build/googleapis/googleapis
67
breaking:
78
use:
89
- FILE

proto/tests/example/v1/validations.proto

+9
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ syntax = "proto3";
1717
package tests.example.v1;
1818

1919
import "buf/validate/validate.proto";
20+
import "google/geo/type/viewport.proto";
2021
import "google/protobuf/field_mask.proto";
2122

2223
message HasMsgExprs {
@@ -131,3 +132,11 @@ message TransitiveFieldConstraint {
131132
expression: "has(this.paths)",
132133
}];
133134
}
135+
136+
message MultipleStepsTransitiveFieldConstraints {
137+
google.geo.type.Viewport viewport = 1 [(buf.validate.field).cel = {
138+
id: "viewport.low.latitude",
139+
message: "viewport's low point's latitude must be greater than 10.0 degrees",
140+
expression: "this.low.latitude > 10.0"
141+
}];
142+
}

validator_test.go

+17
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import (
2020
pb "github.com/bufbuild/protovalidate-go/internal/gen/tests/example/v1"
2121
"github.com/stretchr/testify/assert"
2222
"github.com/stretchr/testify/require"
23+
"google.golang.org/genproto/googleapis/geo/type/viewport"
24+
"google.golang.org/genproto/googleapis/type/latlng"
2325
"google.golang.org/protobuf/types/known/fieldmaskpb"
2426
)
2527

@@ -135,3 +137,18 @@ func TestValidator_Validate_TransitiveFieldConstraints(t *testing.T) {
135137
err = val.Validate(msg)
136138
require.NoError(t, err)
137139
}
140+
141+
func TestValidator_Validate_MultipleStepsTransitiveFieldConstraints(t *testing.T) {
142+
t.Parallel()
143+
val, err := New()
144+
require.NoError(t, err)
145+
msg := &pb.MultipleStepsTransitiveFieldConstraints{
146+
Viewport: &viewport.Viewport{
147+
Low: &latlng.LatLng{
148+
Latitude: 30.0,
149+
},
150+
},
151+
}
152+
err = val.Validate(msg)
153+
require.NoError(t, err)
154+
}

0 commit comments

Comments
 (0)