src/SstFile.bend checks
raw source on the hub · import mylsm-lsm-store@0.4.0.0/src/SstFile.bend as SstFile
7 imports
import Base import ./MemTable.bend as MemTable import ./Keys.bend as Keys import ./Sstable.bend as Sstable import ./StorageBytes.bend as StorageBytes import ./hub_sha/sha256.bend as SHA import bend-kit-bytes@0.3.2.0/bytes.bend as Bytes
Types
type Error source · line 10 · raw
Data
Errors returned by the v3 encoder and strict parser.
InvalidLevelError
InvalidOrderError
TooLargeError
MalformedError
InvalidUtf8Error
ChecksumMismatchError
type Phase source · line 19 · raw
Data
Encoder progression through the header, blocks, and footer.
HeaderPhase
BlocksPhase
FinishedPhase
type EncodedBlock source · line 25 · raw
Type
Serialized block paired with its stored digest.
Block@bytes:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @digest:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> EncodedBlock
type Encoder source · line 29 · raw
Type
State that yields the encoded file in bounded chunks.
Enc@phase:Phase -> @chunks:List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> @level:U32 -> @total:U32 -> @block_count:U32 -> @footer:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> Encoder
type SstHeader source · line 40 · raw
Data
Validated level and counts read from the v3 header.
SstHdr@level:U32 -> @total:U32 -> @block_count:U32 -> SstHeader
type Decoder source · line 45 · raw
Type
Streaming parser stage. A completed stage carries only decoded table state. Bounded chunk accumulator; the final parser rejects aggregate overflow before joining.
Dec@chunks:List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> @total:U32 -> @invalid:Bool -> Decoder
type BlockDecision source · line 49 · raw
Type
Result of applying one validated block to file-level counts.
BlockRejected@error:Error -> BlockDecision
BlockOutOfBoundsBlockDecision
BlockContinue@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @entries_left:U32 -> @previous:Maybe<&2, String> -> @entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @hashes:List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> BlockDecision
BlockFinish@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @hashes:List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> BlockDecision
type BlockMeasure source · line 216 · raw
Data
Result of measuring a record against the target block size.
InvalidRecordBlockMeasure
Measured@length:U32 -> @fits:Bool -> BlockMeasure
type TextRead source · line 542 · raw
Type
Translate the shared strict UTF-8 result into the SST error domain.
Text@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @byte:Maybe<&2, U32> -> TextRead
type ParsedRecord source · line 598 · raw
Type
Parsed mutation paired with its encoded byte length.
Rec@entry:0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry -> @bytes_used:U32 -> ParsedRecord
type ParsedEntries source · line 718 · raw
Type
Parsed entries in reverse order with the last strict-order key.
Entries@reversed:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @previous:Maybe<&2, String> -> ParsedEntries
type RecordRead source · line 722 · raw
Type
Record result annotated with block bounds and key order.
Record@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @result:Result<&1, &1, Error, ParsedRecord> -> @within:Bool -> @ordered:Bool -> @last:Bool -> @complete:Bool -> @key:String -> RecordRead
type RecordDecision source · line 728 · raw
Type
Decision for a record at its declared block position.
Rejected@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @error:Error -> RecordDecision
OutOfBounds@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> RecordDecision
OutOfOrder@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> RecordDecision
LastMalformed@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> RecordDecision
LastRecord@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @entry:0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry -> @key:String -> RecordDecision
MoreRecords@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @entry:0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry -> @key:String -> @used:U32 -> RecordDecision
type HashRead source · line 867 · raw
Type
Cursor state while assembling a fixed-width digest.
HashInput@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @value:Maybe<&2, U32> -> HashRead
type ParsedBlock source · line 871 · raw
Type
Validated records, count, and digest for one block.
ParsedBlock@records:ParsedEntries -> @count:U32 -> @digest:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> ParsedBlock
type StreamState source · line 875 · raw
Type
Represent StreamState data used by the packed SSTable codec.
StreamState@level:U32 -> @total:U32 -> @block_count:U32 -> @remaining:U32 -> @entries_left:U32 -> @previous:Maybe<&2, String> -> @entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @hashes:List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> StreamState
type BlockRead source · line 1121 · raw
Type
Block result paired with its ending cursor.
BlockInput@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @result:Result<&1, &1, Error, ParsedBlock> -> BlockRead
Definitions
def bytes.clone.pair source · line 58 · raw
@+len:U32 -> @copied:Pair(Array<U32>, Array<U32>) -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes)
def bytes.clone.split source · line 66 · raw
@bytes:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes)
def bytes.clone.first source · line 71 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes) -> 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes
def bytes.clone source · line 76 · raw
@bytes:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes
def u32_bytes source · line 80 · raw
@value:U32 -> 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes
Construct a packed u32 in network byte order.
def u8_bytes source · line 84 · raw
@value:U32 -> 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes
Construct a packed tag byte.
def hex_bytes.fin source · line 88 · raw
@value:Maybe<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes
Unwrap a fixed valid hexadecimal constant.
def record.value.finish.checked source · line 96 · raw
@key_bytes:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @+key_len:U32 -> @value_bytes:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @+value_len:U32 -> @valid:Bool -> Result<&1, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>
Encode one mutation as a tagged, length-delimited record.
def record.value.finish.valid source · line 110 · raw
@key_bytes:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @+key_len:U32 -> @value_bytes:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @+value_len:U32 -> @key_fits:Bool -> Result<&1, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>
def record.value.finish.val source · line 124 · raw
@key_bytes:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @+key_len:U32 -> @value_pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes, U32) -> Result<&1, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>
def record.value.finish source · line 134 · raw
@key_pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes, U32) -> @value_pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes, U32) -> Result<&1, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>
def record.value.fin source · line 142 · raw
@key_pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes, U32) -> @result:Result<&1, &1, Pair(U32, String), 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> Result<&1, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>
def record.value source · line 152 · raw
@key_bytes:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @value_result:Result<&1, &1, Pair(U32, String), 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> Result<&1, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>
def record.key.delete.checked source · line 158 · raw
@key_bytes:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @+key_len:U32 -> @valid:Bool -> Result<&1, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>
def record.key.delete source · line 169 · raw
@key_pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes, U32) -> Result<&1, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>
def record.key source · line 175 · raw
@key_result:Result<&1, &1, Pair(U32, String), 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> @val:Maybe<&2, String> -> Result<&1, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>
def encode_record source · line 188 · raw
@entry:0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry -> Result<&1, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>
Encode one checked put or delete record.
def entries.strict.tail source · line 193 · raw
@tail:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @current:String -> @ordered:Bool -> Bool
def entries.strict source · line 208 · raw
@entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> Bool
def blocks.measure.length source · line 221 · raw
@+length:U32 -> @+size:U32 -> BlockMeasure
Measure an already encoded record for byte-bounded block packing.
def blocks.measure.valid source · line 225 · raw
@length:U32 -> @+size:U32 -> @valid:Bool -> BlockMeasure
def blocks.measure.delete source · line 232 · raw
@key_length:Maybe<&2, U32> -> @+size:U32 -> BlockMeasure
def blocks.measure.put.value source · line 240 · raw
@+key_length:U32 -> @value_length:Maybe<&2, U32> -> @+size:U32 -> BlockMeasure
def blocks.measure.put source · line 253 · raw
@key_length:Maybe<&2, U32> -> @value_length:Maybe<&2, U32> -> @+size:U32 -> BlockMeasure
def blocks.measure.entry source · line 264 · raw
@entry:0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry -> @+size:U32 -> BlockMeasure
def blocks.measure.next source · line 274 · raw
@entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @+size:U32 -> BlockMeasure
def blocks.pack.finish source · line 285 · raw
@current:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @acc:List<&2, List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry>> -> List<&2, List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry>>
Finish the current block list, which is stored in reverse order.
def blocks.pack.go source · line 297 · raw
@entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @current:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @+size:U32 -> @acc:List<&2, List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry>> -> @measured:BlockMeasure -> List<&2, List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry>>
Pack records into blocks capped by encoded payload bytes, preserving order.
def blocks.pack source · line 331 · raw
@entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> List<&2, List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry>>
def records.step source · line 340 · raw
@rest:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @current:Result<&1, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> @acc:List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> Result<&1, &1, Error, List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>>
Continue encoding a record list after the current record has been checked.
def records source · line 356 · raw
@entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> Result<&1, &1, Error, List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>>
Encode each entry independently, retaining only the record fragments for one block.
def block.fin.digest.parts source · line 364 · raw
@+count:U32 -> @payload:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @+payload_len:U32 -> @pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes) -> EncodedBlock
Build one v3 block and its digest over the two header words and payload.
def block.fin.digest source · line 375 · raw
@+count:U32 -> @pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes) -> @payload:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @+payload_len:U32 -> EncodedBlock
def block.fin.payload source · line 385 · raw
@+count:U32 -> @+payload_len:U32 -> @pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes) -> EncodedBlock
def block.fin source · line 396 · raw
@+count:U32 -> @+payload_len:U32 -> @payload:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> EncodedBlock
def block.payload.check source · line 403 · raw
@+count:U32 -> @+payload_len:U32 -> @payload:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @within:Bool -> Result<&1, &1, Error, EncodedBlock>
def block.payload.total source · line 415 · raw
@+count:U32 -> @payload_pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes, U32) -> Result<&1, &1, Error, EncodedBlock>
def block.payload source · line 425 · raw
@count:U32 -> @result:Result<&1, &1, Error, List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>> -> Result<&1, &1, Error, EncodedBlock>
def encode_block source · line 436 · raw
@+entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> Result<&1, &1, Error, EncodedBlock>
Encode records and compute the block digest.
def blocks.prepare.step source · line 440 · raw
@rest:List<&2, List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry>> -> @current:Result<&1, &1, Error, EncodedBlock> -> @blocks:List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> @digests:List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> Result<&1, &1, Error, Pair(List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>, List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>)>
Store a block digest and continue with the remaining blocks.
def blocks.prepare source · line 457 · raw
@+chunks:List<&2, List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry>> -> Result<&1, &1, Error, Pair(List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>, List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>)>
def header_bytes source · line 467 · raw
@+level:U32 -> @+total:U32 -> @+block_count:U32 -> 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes
Encode fixed-width v3 header fields in network byte order.
def encoder.build source · line 476 · raw
@+entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @+level:U32 -> @+block_count:U32 -> @prepared:Result<&1, &1, Error, Pair(List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>, List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>)> -> Result<&1, &1, Error, Encoder>
Propagate the block-summary result into an encoder header and footer.
def new_encoder.ready source · line 492 · raw
@+entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @+level:U32 -> @+chunks:List<&2, List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry>> -> Result<&1, &1, Error, Encoder>
Create an encoder only for supported levels and bounded records.
def new_encoder.order source · line 500 · raw
@+entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @+level:U32 -> @ordered:Bool -> Result<&1, &1, Error, Encoder>
def new_encoder.valid source · line 511 · raw
@+entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @+level:U32 -> @valid:Bool -> Result<&1, &1, Error, Encoder>
def new_encoder source · line 523 · raw
@+entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @+level:U32 -> Result<&1, &1, Error, Encoder>
Validate input order and level before encoding.
def next_chunk source · line 530 · raw
@encoder:Encoder -> Pair(Encoder, Maybe<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>)
Yield the next serialized part and advance encoder state.
def parse.text.wrap source · line 545 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Maybe<&2, U32>) -> TextRead
def parse.text.finish source · line 550 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @result:Result<&1, &1, Pair(U32, String), String> -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, String>)
def parse.text.go source · line 561 · raw
@remaining:Nat -> @read:TextRead -> @state:0x571fd57004366c423dfd4b51196743b5/src/StorageBytes.Utf8State -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, String>)
Read exactly n UTF-8 bytes from a bounded cursor without materializing a slice.
def parse.text.start source · line 578 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @+length:U32 -> @empty:Bool -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, String>)
def parse.text source · line 591 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @+length:U32 -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, String>)
def parse.record.value.decoded source · line 602 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, String>) -> @+key_len:U32 -> @+key:String -> @+value_len:U32 -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedRecord>)
Decode one length-delimited key and optional value from the cursor.
def parse.record.value.length.checked source · line 615 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @+key_len:U32 -> @+key:String -> @+value_len:U32 -> @valid:Bool -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedRecord>)
def parse.record.value.length source · line 629 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Maybe<&2, U32>) -> @+key_len:U32 -> @+key:String -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedRecord>)
def parse.record.key.ready source · line 641 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @tag:U32 -> @+key_len:U32 -> @+key:String -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedRecord>)
def parse.record.key.decoded source · line 655 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, String>) -> @tag:U32 -> @+key_len:U32 -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedRecord>)
def parse.record.key.limit source · line 666 · raw
@tag:U32 -> @+key_len:U32 -> Bool
def parse.record.key.length.checked source · line 676 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @tag:U32 -> @+key_len:U32 -> @valid:Bool -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedRecord>)
def parse.record.key.length source · line 688 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Maybe<&2, U32>) -> @+tag:U32 -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedRecord>)
def parse.record.tag source · line 699 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Maybe<&2, U32>) -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedRecord>)
def parse.record source · line 712 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedRecord>)
def parse.entries.ordered source · line 736 · raw
@previous:Maybe<&2, String> -> @+key:String -> Bool
def parse.record.read.entry source · line 746 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @+entry:0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry -> @+bytes_used:U32 -> @+payload_left:U32 -> @previous:Maybe<&2, String> -> @last:Bool -> RecordRead
def parse.record.read.pair source · line 760 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedRecord>) -> @payload_left:U32 -> @previous:Maybe<&2, String> -> @last:Bool -> RecordRead
def parse.record.read source · line 772 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @+payload_left:U32 -> @previous:Maybe<&2, String> -> @last:Bool -> RecordRead
def parse.records.decision source · line 780 · raw
@read:RecordRead -> RecordDecision
def parse.records.empty source · line 796 · raw
@decision:RecordDecision -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedEntries>)
Parse a counted sequence and enforce block boundaries and strict key order.
def parse.records.go source · line 813 · raw
@remaining:Nat -> @decision:RecordDecision -> @+payload_left:U32 -> @acc:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedEntries>)
def parse.records.zero source · line 841 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @previous:Maybe<&2, String> -> @empty:Bool -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedEntries>)
def parse.records.start source · line 852 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @+count:U32 -> @+payload_len:U32 -> @previous:Maybe<&2, String> -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedEntries>)
def parse.hash.wrap source · line 881 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Maybe<&2, U32>) -> HashRead
def parse.hash.result source · line 886 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>) -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>)
def parse.hash.words.go source · line 892 · raw
@remaining:Nat -> @read:HashRead -> @digest:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @+offset:U32 -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>)
Read exactly eight words into a digest without consuming a byte after it.
def parse.hash.words source · line 909 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>)
def parse.block.verify.equal source · line 914 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @records:ParsedEntries -> @+count:U32 -> @comparison:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes, Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes, Bool)) -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedBlock>)
def parse.block.verify.copy source · line 926 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes) -> @+pos:U32 -> @+start:U32 -> @+end:U32 -> @records:ParsedEntries -> @+count:U32 -> @claimed:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedBlock>)
def parse.block.verify source · line 940 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @records:ParsedEntries -> @+payload_len:U32 -> @+count:U32 -> @claimed:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedBlock>)
def parse.block.digest source · line 953 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>) -> @records:ParsedEntries -> @+payload_len:U32 -> @+count:U32 -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedBlock>)
def parse.block.records source · line 965 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedEntries>) -> @+payload_len:U32 -> @+count:U32 -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedBlock>)
def parse.block.count.valid source · line 976 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @+payload_len:U32 -> @+count:U32 -> @previous:Maybe<&2, String> -> @valid:Bool -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedBlock>)
def parse.block.count source · line 990 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Maybe<&2, U32>) -> @+payload_len:U32 -> @previous:Maybe<&2, String> -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedBlock>)
def parse.block.length source · line 1003 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Maybe<&2, U32>) -> @previous:Maybe<&2, String> -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedBlock>)
def parse.block source · line 1014 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @previous:Maybe<&2, String> -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedBlock>)
Parse, bound, and authenticate one complete SST block.
def parse.block.read source · line 1124 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedBlock>) -> BlockRead
def parse.blocks.count.valid.last source · line 1129 · raw
@last:Bool -> @+entries_left:U32 -> @+count:U32 -> Bool
def parse.blocks.count.valid source · line 1140 · raw
@+remaining:Nat -> @+entries_left:U32 -> @+count:U32 -> Bool
def parse.blocks.accumulate.records.last source · line 1147 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @+entries_left:U32 -> @entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @hashes:List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> @reversed:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @previous:Maybe<&2, String> -> @last:Bool -> BlockDecision
def parse.blocks.accumulate.records source · line 1163 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @+remaining:Nat -> @+entries_left:U32 -> @entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @hashes:List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> @records:ParsedEntries -> BlockDecision
def parse.blocks.content.valid source · line 1176 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @+remaining:Nat -> @+entries_left:U32 -> @entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @hashes:List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> @+count:U32 -> @records:ParsedEntries -> @digest:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @valid:Bool -> BlockDecision
def parse.blocks.content.fit source · line 1194 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @+remaining:Nat -> @+entries_left:U32 -> @entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @hashes:List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> @+count:U32 -> @records:ParsedEntries -> @digest:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @fits:Bool -> BlockDecision
def parse.blocks.content source · line 1213 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @+remaining:Nat -> @+entries_left:U32 -> @entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @hashes:List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> @block:ParsedBlock -> BlockDecision
def parse.blocks.decision source · line 1226 · raw
@read:BlockRead -> @+remaining:Nat -> @+entries_left:U32 -> @entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @hashes:List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> BlockDecision
def parse.blocks.go source · line 1240 · raw
@remaining:Nat -> @decision:BlockDecision -> @+level:U32 -> @+total:U32 -> @+block_count:U32 -> Result<&1, &1, Error, 0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table>
def parse.blocks.start source · line 1266 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @valid:Bool -> @+count:U32 -> @+total:U32 -> @+level:U32 -> Result<&1, &1, Error, 0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table>
def stream.block.records source · line 1288 · raw
@+level:U32 -> @+total:U32 -> @+block_count:U32 -> @+remaining:U32 -> @+entries_left:U32 -> @entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @hashes:List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> @records:ParsedEntries -> @+count:U32 -> @digest:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> Result<&1, &1, Error, StreamState>
def stream.block.count source · line 1307 · raw
@+level:U32 -> @+total:U32 -> @+block_count:U32 -> @+remaining:U32 -> @+entries_left:U32 -> @entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @hashes:List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> @records:ParsedEntries -> @+count:U32 -> @digest:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @valid:Bool -> Result<&1, &1, Error, StreamState>
def stream.block.valid source · line 1327 · raw
@state:StreamState -> @records:ParsedEntries -> @+count:U32 -> @digest:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @exact:Bool -> Result<&1, &1, Error, StreamState>
def stream.block.complete source · line 1341 · raw
@state:StreamState -> @block:ParsedBlock -> @exact:Bool -> Result<&1, &1, Error, StreamState>
def stream.block.consumed source · line 1350 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, U32) -> @state:StreamState -> @block:ParsedBlock -> Result<&1, &1, Error, StreamState>
def stream.block.result source · line 1359 · raw
@state:StreamState -> @pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, ParsedBlock>) -> Result<&1, &1, Error, StreamState>
def stream.block source · line 1369 · raw
@state:StreamState -> @bytes:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> Result<&1, &1, Error, StreamState>
def stream.block.tail.size source · line 1389 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Maybe<&2, U32>) -> @+payload_len:U32 -> Maybe<&2, U32>
def stream.block.tail source · line 1403 · raw
@cursor:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Maybe<&2, U32>) -> Maybe<&2, U32>
def stream.block.tail_size source · line 1410 · raw
@bytes:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> Maybe<&2, U32>
def parse.header.blocks.valid source · line 1413 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @+level:U32 -> @+total:U32 -> @+count:U32 -> @valid:Bool -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, SstHeader>)
def parse.header.blocks source · line 1426 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Maybe<&2, U32>) -> @+level:U32 -> @+total:U32 -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, SstHeader>)
def parse.header.total source · line 1439 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Maybe<&2, U32>) -> @+level:U32 -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, SstHeader>)
def parse.header.level.checked source · line 1449 · raw
@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @+level:U32 -> @valid:Bool -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, SstHeader>)
def parse.header.level source · line 1460 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Maybe<&2, U32>) -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, SstHeader>)
def parse.header.magic.two source · line 1469 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Maybe<&2, U32>) -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, SstHeader>)
def parse.header.magic.one source · line 1478 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Maybe<&2, U32>) -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, SstHeader>)
def stream.header.remaining source · line 1487 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, U32) -> @+level:U32 -> @+total:U32 -> @+block_count:U32 -> Result<&1, &1, Error, StreamState>
def stream.header.done source · line 1500 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, SstHeader>) -> Result<&1, &1, Error, StreamState>
def stream.header source · line 1509 · raw
@bytes:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> Result<&1, &1, Error, StreamState>
def new_decoder source · line 1514 · raw
Decoder
Retain bounded file chunks until the strict parser is applied.
def feed.chunk.add source · line 1517 · raw
@chunks:List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> @+total:U32 -> @invalid:Bool -> @chunk:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @checked:Maybe<&2, U32> -> Decoder
def feed.chunk.result source · line 1530 · raw
@chunks:List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> @+total:U32 -> @invalid:Bool -> @pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes, U32) -> Decoder
def feed.chunk source · line 1540 · raw
@decoder:Decoder -> @pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes, U32) -> Decoder
def feed.if.valid source · line 1545 · raw
@invalid:Bool -> @chunks:List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> @total:U32 -> @chunk:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> Decoder
def feed source · line 1558 · raw
@decoder:Decoder -> @chunk:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> Decoder
Buffer streaming chunks until the bounded pure parser is applied.
def parse.file.header source · line 1563 · raw
@pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Result<&1, &1, Error, SstHeader>) -> Result<&1, &1, Error, 0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table>
def parse.file source · line 1572 · raw
@bytes:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> Result<&1, &1, Error, 0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table>
def finish.concat.check source · line 1576 · raw
@bytes:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @valid:Bool -> Result<&1, &1, Error, 0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table>
def finish.concat.pair source · line 1586 · raw
@+total:U32 -> @pair:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes, U32) -> Result<&1, &1, Error, 0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table>
def finish.concat source · line 1594 · raw
@+total:U32 -> @bytes:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> Result<&1, &1, Error, 0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table>
def finish source · line 1601 · raw
@decoder:Decoder -> Result<&1, &1, Error, 0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table>
Parse and authenticate the complete accumulated SST file.
def encode.chunks source · line 1610 · raw
@fuel:Nat -> @pair:Pair(Encoder, Maybe<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>) -> @acc:List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> Result<&1, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>
Pure whole-file encoder for fixtures and small in-memory callers. Production persistence uses next_chunk directly and never joins the complete file.
def encode.ready source · line 1625 · raw
@+entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @result:Result<&1, &1, Error, Encoder> -> Result<&1, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>
def encode_file source · line 1636 · raw
@+entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @+level:U32 -> Result<&1, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>
Encode one complete table for small in-memory callers and fixtures.
def parse source · line 1643 · raw
@bytes:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> Result<&1, &1, Error, 0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table>
Parse packed bytes into a validated immutable SST table.
def is_decided source · line 1647 · raw
@_result:Result<&1, &1, Error, 0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table> -> Bool
Return true because the parser always returns an explicit Result value.