def write.loop
mylsm-lsm-store@0.6.0.1 · src/transfer/RestoreIo.bend:84
import mylsm-lsm-store@0.6.0.1/src/transfer/RestoreIo.bend as RestoreIo
import Base
import mylsm-lsm-store@0.6.0.1/src/ByteDurableDb.bend as Db
84def write.loop(fuel: Nat, state: WriteState) -> IO(Db.Handle & Result<&1, &1, Db.Error, Unit>):
85 match fuel:
86 case 0n:
87 match state:
88 case WriteNeed{handle, _}:
89 IO.pure(Db.Handle & Result<&1, &1, Db.Error, Unit>,
90 (handle, Fail{Db.ResourceLimit{}}))
91 case WriteBatch{handle, _}:
92 IO.pure(Db.Handle & Result<&1, &1, Db.Error, Unit>,
93 (handle, Fail{Db.ResourceLimit{}}))
94 case WriteResult{pair, _}: IO.pure(Db.Handle & Result<&1, &1, Db.Error, Unit>, pair)
95 case 1n+rest_fuel:
96 match state:
97 case WriteNeed{handle, entries}:
98 match entries:
99 case Nil{}:
100 IO.pure(Db.Handle & Result<&1, &1, Db.Error, Unit>,
101 (handle, Done{Unit{}}))
102 case Con{_, _}:
103 write.loop(rest_fuel, WriteBatch{handle, write.page(entries)})
104 case WriteBatch{handle, WritePage{batch, rest}}:
105 do IO<Db.Handle & Result<&1, &1, Db.Error, Unit>>:
106 pair : Db.Handle & Result<&1, &1, Db.Error, Unit> <-
107 Db.write_batch(handle, write.mutations(batch))
108 write.loop(rest_fuel, WriteResult{pair, rest})
109 case WriteResult{pair, rest}:
110 match pair:
111 case (handle, Fail{error}):
112 IO.pure(Db.Handle & Result<&1, &1, Db.Error, Unit>,
113 (handle, Fail{error}))
114 case (handle, Done{Unit{}}):
115 write.loop(rest_fuel, WriteNeed{handle, rest})