ByteSstIo.validate.loop: def of mylsm-lsm-store@0.6.0.1 Import: import mylsm-lsm-store@0.6.0.1/src/ByteSstIo.bend as ByteSstIo Lines 91-137 of mylsm-lsm-store@0.6.0.1/src/ByteSstIo.bend: https://jend.leeeet.dev/read.txt?path=mylsm-lsm-store@0.6.0.1/src/ByteSstIo.bend&start_line=91&end_line=137 import Base import mylsm-lsm-store@0.6.0.1/src/scan/ByteBlockReader.bend as ByteBlockReader # Advances full-file validation without retaining decoded SST entries. def validate.loop( fuel: Nat, state: ValidationState ) -> IO(Result<&1, &1, U32 & String, ByteBlockReader.Metadata>): match fuel: case 0n: match state: case ValidateNeed{reader, _}: do IO>: _closed : Result<&1, &1, U32 & String, Unit> <- ByteBlockReader.close(reader) return Fail{corruption("byte SST validation exceeded its block budget")} case ValidatePage{reader, _, _}: do IO>: _closed : Result<&1, &1, U32 & String, Unit> <- ByteBlockReader.close(reader) return Fail{corruption("byte SST validation exceeded its block budget")} case ValidateStep{result, _}: match result: case Done{ByteBlockReader.Block{reader, _}}: do IO>: _closed : Result<&1, &1, U32 & String, Unit> <- ByteBlockReader.close(reader) return Fail{corruption("byte SST validation exceeded its block budget")} case Fail{error}: IO.pure(Result<&1, &1, U32 & String, ByteBlockReader.Metadata>, Fail{error}) case _: IO.pure( Result<&1, &1, U32 & String, ByteBlockReader.Metadata>, Fail{corruption("byte SST validation exhausted its transition limit")}) case 1n+rest: match state: case ValidateNeed{reader, metadata}: do IO>: result : Result<&1, &1, U32 & String, ByteBlockReader.Step> <- ByteBlockReader.next(reader) validate.loop(rest, ValidateStep{result, metadata}) case ValidatePage{reader, metadata, entries}: validate.loop(rest, ValidateNeed{reader, validate.page(entries, metadata)}) case ValidateStep{result, metadata}: match result: case Fail{error}: IO.pure(Result<&1, &1, U32 & String, ByteBlockReader.Metadata>, Fail{error}) case Done{ByteBlockReader.End{}}: IO.pure(Result<&1, &1, U32 & String, ByteBlockReader.Metadata>, Done{metadata}) case Done{ByteBlockReader.Block{reader, entries}}: validate.loop(rest, ValidatePage{reader, metadata, entries}) Uses (16): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=IO https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=IO.bind https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=IO.pure https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Pair https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Result https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=String https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=U32 https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Unit https://jend.leeeet.dev/definition.txt?path=mylsm-lsm-store@0.6.0.1/src/ByteSstIo.bend&name=ValidationState https://jend.leeeet.dev/definition.txt?path=mylsm-lsm-store@0.6.0.1/src/ByteSstIo.bend&name=corruption https://jend.leeeet.dev/definition.txt?path=mylsm-lsm-store@0.6.0.1/src/ByteSstIo.bend&name=validate.page https://jend.leeeet.dev/definition.txt?path=mylsm-lsm-store@0.6.0.1/src/scan/ByteBlockReader.bend&name=Metadata https://jend.leeeet.dev/definition.txt?path=mylsm-lsm-store@0.6.0.1/src/scan/ByteBlockReader.bend&name=Step https://jend.leeeet.dev/definition.txt?path=mylsm-lsm-store@0.6.0.1/src/scan/ByteBlockReader.bend&name=close https://jend.leeeet.dev/definition.txt?path=mylsm-lsm-store@0.6.0.1/src/scan/ByteBlockReader.bend&name=next