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)

Uses (13)

Used by (1)