Slide 21
Slide 21 text
© LayerX Inc. 21
データモデル:Discriminated Union
dev/protoc-gen-zod/index.ts — @bufbuild/protoplugin で書かれた独⾃プラグイン
独⾃ protoc プラグインの変換ルール
Proto → ⽣成される Zod
oneof z.discriminatedUnion("case", [...])
string z.string()
string [(buf.validate.field).string.min_len = 1] z.string().min(1)
uint32 z.number().int().nonnegative()
uint32 [(buf.validate.field).uint32 = {gte:0,lte:255}] z.number()...gte(0).lte(255)
enum [(buf.validate.field).enum = {not_in:[0]}] z.nativeEnum(E).refine(...)
repeated Foo z.lazy(() => Foo$Schema.array())
google.protobuf.UInt32Value z.number()...optional()
buf.validate の constraint がそのままランタイムバリデーションに変換される