Split a Nim sequence into fixed-size chunks

Nim
proc chunked[T](items: openArray[T]; size: int): seq[seq[T]] =
  doAssert size > 0, "chunk size must be positive"
  var i = 0
  while i < items.len:
    result.add(items[i ..< min(i + size, items.len)])
    i += size

let data = @[1, 2, 3, 4, 5, 6, 7]
for batch in chunked(data, 3):
  echo batch
let empty: seq[int] = @[]
echo chunked(empty, 3).len