Protobuf.encode.go: def of bend-kit-protobuf@0.2.0.0 Import: import bend-kit-protobuf@0.2.0.0/protobuf.bend as Protobuf Lines 410-464 of bend-kit-protobuf@0.2.0.0/protobuf.bend: https://jend.leeeet.dev/read.txt?path=bend-kit-protobuf@0.2.0.0/protobuf.bend&start_line=410&end_line=464 import Base import bend-kit-bytes@0.3.3.0/bytes.bend as B # Depth is the first decreasing argument for a group; list tails decrease the second. def encode.go(+depth: Nat, fields: List<&1, Field>, out: B.Bytes, +max_size: U32) -> Result<&2, &1, Error, B.Bytes>: match depth: case 0n: match fields: case Nil{}: Done{out} case Con{Field{number, value}, tail}: match value: case Group{inner}: Fail{Limit{}} case Varint{w}: do Result<&2, &1, Error, B.Bytes>: next : B.Bytes <- write_field(number, Varint{w}, out, max_size) encode.go(0n, tail, next, max_size) case Fixed32{w}: do Result<&2, &1, Error, B.Bytes>: next : B.Bytes <- write_field(number, Fixed32{w}, out, max_size) encode.go(0n, tail, next, max_size) case Fixed64{w}: do Result<&2, &1, Error, B.Bytes>: next : B.Bytes <- write_field(number, Fixed64{w}, out, max_size) encode.go(0n, tail, next, max_size) case Blob{b}: do Result<&2, &1, Error, B.Bytes>: next : B.Bytes <- write_field(number, Blob{b}, out, max_size) encode.go(0n, tail, next, max_size) case 1n+p: match fields: case Nil{}: Done{out} case Con{Field{+number, value}, tail}: match value: case Group{inner}: do Result<&2, &1, Error, B.Bytes>: start : B.Bytes <- write_tag(number, 3, out, max_size) body : B.Bytes <- encode.go(p, inner, start, max_size) end : B.Bytes <- write_tag(number, 4, body, max_size) encode.go(1n+p, tail, end, max_size) case Varint{w}: do Result<&2, &1, Error, B.Bytes>: next : B.Bytes <- write_field(number, Varint{w}, out, max_size) encode.go(1n+p, tail, next, max_size) case Fixed32{w}: do Result<&2, &1, Error, B.Bytes>: next : B.Bytes <- write_field(number, Fixed32{w}, out, max_size) encode.go(1n+p, tail, next, max_size) case Fixed64{w}: do Result<&2, &1, Error, B.Bytes>: next : B.Bytes <- write_field(number, Fixed64{w}, out, max_size) encode.go(1n+p, tail, next, max_size) case Blob{b}: do Result<&2, &1, Error, B.Bytes>: next : B.Bytes <- write_field(number, Blob{b}, out, max_size) encode.go(1n+p, tail, next, max_size) Uses (11): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=List https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Result https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Result.bind https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=U32 https://jend.leeeet.dev/definition.txt?path=bend-kit-bytes@0.3.3.0/bytes.bend&name=Bytes https://jend.leeeet.dev/definition.txt?path=bend-kit-protobuf@0.2.0.0/protobuf.bend&name=Error https://jend.leeeet.dev/definition.txt?path=bend-kit-protobuf@0.2.0.0/protobuf.bend&name=Field https://jend.leeeet.dev/definition.txt?path=bend-kit-protobuf@0.2.0.0/protobuf.bend&name=Value https://jend.leeeet.dev/definition.txt?path=bend-kit-protobuf@0.2.0.0/protobuf.bend&name=write_field https://jend.leeeet.dev/definition.txt?path=bend-kit-protobuf@0.2.0.0/protobuf.bend&name=write_tag