You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I'd like to generify the Value interface to accommodate validation of Protobuf messages generated by other implementations. Specifically I'd like to implement support for protokt.
Problem it solves or use case:
It would be nice to write another implementation of protovalidate for a JVM language without having to reinvent the wheel or fork this project.
Proposed implementation or solution:
It turns out you don't have to do much to generify this project.
First you change Value to reference a generic "MessageLike" interface. Then from everything that fails to compile, I derived the exact reflection capabilities protovalidate-java requires of a Protobuf runtime:
// This name is subject to change.
interface MessageLike {
// Whether a message has a field. This can be a standard field or a member of a oneof.
boolean hasField(FieldDescriptor field);
// Get the value of a field. This can be a standard field or a member of a oneof.
Value getField(FieldDescriptor field);
}
Separately the Value interface changes slightly. Sometimes we need to extract the JVM value to verify things in Java code (e.g. Any type URL or enum value); sometimes we need the binding value that the runtime under test should provide to CEL's runtime.
Contribution:
I have already implemented this proposal[1]. My fork passes all conformance tests for protobuf-java and protokt[2]. The branch is a bit sloppy since it's a POC, but the conformance tests can be swapped from the Java implementation to the protokt implementation by changing the main class of the conformance:conformance task from Main to Main2.
If my changes to the various evaluator classes can be merged here, then I can write a spinoff library that reuses the majority of the implementation code in this project to validate Protokt messages.
As a bonus it would be great to be able to generate the conformance test cases using the protobuf-gradle-plugin from a JAR on Maven Central so I don't have to invoke buf export. Maybe protovalidate-java can bundle them. Protokt manually syncs its conformance proto file with the main protobuf repo so buf export is still better on the whole.
Thanks!
[1] The implementation requires a few changes to protokt found on this branch. merged
[2] With a small set of tests that I think are not actually always possible to cover given a proto3-compliant runtime. These are called out in my branch, but I force them to pass anyways since there's no option to skip them like the Protobuf conformance tests and I didn't want to figure out how to make a failure list for the hack into the existing protovalidate-java conformance runtime. fixed
Additional context:
I'm the author of protokt and the buf-gradle-plugin.
The text was updated successfully, but these errors were encountered:
Feature description:
I'd like to generify the
Value
interface to accommodate validation of Protobuf messages generated by other implementations. Specifically I'd like to implement support for protokt.Problem it solves or use case:
It would be nice to write another implementation of protovalidate for a JVM language without having to reinvent the wheel or fork this project.
Proposed implementation or solution:
It turns out you don't have to do much to generify this project.
First you change
Value
to reference a generic "MessageLike" interface. Then from everything that fails to compile, I derived the exact reflection capabilities protovalidate-java requires of a Protobuf runtime:Separately the
Value
interface changes slightly. Sometimes we need to extract the JVM value to verify things in Java code (e.g. Any type URL or enum value); sometimes we need the binding value that the runtime under test should provide to CEL's runtime.Contribution:
I have already implemented this proposal[1]. My fork passes all conformance tests for protobuf-java and protokt[2]. The branch is a bit sloppy since it's a POC, but the conformance tests can be swapped from the Java implementation to the protokt implementation by changing the main class of the
conformance:conformance
task fromMain
toMain2
.https://github.com/andrewparmet/protovalidate-protokt/pull/9
If my changes to the various evaluator classes can be merged here, then I can write a spinoff library that reuses the majority of the implementation code in this project to validate Protokt messages.
As a bonus it would be great to be able to generate the conformance test cases using the protobuf-gradle-plugin from a JAR on Maven Central so I don't have to invoke
buf export
. Maybe protovalidate-java can bundle them. Protokt manually syncs its conformance proto file with the main protobuf repo sobuf export
is still better on the whole.Thanks!
[1]
The implementation requires a few changes to protokt found on this branch.merged[2]
With a small set of tests that I think are not actually always possible to cover given a proto3-compliant runtime. These are called out in my branch, but I force them to pass anyways since there's no option to skip them like the Protobuf conformance tests and I didn't want to figure out how to make a failure list for the hack into the existing protovalidate-java conformance runtime.fixedAdditional context:
I'm the author of protokt and the buf-gradle-plugin.
The text was updated successfully, but these errors were encountered: