def loop
mylsm-lsm-store@0.6.0.1 · src/transfer/BackupOwnerCursorIo.bend:226
import mylsm-lsm-store@0.6.0.1/src/transfer/BackupOwnerCursorIo.bend as BackupOwnerCursorIo
import Base
import mylsm-lsm-store@0.6.0.1/src/Fs.bend as Fs
import mylsm-lsm-store@0.6.0.1/src/transfer/BackupCursor.bend as BackupCursor
import mylsm-lsm-store@0.6.0.1/src/transfer/BackupIo.bend as BackupIo
import mylsm-lsm-store@0.6.0.1/src/transfer/Backup.bend as Backup
226
227def loop(
228 fuel: Nat,
229 +destination: String,
230 +temporary: String,
231 state: State
232) -> IO(Result<&1, &1, BackupIo.Error, Unit>):
233 match fuel:
234 case 0n: loop.abort(temporary, state)
235 case 1n+rest:
236 match state:
237 case Need{file, source, stream}:
238 do IO<Result<&1, &1, BackupIo.Error, Unit>>:
239 advanced : State <- source.step(source, stream, file)
240 loop(rest, destination, temporary, advanced)
241 case Output{file, source, step}:
242 match step:
243 case BackupCursor.Failure{_, error}:
244 close.failed.source(file, temporary, source, error)
245 case BackupCursor.Continue{stream}:
246 loop(rest, destination, temporary, Need{file, source, stream})
247 case BackupCursor.Chunk{stream, bytes}:
248 do IO<Result<&1, &1, BackupIo.Error, Unit>>:
249 written : File & Result<&1, &1, U32 & String, Unit> <-
250 Fs.write_bytes(file, bytes)
251 loop(rest, destination, temporary,
252 Written{written, source, stream})
253 case BackupCursor.End{}:
254 close.success(destination, temporary, file, source)
255 case Written{pair, source, stream}:
256 match pair:
257 case (file, Fail{(code, message)}):
258 close.failed.source(file, temporary, source,
259 Backup.SourceFailure{code, message})
260 case (file, Done{Unit{}}):
261 loop(rest, destination, temporary, Need{file, source, stream})