Skip to content

Commit 1899e82

Browse files
authored
Merge branch 'main' into patch-1
2 parents 2d4fd72 + 14a49f3 commit 1899e82

File tree

7 files changed

+27
-18
lines changed

7 files changed

+27
-18
lines changed

go.mod

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@ module github.com/bufbuild/protoschema-plugins
33
go 1.23.0
44

55
require (
6-
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.4-20241127180247-a33202765966.1
6+
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.4-20250130201111-63bb56e20495.1
77
github.com/bufbuild/buf v1.50.0
88
github.com/bufbuild/protoplugin v0.0.0-20250106231243-3a819552c9d9
9-
github.com/bufbuild/protovalidate-go v0.8.2
109
github.com/jhump/protoreflect v1.17.0
1110
github.com/santhosh-tekuri/jsonschema/v6 v6.0.1
1211
github.com/stretchr/testify v1.10.0
@@ -19,9 +18,10 @@ require (
1918
cel.dev/expr v0.19.1 // indirect
2019
github.com/antlr4-go/antlr/v4 v4.13.1 // indirect
2120
github.com/bufbuild/protocompile v0.14.1 // indirect
21+
github.com/bufbuild/protovalidate-go v0.9.1 // indirect
2222
github.com/davecgh/go-spew v1.1.1 // indirect
2323
github.com/golang/protobuf v1.5.4 // indirect
24-
github.com/google/cel-go v0.22.1 // indirect
24+
github.com/google/cel-go v0.23.0 // indirect
2525
github.com/google/uuid v1.6.0 // indirect
2626
github.com/pmezard/go-difflib v1.0.0 // indirect
2727
github.com/stoewer/go-strcase v1.3.0 // indirect

go.sum

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.4-20241127180247-a33202765966.1 h1:yeaeyw0RQUe009ebxBQ3TsqBPptiNEGsiS10t+8Htuo=
2-
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.4-20241127180247-a33202765966.1/go.mod h1:novQBstnxcGpfKf8qGRATqn1anQKwMJIbH5Q581jibU=
1+
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.4-20250130201111-63bb56e20495.1 h1:4erM3WLgEG/HIBrpBDmRbs1puhd7p0z7kNXDuhHthwM=
2+
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.4-20250130201111-63bb56e20495.1/go.mod h1:novQBstnxcGpfKf8qGRATqn1anQKwMJIbH5Q581jibU=
33
buf.build/go/protoyaml v0.3.1 h1:ucyzE7DRnjX+mQ6AH4JzN0Kg50ByHHu+yrSKbgQn2D4=
44
buf.build/go/protoyaml v0.3.1/go.mod h1:0TzNpFQDXhwbkXb/ajLvxIijqbve+vMQvWY/b3/Dzxg=
55
cel.dev/expr v0.19.1 h1:NciYrtDRIR0lNCnH1LFJegdjspNx9fI59O7TWcua/W4=
@@ -12,23 +12,23 @@ github.com/bufbuild/protocompile v0.14.1 h1:iA73zAf/fyljNjQKwYzUHD6AD4R8KMasmwa/
1212
github.com/bufbuild/protocompile v0.14.1/go.mod h1:ppVdAIhbr2H8asPk6k4pY7t9zB1OU5DoEw9xY/FUi1c=
1313
github.com/bufbuild/protoplugin v0.0.0-20250106231243-3a819552c9d9 h1:kAWER21DzhzU7ys8LL1WkSfbGkwXv+tM30hyEsYrW2k=
1414
github.com/bufbuild/protoplugin v0.0.0-20250106231243-3a819552c9d9/go.mod h1:c5D8gWRIZ2HLWO3gXYTtUfw/hbJyD8xikv2ooPxnklQ=
15-
github.com/bufbuild/protovalidate-go v0.8.2 h1:sgzXHkHYP6HnAsL2Rd3I1JxkYUyEQUv9awU1PduMxbM=
16-
github.com/bufbuild/protovalidate-go v0.8.2/go.mod h1:K6w8iPNAXBoIivVueSELbUeUl+MmeTQfCDSug85pn3M=
15+
github.com/bufbuild/protovalidate-go v0.9.1 h1:cdrIA33994yCcJyEIZRL36ZGTe9UDM/WHs5MBHEimiE=
16+
github.com/bufbuild/protovalidate-go v0.9.1/go.mod h1:5jptBxfvlY51RhX32zR6875JfPBRXUsQjyZjm/NqkLQ=
1717
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1818
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
1919
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
2020
github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI=
2121
github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
22-
github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM=
23-
github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4=
22+
github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8=
23+
github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU=
2424
github.com/felixge/fgprof v0.9.5 h1:8+vR6yu2vvSKn08urWyEuxx75NWPEvybbkBirEpsbVY=
2525
github.com/felixge/fgprof v0.9.5/go.mod h1:yKl+ERSa++RYOs32d8K6WEXCB4uXdLls4ZaZPpayhMM=
2626
github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E=
2727
github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0=
2828
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
2929
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
30-
github.com/google/cel-go v0.22.1 h1:AfVXx3chM2qwoSbM7Da8g8hX8OVSkBFwX+rz2+PcK40=
31-
github.com/google/cel-go v0.22.1/go.mod h1:BuznPXXfQDpXKWQ9sPW3TzlAJN5zzFe+i9tIs0yC4s8=
30+
github.com/google/cel-go v0.23.0 h1:knsnzeUOcREUFo0ZFJqZI8Rk6uEVyobAlir7GEbf5v0=
31+
github.com/google/cel-go v0.23.0/go.mod h1:52Pb6QsDbC5kvgxvZhiL9QX1oZEkcUF/ZqaPx1J5Wwo=
3232
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
3333
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
3434
github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg=

internal/protoschema/jsonschema/jsonschema.go

+2-3
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121
"unicode"
2222

2323
"buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate"
24-
"github.com/bufbuild/protovalidate-go/resolver"
24+
"github.com/bufbuild/protovalidate-go/resolve"
2525
"google.golang.org/protobuf/reflect/protoreflect"
2626
)
2727

@@ -70,7 +70,6 @@ type jsonSchemaGenerator struct {
7070
schema map[protoreflect.FullName]map[string]interface{}
7171
custom map[protoreflect.FullName]func(protoreflect.MessageDescriptor, *validate.FieldConstraints, map[string]interface{})
7272
useJSONNames bool
73-
resolver resolver.DefaultResolver
7473
}
7574

7675
func (p *jsonSchemaGenerator) getID(desc protoreflect.Descriptor) string {
@@ -214,7 +213,7 @@ func (p *jsonSchemaGenerator) generateValidation(field protoreflect.FieldDescrip
214213
}
215214

216215
func (p *jsonSchemaGenerator) getFieldConstraints(field protoreflect.FieldDescriptor) *validate.FieldConstraints {
217-
constraints := p.resolver.ResolveFieldConstraints(field)
216+
constraints := resolve.FieldConstraints(field)
218217
if constraints == nil || constraints.GetIgnore() == validate.Ignore_IGNORE_ALWAYS {
219218
return nil
220219
}

internal/protoschema/normalize/normalizer.go

+6-3
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,11 @@ func (n *Normalizer) inlineRefs(msgDescPb *descriptorpb.DescriptorProto, msgDesc
127127
for _, field := range msgDescPb.GetField() {
128128
stripExtensionsAndUnknown(field.GetOptions())
129129
if field.GetProto3Optional() {
130-
// Convert to proto2 optional.
131-
field.Label = descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum()
130+
// Since we currently normalize to proto2, we need to
131+
// Remove the weird proto3-specific synthetic oneof for
132+
// explicit presence fields.
133+
// TODO: use editions to normalize and add relevant
134+
// field presence feature to field options here
132135
field.Proto3Optional = nil
133136
syntheticOneofs[field.GetOneofIndex()] = struct{}{}
134137
field.OneofIndex = nil
@@ -150,7 +153,7 @@ func (n *Normalizer) inlineFieldRefs(
150153
switch field.GetType() {
151154
case descriptorpb.FieldDescriptorProto_TYPE_ENUM:
152155
fieldDesc := msgDesc.Fields().ByName(protoreflect.Name(field.GetName()))
153-
if fieldDesc.Enum().Syntax() == protoreflect.Proto3 {
156+
if !fieldDesc.Enum().IsClosed() {
154157
// Convert to int32.
155158
field.Type = descriptorpb.FieldDescriptorProto_TYPE_INT32.Enum()
156159
field.TypeName = nil

internal/protoschema/plugin/pluginjsonschema/pluginjsonschema.go

+2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"github.com/bufbuild/protoplugin"
2323
"github.com/bufbuild/protoschema-plugins/internal/protoschema/jsonschema"
2424
"google.golang.org/protobuf/reflect/protoreflect"
25+
"google.golang.org/protobuf/types/descriptorpb"
2526
)
2627

2728
// Handle implements protoplugin.Handler and is the main entry point for the plugin.
@@ -51,6 +52,7 @@ func Handle(
5152
}
5253

5354
responseWriter.SetFeatureProto3Optional()
55+
responseWriter.SetFeatureSupportsEditions(descriptorpb.Edition_EDITION_2023, descriptorpb.Edition_EDITION_2023)
5456
return nil
5557
}
5658

internal/protoschema/plugin/pluginpubsub/pluginpubsub.go

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020

2121
"github.com/bufbuild/protoplugin"
2222
"github.com/bufbuild/protoschema-plugins/internal/protoschema/pubsub"
23+
"google.golang.org/protobuf/types/descriptorpb"
2324
)
2425

2526
// Handle implements protoplugin.Handler and is the main entry point for the plugin.
@@ -48,5 +49,6 @@ func Handle(
4849
}
4950

5051
responseWriter.SetFeatureProto3Optional()
52+
responseWriter.SetFeatureSupportsEditions(descriptorpb.Edition_EDITION_2023, descriptorpb.Edition_EDITION_2023)
5153
return nil
5254
}

internal/protoschema/pubsub/pubsub.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,10 @@ func Generate(input protoreflect.MessageDescriptor) (string, error) {
3737
return "", err
3838
}
3939
file := &descriptorpb.FileDescriptorProto{
40-
Name: proto.String(FileExtension),
40+
Name: proto.String(FileExtension),
41+
// TODO: If/when Pub/Bub schemas support editions, use Edition 2023 so
42+
// there is no loss of fidelity for syntax-specific semantics
43+
// (such as field presence).
4144
Syntax: proto.String("proto2"),
4245
MessageType: []*descriptorpb.DescriptorProto{
4346
rootMsg,

0 commit comments

Comments
 (0)