def write_varint.go
bend-kit-protobuf@0.2.0.0 · protobuf.bend:319
import bend-kit-protobuf@0.2.0.0/protobuf.bend as Protobuf
import Base
import bend-kit-bytes@0.3.3.0/bytes.bend as B
319def write_varint.go(fuel: Nat, done: Bool, w: Word64, out: B.Bytes, +max_size: U32) -> Result<&2, &1, Error, B.Bytes>:
320 match fuel:
321 case 0n:
322 Fail{Malformed{}}
323 case 1n+p:
324 match done:
325 case True{}:
326 Word64{h, l} = w
327 byte(out, l, max_size)
328 case False{}:
329 Word64{+h, +l} = w
330 +rest = Word64.shr7(Word64{h, l})
331 do Result<&2, &1, Error, B.Bytes>:
332 next : B.Bytes <- byte(out, ((l .&. 127) .|. 128 : U32), max_size)
333 write_varint.go(p, write_varint.done(rest), rest, next, max_size)