From 938ad927238047880eb316deb0aeb8f4e2524176 Mon Sep 17 00:00:00 2001 From: joerinehart Date: Wed, 19 Feb 2025 17:40:56 -0500 Subject: [PATCH 01/11] DVRL-60 - draft of Java README --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- README.md | 175 ++++++++++++--------------- 2 files changed, 79 insertions(+), 98 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 23779eb7..bb76a7ad 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -36,8 +36,8 @@ assignees: '' - **Version**: - **Compiler/Toolchain**: - **Protobuf Compiler & Version**: -- **Protoc-gen-validate Version**: - **Protovalidate Version**: +- **Protoc-gen-validate Version**: ## Possible Solution diff --git a/README.md b/README.md index d617a514..2af85b15 100644 --- a/README.md +++ b/README.md @@ -4,30 +4,52 @@ [![Conformance](https://github.com/bufbuild/protovalidate-java/actions/workflows/conformance.yaml/badge.svg)](https://github.com/bufbuild/protovalidate-java/actions/workflows/conformance.yaml) [![BSR](https://img.shields.io/badge/BSR-Module-0C65EC)][buf-mod] -`protovalidate-java` is the Java language implementation of [`protovalidate`](https://github.com/bufbuild/protovalidate) designed to validate Protobuf messages at runtime based on user-defined validation constraints. Powered by Google's Common Expression Language ([CEL](https://github.com/google/cel-spec)), it provides a flexible and efficient foundation for defining and evaluating custom validation rules. The primary goal of `protovalidate` is to help developers ensure data consistency and integrity across the network without requiring generated code. +[Protovalidate][protovalidate] provides standard annotations to validate common constraints on messages and fields, as well as the ability to use [CEL][cel] to write custom constraints. It's the next generation of [protoc-gen-validate][protoc-gen-validate], the only widely used validation library for Protobuf. -## The `protovalidate` project +With Protovalidate, you can annotate your Protobuf messages with both standard and custom validation rules: -Head over to the core [`protovalidate`](https://github.com/bufbuild/protovalidate/) repository for: +```protobuf +syntax = "proto3"; -- [The API definition](https://github.com/bufbuild/protovalidate/tree/main/proto/protovalidate/buf/validate/validate.proto): used to describe validation constraints -- [Documentation](https://github.com/bufbuild/protovalidate/tree/main/docs): how to apply `protovalidate` effectively -- [Migration tooling](https://github.com/bufbuild/protovalidate/tree/main/docs/migrate.md): incrementally migrate from `protoc-gen-validate` -- [Conformance testing utilities](https://github.com/bufbuild/protovalidate/tree/main/docs/conformance.md): for acceptance testing of `protovalidate` implementations +package banking.v1; + +import "buf/validate/validate.proto"; -Other `protovalidate` runtime implementations include: +message MoneyTransfer { + string to_account_id = 1 [ + // Standard rule: `to_account_id` must be a UUID + (buf.validate.field).string.uuid = true + ]; -- C++: [`protovalidate-cc`](https://github.com/bufbuild/protovalidate-cc) -- Go: [`protovalidate-go`](https://github.com/bufbuild/protovalidate-go) -- Python: [`protovalidate-python`](https://github.com/bufbuild/protovalidate-python) + string from_account_id = 2 [ + // Standard rule: `from_account_id` must be a UUID + (buf.validate.field).string.uuid = true + ]; -And others coming soon: + // Custom rule: `to_account_id` and `from_account_id` can't be the same. + option (buf.validate.message).cel = { + id: "to_account_id.not.from_account_id" + message: "to_account_id and from_account_id should not be the same value" + expression: "this.to_account_id != this.from_account_id" + }; +} +``` -- TypeScript: `protovalidate-ts` +Once you've added `protovalidate-java` to your project, validation is idiomatic Java: + +```java +ValidationResult result = validator.validate(message); +if (!result.isSuccess()) { + // Handle failure. +} +``` ## Installation -To include `protovalidate-java` in your project, add the following to your build file: +> [!TIP] +> The easiest way to get started with Protovalidate for RPC APIs are the how-to's in Buf's documentation. There's one available for [Java and gRPC][grpc-java]. + +`protovalidate-java` is listed in [Maven Central][maven], which provides installation snippets for Gradle, Maven, and other package managers. In Gradle, it's: ```gradle dependencies { @@ -35,104 +57,63 @@ dependencies { } ``` -Remember to always check for the latest version of `protovalidate-java` on the project's [GitHub releases page](https://github.com/bufbuild/protovalidate-java/releases) to ensure you're using the most up-to-date version. +# Documentation -## Usage +Comprehensive documentation for Protovalidate is available in [Buf's documentation library][protovalidate]. -### Implementing validation constraints +Highlights for Java developers include: -Validation constraints are defined directly within `.proto` files. Documentation for adding constraints can be found in the `protovalidate` project [README](https://github.com/bufbuild/protovalidate) and its [comprehensive docs](https://github.com/bufbuild/protovalidate/tree/main/docs). +* The [developer quickstart][quickstart] +* A comprehensive RPC how-to's for [Java and gRPC][grpc-java] +* A [migration guide for protoc-gen-validate][migration-guide] users -```protobuf -syntax = "proto3"; +# Additional Languages and Repositories -package my.package; +Protovalidate isn't just for Java! You might be interested in sibling repositories for other languages: -import "google/protobuf/timestamp.proto"; -import "buf/validate/validate.proto"; +- [`protovalidate-go`][pv-go] (Go) +- [`protovalidate-python`][pv-python] (Python) +- [`protovalidate-cc`][pv-cc] (C++) +- `protovalidate-ts` (TypeScript, coming soon!) -message Transaction { - uint64 id = 1 [(buf.validate.field).uint64.gt = 999]; - google.protobuf.Timestamp purchase_date = 2; - google.protobuf.Timestamp delivery_date = 3; - - string price = 4 [(buf.validate.field).cel = { - id: "transaction.price", - message: "price must be positive and include a valid currency symbol ($ or £)", - expression: "(this.startsWith('$') || this.startsWith('£')) && double(this.substring(1)) > 0" - }]; - - option (buf.validate.message).cel = { - id: "transaction.delivery_date", - message: "delivery date must be after purchase date", - expression: "this.delivery_date > this.purchase_date" - }; -} -``` +For a peek into how Protovalidate works, you might also want to check out [`protovalidate's core repository`](https://github.com/bufbuild/protovalidate), where `validate.proto` defines the entire cross-language API. -### Example +## Related Sites -In your Java code, create an instance of the `Validator` class and use the `validate` method to validate your messages. +- [Buf][buf] - Enterprise-grade Kafka and gRPC for the modern age +- [Common Expression Language (CEL)][cel] - The open-source technology at the core of Protovalidate -```java -// Import the required packages -package build.buf; - -import build.buf.protovalidate.results.ValidationException; -import build.buf.protovalidate.results.ValidationResult; -import com.my.package.Transaction; -import com.google.protobuf.Timestamp; - -import build.buf.protovalidate.Validator; -import build.buf.protovalidate.Config; - -public class Main { - - // Create timestamps for purchase and delivery date - Timestamp purchaseDate = Timestamp.newBuilder().build(); - Timestamp deliveryDate = Timestamp.newBuilder().build(); - - // Create a transaction object using the Builder pattern - Transaction transaction = - Transaction.newBuilder() - .setId(1234) - .setPrice("$5.67") - .setPurchaseDate(purchaseDate) - .setDeliveryDate(deliveryDate) - .build(); - - // Create a validator object with the default Configuration - Validator validator = new Validator(); - // Validate the transaction object using the validator - try { - ValidationResult result = validator.validate(transaction); - - // Check if there are any validation violations - if (result.getViolations().isEmpty()) { - // No violations, validation successful - System.out.println("Validation succeeded"); - } else { - // Print the violations if any found - System.out.println(result.toString()); - } - } catch (ValidationException e) { - // Catch and print any ValidationExceptions thrown during the validation process - System.out.println("Validation failed: " + e.getMessage()); - } -} -``` +# Contribution -### Ecosystem +We genuinely appreciate any help! If you'd like to contribute, the following will be of interest: -- [`protovalidate`](https://github.com/bufbuild/protovalidate) core repository -- [Buf][buf] -- [CEL Spec][cel-spec] +- [Contributing Guidelines][contributing] - Guidelines to make your contribution process straightforward and meaningful +- [Conformance testing utilities](https://github.com/bufbuild/protovalidate/tree/main/docs/conformance.md) - Utilities providing acceptance testing of `protovalidate` implementations -## Legal +# Legal Offered under the [Apache 2 license][license]. -[license]: LICENSE [buf]: https://buf.build +[cel]: https://cel.dev + +[pv-go]: https://github.com/bufbuild/protovalidate-go +[pv-java]: https://github.com/bufbuild/protovalidate-java +[pv-python]: https://github.com/bufbuild/protovalidate-python +[pv-cc]: https://github.com/bufbuild/protovalidate-cc + +[license]: LICENSE +[contributing]: .github/CONTRIBUTING.md [buf-mod]: https://buf.build/bufbuild/protovalidate -[cel-spec]: https://github.com/google/cel-spec + +[protoc-gen-validate]: https://github.com/bufbuild/protoc-gen-validate + +[protovalidate]: https://buf.build/docs/protovalidate/overview/ +[quickstart]: https://buf.build/docs/protovalidate/quickstart/ +[connect-go]: https://buf.build/docs/protovalidate/how-to/connect-go/ +[grpc-go]: https://buf.build/docs/protovalidate/how-to/grpc-go/ +[grpc-java]: https://buf.build/docs/protovalidate/how-to/grpc-java/ +[grpc-python]: https://buf.build/docs/protovalidate/how-to/grpc-python/ +[migration-guide]: https://buf.build/docs/migration-guides/migrate-from-protoc-gen-validate/ + +[maven]: https://central.sonatype.com/artifact/build.buf/protovalidate/overview From 652a08f80066569ce1f55c78a8ba866804659a6a Mon Sep 17 00:00:00 2001 From: joerinehart Date: Thu, 20 Feb 2025 08:20:21 -0500 Subject: [PATCH 02/11] DVRL-60 - spelling fix --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2af85b15..a31df981 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,7 @@ Comprehensive documentation for Protovalidate is available in [Buf's documentati Highlights for Java developers include: * The [developer quickstart][quickstart] -* A comprehensive RPC how-to's for [Java and gRPC][grpc-java] +* A comprehensive RPC how-to for [Java and gRPC][grpc-java] * A [migration guide for protoc-gen-validate][migration-guide] users # Additional Languages and Repositories From fd9e881841f27de54be5d45e65518efd8ca9a58a Mon Sep 17 00:00:00 2001 From: joerinehart Date: Thu, 20 Feb 2025 09:07:44 -0500 Subject: [PATCH 03/11] DVRL-60 - header fix --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a31df981..c3913ca0 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ if (!result.isSuccess()) { } ``` -## Installation +# Installation > [!TIP] > The easiest way to get started with Protovalidate for RPC APIs are the how-to's in Buf's documentation. There's one available for [Java and gRPC][grpc-java]. @@ -78,7 +78,7 @@ Protovalidate isn't just for Java! You might be interested in sibling repositori For a peek into how Protovalidate works, you might also want to check out [`protovalidate's core repository`](https://github.com/bufbuild/protovalidate), where `validate.proto` defines the entire cross-language API. -## Related Sites +# Related Sites - [Buf][buf] - Enterprise-grade Kafka and gRPC for the modern age - [Common Expression Language (CEL)][cel] - The open-source technology at the core of Protovalidate From d6dfe71ade0d450768f29286d17d77976d690727 Mon Sep 17 00:00:00 2001 From: joerinehart Date: Tue, 25 Feb 2025 09:46:56 -0500 Subject: [PATCH 04/11] DVRL-60 - revisions before PR --- README.md | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index c3913ca0..ca20a457 100644 --- a/README.md +++ b/README.md @@ -76,19 +76,25 @@ Protovalidate isn't just for Java! You might be interested in sibling repositori - [`protovalidate-cc`][pv-cc] (C++) - `protovalidate-ts` (TypeScript, coming soon!) -For a peek into how Protovalidate works, you might also want to check out [`protovalidate's core repository`](https://github.com/bufbuild/protovalidate), where `validate.proto` defines the entire cross-language API. +Additionally, [protovalidate's core repository](https://github.com/bufbuild/protovalidate) provides: -# Related Sites +- [Protovalidate's Protobuf API][validate-proto] +- [Migration tooling][migrate] for `protoc-gen-validate` users +- [Example][examples] `.proto` files using `protovalidate` +- [Conformance testing utilities][conformance] for acceptance testing of `protovalidate` implementations -- [Buf][buf] - Enterprise-grade Kafka and gRPC for the modern age -- [Common Expression Language (CEL)][cel] - The open-source technology at the core of Protovalidate # Contribution We genuinely appreciate any help! If you'd like to contribute, the following will be of interest: -- [Contributing Guidelines][contributing] - Guidelines to make your contribution process straightforward and meaningful -- [Conformance testing utilities](https://github.com/bufbuild/protovalidate/tree/main/docs/conformance.md) - Utilities providing acceptance testing of `protovalidate` implementations +- [Contributing Guidelines][contributing]: Guidelines to make your contribution process straightforward and meaningful +- [Conformance testing utilities](https://github.com/bufbuild/protovalidate/tree/main/docs/conformance.md): Utilities providing acceptance testing of `protovalidate` implementations + +# Related Sites + +- [Buf][buf]: Enterprise-grade Kafka and gRPC for the modern age +- [Common Expression Language (CEL)][cel]: The open-source technology at the core of Protovalidate # Legal @@ -117,3 +123,9 @@ Offered under the [Apache 2 license][license]. [migration-guide]: https://buf.build/docs/migration-guides/migrate-from-protoc-gen-validate/ [maven]: https://central.sonatype.com/artifact/build.buf/protovalidate/overview +[pkg-go]: https://pkg.go.dev/github.com/bufbuild/protovalidate-go + +[validate-proto]: https://buf.build/bufbuild/protovalidate/docs/main:buf.validate +[conformance]: https://github.com/bufbuild/protovalidate/blob/main/docs/conformance.md +[examples]: https://github.com/bufbuild/protovalidate/tree/main/examples +[migrate]: https://buf.build/docs/migration-guides/migrate-from-protoc-gen-validate/ From c0f0320ab05856b9fc0b2042c2c5d20e13b26c93 Mon Sep 17 00:00:00 2001 From: joerinehart Date: Tue, 25 Feb 2025 10:47:26 -0500 Subject: [PATCH 05/11] DVRL-60 - removing duplicative link --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index ca20a457..febb8e88 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,6 @@ Protovalidate isn't just for Java! You might be interested in sibling repositori Additionally, [protovalidate's core repository](https://github.com/bufbuild/protovalidate) provides: - [Protovalidate's Protobuf API][validate-proto] -- [Migration tooling][migrate] for `protoc-gen-validate` users - [Example][examples] `.proto` files using `protovalidate` - [Conformance testing utilities][conformance] for acceptance testing of `protovalidate` implementations From f66c5f7c34a191cbe877550cc0ec9aaff86201a1 Mon Sep 17 00:00:00 2001 From: joerinehart Date: Tue, 25 Feb 2025 11:36:48 -0500 Subject: [PATCH 06/11] DVRL-60 - updating bug report --- .github/ISSUE_TEMPLATE/bug_report.md | 1 - README.md | 12 ++++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index bb76a7ad..49e66ebf 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -37,7 +37,6 @@ assignees: '' - **Compiler/Toolchain**: - **Protobuf Compiler & Version**: - **Protovalidate Version**: -- **Protoc-gen-validate Version**: ## Possible Solution diff --git a/README.md b/README.md index febb8e88..6ba78c37 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ if (!result.isSuccess()) { } ``` -# Installation +## Installation > [!TIP] > The easiest way to get started with Protovalidate for RPC APIs are the how-to's in Buf's documentation. There's one available for [Java and gRPC][grpc-java]. @@ -57,7 +57,7 @@ dependencies { } ``` -# Documentation +## Documentation Comprehensive documentation for Protovalidate is available in [Buf's documentation library][protovalidate]. @@ -67,7 +67,7 @@ Highlights for Java developers include: * A comprehensive RPC how-to for [Java and gRPC][grpc-java] * A [migration guide for protoc-gen-validate][migration-guide] users -# Additional Languages and Repositories +## Additional Languages and Repositories Protovalidate isn't just for Java! You might be interested in sibling repositories for other languages: @@ -83,19 +83,19 @@ Additionally, [protovalidate's core repository](https://github.com/bufbuild/prot - [Conformance testing utilities][conformance] for acceptance testing of `protovalidate` implementations -# Contribution +## Contribution We genuinely appreciate any help! If you'd like to contribute, the following will be of interest: - [Contributing Guidelines][contributing]: Guidelines to make your contribution process straightforward and meaningful - [Conformance testing utilities](https://github.com/bufbuild/protovalidate/tree/main/docs/conformance.md): Utilities providing acceptance testing of `protovalidate` implementations -# Related Sites +## Related Sites - [Buf][buf]: Enterprise-grade Kafka and gRPC for the modern age - [Common Expression Language (CEL)][cel]: The open-source technology at the core of Protovalidate -# Legal +## Legal Offered under the [Apache 2 license][license]. From f61084e1dfa696512cfa625702f7adfc88f526de Mon Sep 17 00:00:00 2001 From: joerinehart Date: Tue, 25 Feb 2025 13:25:09 -0500 Subject: [PATCH 07/11] DVRL-60 - consistent logo treatment --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6ba78c37..d2d22e8d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -# [![The Buf logo](.github/buf-logo.svg)][buf] protovalidate-java +[![The Buf logo](.github/buf-logo.svg)][buf] + +# protovalidate-java [![CI](https://github.com/bufbuild/protovalidate-java/actions/workflows/ci.yaml/badge.svg)](https://github.com/bufbuild/protovalidate-java/actions/workflows/ci.yaml) [![Conformance](https://github.com/bufbuild/protovalidate-java/actions/workflows/conformance.yaml/badge.svg)](https://github.com/bufbuild/protovalidate-java/actions/workflows/conformance.yaml) From 37d06c483ac8e95acc46be337c0a427944814e34 Mon Sep 17 00:00:00 2001 From: jrinehart-buf Date: Tue, 25 Feb 2025 18:05:37 -0500 Subject: [PATCH 08/11] Apply suggestions from code review Co-authored-by: Carol Gunby --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d2d22e8d..44a45083 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ Additionally, [protovalidate's core repository](https://github.com/bufbuild/prot ## Contribution -We genuinely appreciate any help! If you'd like to contribute, the following will be of interest: +We genuinely appreciate any help! If you'd like to contribute, check out these resources: - [Contributing Guidelines][contributing]: Guidelines to make your contribution process straightforward and meaningful - [Conformance testing utilities](https://github.com/bufbuild/protovalidate/tree/main/docs/conformance.md): Utilities providing acceptance testing of `protovalidate` implementations From 3326d95185214f5a6e8348636802a27ce93361ba Mon Sep 17 00:00:00 2001 From: joerinehart Date: Fri, 28 Mar 2025 09:41:41 -0400 Subject: [PATCH 09/11] DVRL-60 - correcting protovalidate-es name --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 44a45083..ecf38252 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ Protovalidate isn't just for Java! You might be interested in sibling repositori - [`protovalidate-go`][pv-go] (Go) - [`protovalidate-python`][pv-python] (Python) - [`protovalidate-cc`][pv-cc] (C++) -- `protovalidate-ts` (TypeScript, coming soon!) +- `protovalidate-es` (TypeScript and JavaScript, coming soon!) Additionally, [protovalidate's core repository](https://github.com/bufbuild/protovalidate) provides: From b59695809c0503ca7e4bfc087ae4ae2846b2e490 Mon Sep 17 00:00:00 2001 From: joerinehart Date: Thu, 3 Apr 2025 08:54:24 -0400 Subject: [PATCH 10/11] DVRL-60 - removing stale reference to examples --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index ecf38252..7e9652ba 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,6 @@ Protovalidate isn't just for Java! You might be interested in sibling repositori Additionally, [protovalidate's core repository](https://github.com/bufbuild/protovalidate) provides: - [Protovalidate's Protobuf API][validate-proto] -- [Example][examples] `.proto` files using `protovalidate` - [Conformance testing utilities][conformance] for acceptance testing of `protovalidate` implementations From b0d93f343ec3676beb8c528cc73f19814fcb5752 Mon Sep 17 00:00:00 2001 From: joerinehart Date: Thu, 3 Apr 2025 15:01:08 -0400 Subject: [PATCH 11/11] DVRL-60 - updating links to docs --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 7e9652ba..c56323c4 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ if (!result.isSuccess()) { ## Installation > [!TIP] -> The easiest way to get started with Protovalidate for RPC APIs are the how-to's in Buf's documentation. There's one available for [Java and gRPC][grpc-java]. +> The easiest way to get started with Protovalidate for RPC APIs are the quickstarts in Buf's documentation. There's one available for [Java and gRPC][grpc-java]. `protovalidate-java` is listed in [Maven Central][maven], which provides installation snippets for Gradle, Maven, and other package managers. In Gradle, it's: @@ -66,7 +66,7 @@ Comprehensive documentation for Protovalidate is available in [Buf's documentati Highlights for Java developers include: * The [developer quickstart][quickstart] -* A comprehensive RPC how-to for [Java and gRPC][grpc-java] +* A comprehensive RPC quickstart for [Java and gRPC][grpc-java] * A [migration guide for protoc-gen-validate][migration-guide] users ## Additional Languages and Repositories @@ -114,12 +114,12 @@ Offered under the [Apache 2 license][license]. [protoc-gen-validate]: https://github.com/bufbuild/protoc-gen-validate -[protovalidate]: https://buf.build/docs/protovalidate/overview/ +[protovalidate]: https://buf.build/docs/protovalidate [quickstart]: https://buf.build/docs/protovalidate/quickstart/ -[connect-go]: https://buf.build/docs/protovalidate/how-to/connect-go/ -[grpc-go]: https://buf.build/docs/protovalidate/how-to/grpc-go/ -[grpc-java]: https://buf.build/docs/protovalidate/how-to/grpc-java/ -[grpc-python]: https://buf.build/docs/protovalidate/how-to/grpc-python/ +[connect-go]: https://buf.build/docs/protovalidate/quickstart/connect-go/ +[grpc-go]: https://buf.build/docs/protovalidate/quickstart/grpc-go/ +[grpc-java]: https://buf.build/docs/protovalidate/quickstart/grpc-java/ +[grpc-python]: https://buf.build/docs/protovalidate/quickstart/grpc-python/ [migration-guide]: https://buf.build/docs/migration-guides/migrate-from-protoc-gen-validate/ [maven]: https://central.sonatype.com/artifact/build.buf/protovalidate/overview