feat: bufbuild/protoc-gen-validate

main
sudo pacman -Syu 2023-03-21 04:00:21 +07:00
parent 2b2f393177
commit d635c0ca8b
2 changed files with 50 additions and 30 deletions

View File

@ -79,8 +79,8 @@
>
</li>
<li>
<a href="github.com/envoyproxy/protoc-gen-validate"
>envoyproxy/protoc-gen-validate</a
<a href="github.com/bufbuild/protoc-gen-validate"
>bufbuild/protoc-gen-validate</a
>
</li>
<li>
@ -95,7 +95,6 @@
<span class="pl-c">// +build tools</span>
<span class="pl-k">import</span> (
_ <span class="pl-s">"github.com/envoyproxy/protoc-gen-validate"</span>
_ <span class="pl-s">"github.com/golang/protobuf/protoc-gen-go"</span>
_ <span class="pl-s">"github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway"</span>
_ <span class="pl-s">"github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger"</span>
@ -106,10 +105,10 @@
<div class="highlight highlight-source-yaml">
<pre><span class="pl-ent">version</span>: <span class="pl-c1">v1</span>
<span class="pl-ent">deps</span>:
- <span class="pl-s">buf.build/envoyproxy/protoc-gen-validate:6607b10f00ed4a3d98f906807131c44a</span>
- <span class="pl-s">buf.build/kei2100/protoc-gen-marshal-zap:081f499bbca4486784773e060c1c1418</span>
- <span class="pl-s">buf.build/haunt98/googleapis:b38d93f7ade94a698adff9576474ae7c</span>
- <span class="pl-s">buf.build/haunt98/grpc-gateway:ecf4f0f58aa8496f8a76ed303c6e06c7</span>
- <span class="pl-s">buf.build/haunt98/protoc-gen-validate:2686264610fc4ad4a9fcc932647e279d</span>
- <span class="pl-s">buf.build/haunt98/marshal-zap:2a593ca925134680a5820d3f13c1be5a</span>
<span class="pl-ent">breaking</span>:
<span class="pl-ent">use</span>:
- <span class="pl-s">FILE</span>
@ -125,6 +124,12 @@
<span class="pl-ent">out</span>: <span class="pl-s">pkg</span>
<span class="pl-ent">opt</span>:
- <span class="pl-s">plugins=grpc</span>
- <span class="pl-ent">name</span>: <span class="pl-s">buf.build/bufbuild/validate-go:v0.9.0</span>
<span class="pl-ent">out</span>: <span class="pl-s">pkg</span>
<span class="pl-ent">opt</span>:
- <span class="pl-s">lang=go</span>
- <span class="pl-ent">name</span>: <span class="pl-s">marshal-zap</span>
<span class="pl-ent">out</span>: <span class="pl-s">pkg</span>
- <span class="pl-ent">name</span>: <span class="pl-s">grpc-gateway</span>
<span class="pl-ent">out</span>: <span class="pl-s">pkg</span>
<span class="pl-ent">opt</span>:
@ -132,37 +137,43 @@
- <span class="pl-ent">name</span>: <span class="pl-s">swagger</span>
<span class="pl-ent">out</span>: <span class="pl-s">.</span>
<span class="pl-ent">opt</span>:
- <span class="pl-s">logtostderr=true</span>
- <span class="pl-ent">name</span>: <span class="pl-s">validate</span>
<span class="pl-ent">out</span>: <span class="pl-s">pkg</span>
<span class="pl-ent">opt</span>:
- <span class="pl-s">lang=go</span>
- <span class="pl-ent">name</span>: <span class="pl-s">marshal-zap</span>
<span class="pl-ent">out</span>: <span class="pl-s">pkg</span></pre>
- <span class="pl-s">logtostderr=true</span></pre>
</div>
<p>Update <code>Makefile</code>:</p>
<div class="highlight highlight-source-makefile">
<pre><span class="pl-en">gen</span>:
go install github.com/golang/protobuf/protoc-gen-go
go install github.com/kei2100/protoc-gen-marshal-zap/plugin/protoc-gen-marshal-zap
go install github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway
go install github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger
go install github.com/envoyproxy/protoc-gen-validate
go install github.com/kei2100/protoc-gen-marshal-zap/plugin/protoc-gen-marshal-zap
go install github.com/bufbuild/buf/cmd/buf@latest
buf mod update
buf format -w
buf generate</pre>
</div>
<p>Run <code>make gen</code> to have fun of course.</p>
<p>
If using <code>bufbuild/protoc-gen-validate</code>,
<code>kei2100/protoc-gen-marshal-zap</code>, better make a raw copy of
proto file for other services to integrate:
</p>
<div class="highlight highlight-source-makefile">
<pre><span class="pl-en">raw</span>:
cp ./api.proto ./raw/
sed -i <span class="pl-s"><span class="pl-pds">"</span><span class="pl-pds">"</span></span> -e <span class="pl-s"><span class="pl-pds">"</span>s/import <span class="pl-cce">\"</span>marshal-zap\.proto<span class="pl-cce">\"</span>;//g<span class="pl-pds">"</span></span> ./raw/api.proto
sed -i <span class="pl-s"><span class="pl-pds">"</span><span class="pl-pds">"</span></span> -e <span class="pl-s"><span class="pl-pds">"</span>s/\[(marshal_zap\.mask) = true]//g<span class="pl-pds">"</span></span> ./raw/api.proto
sed -i <span class="pl-s"><span class="pl-pds">"</span><span class="pl-pds">"</span></span> -e <span class="pl-s"><span class="pl-pds">"</span>s/import <span class="pl-cce">\"</span>validate\/validate\.proto<span class="pl-cce">\"</span>;//g<span class="pl-pds">"</span></span> ./raw/api.proto
sed -i <span class="pl-s"><span class="pl-pds">"</span><span class="pl-pds">"</span></span> -e <span class="pl-s"><span class="pl-pds">"</span>s/\[(validate\.rules)\.string.min_len = 1\]//g<span class="pl-pds">"</span></span> ./raw/api.proto</pre>
</div>
<h2>
<a id="user-content-faq" class="anchor" aria-hidden="true" href="#faq"
><span aria-hidden="true" class="octicon octicon-link"></span></a
>FAQ
</h2>
<p>
Remember <code>grpc-ecosystem/grpc-gateway</code>,
<code>envoyproxy/protoc-gen-validate</code>,
<code>kei2100/protoc-gen-marshal-zap</code> is optional, so feel free to
Remember <code>bufbuild/protoc-gen-validate</code>,
<code>kei2100/protoc-gen-marshal-zap</code>,
<code>grpc-ecosystem/grpc-gateway</code> is optional, so feel free to
delete if you don't use theme.
</p>
<p>If use <code>vendor</code>:</p>

View File

@ -12,7 +12,7 @@ FYI, the libs version I use:
- [golang/protobuf v1.5.2](https://github.com/golang/protobuf/releases/tag/v1.5.2)
- [grpc-ecosystem/grpc-gateway v1.16.0](https://github.com/grpc-ecosystem/grpc-gateway/releases/tag/v1.16.0)
- [envoyproxy/protoc-gen-validate](github.com/envoyproxy/protoc-gen-validate)
- [bufbuild/protoc-gen-validate](github.com/bufbuild/protoc-gen-validate)
- [kei2100/protoc-gen-marshal-zap](github.com/kei2100/protoc-gen-marshal-zap)
`build.go`:
@ -22,7 +22,6 @@ FYI, the libs version I use:
// +build tools
import (
_ "github.com/envoyproxy/protoc-gen-validate"
_ "github.com/golang/protobuf/protoc-gen-go"
_ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway"
_ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger"
@ -35,10 +34,10 @@ import (
```yaml
version: v1
deps:
- buf.build/envoyproxy/protoc-gen-validate:6607b10f00ed4a3d98f906807131c44a
- buf.build/kei2100/protoc-gen-marshal-zap:081f499bbca4486784773e060c1c1418
- buf.build/haunt98/googleapis:b38d93f7ade94a698adff9576474ae7c
- buf.build/haunt98/grpc-gateway:ecf4f0f58aa8496f8a76ed303c6e06c7
- buf.build/haunt98/protoc-gen-validate:2686264610fc4ad4a9fcc932647e279d
- buf.build/haunt98/marshal-zap:2a593ca925134680a5820d3f13c1be5a
breaking:
use:
- FILE
@ -56,6 +55,12 @@ plugins:
out: pkg
opt:
- plugins=grpc
- name: buf.build/bufbuild/validate-go:v0.9.0
out: pkg
opt:
- lang=go
- name: marshal-zap
out: pkg
- name: grpc-gateway
out: pkg
opt:
@ -64,12 +69,6 @@ plugins:
out: .
opt:
- logtostderr=true
- name: validate
out: pkg
opt:
- lang=go
- name: marshal-zap
out: pkg
```
Update `Makefile`:
@ -77,10 +76,9 @@ Update `Makefile`:
```Makefile
gen:
go install github.com/golang/protobuf/protoc-gen-go
go install github.com/kei2100/protoc-gen-marshal-zap/plugin/protoc-gen-marshal-zap
go install github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway
go install github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger
go install github.com/envoyproxy/protoc-gen-validate
go install github.com/kei2100/protoc-gen-marshal-zap/plugin/protoc-gen-marshal-zap
go install github.com/bufbuild/buf/cmd/buf@latest
buf mod update
buf format -w
@ -89,9 +87,20 @@ gen:
Run `make gen` to have fun of course.
If using `bufbuild/protoc-gen-validate`, `kei2100/protoc-gen-marshal-zap`, better make a raw copy of proto file for other services to integrate:
```Makefile
raw:
cp ./api.proto ./raw/
sed -i "" -e "s/import \"marshal-zap\.proto\";//g" ./raw/api.proto
sed -i "" -e "s/\[(marshal_zap\.mask) = true]//g" ./raw/api.proto
sed -i "" -e "s/import \"validate\/validate\.proto\";//g" ./raw/api.proto
sed -i "" -e "s/\[(validate\.rules)\.string.min_len = 1\]//g" ./raw/api.proto
```
## FAQ
Remember `grpc-ecosystem/grpc-gateway`, `envoyproxy/protoc-gen-validate`, `kei2100/protoc-gen-marshal-zap` is optional, so feel free to delete if you don't use theme.
Remember `bufbuild/protoc-gen-validate`, `kei2100/protoc-gen-marshal-zap`, `grpc-ecosystem/grpc-gateway` is optional, so feel free to delete if you don't use theme.
If use `vendor`: