def phase_step
mylsm-lsm-store@0.3.2.0 · src/SstFileV2.bend:246
import mylsm-lsm-store@0.3.2.0/src/SstFileV2.bend as SstFileV2
import Base
import mylsm-lsm-store@0.3.2.0/src/Decimal.bend as Decimal
246def phase_step(phase: Phase, +ch: Char) -> Transition:
247 match phase:
248 case NeedS{}:
249 expected_char(Char.is_eq(ch, 'S'), Need2{}, UnknownVersion{})
250 case Need2{}:
251 expected_char(Char.is_eq(ch, '2'), NeedHeaderSemi{}, UnknownVersion{})
252 case NeedHeaderSemi{}:
253 expected_char(Char.is_eq(ch, ';'), ReadLevel{Decimal.Reading{0n, False{}, False{}}}, UnknownVersion{})
254 case ReadLevel{scan}:
255 level_scan(Decimal.scan_step(ch, scan, max_level(), Decimal.Delimited{';'}))
256 case ReadCount{scan}:
257 count_scan(Decimal.scan_step(ch, scan, max_entries(), Decimal.Delimited{';'}))
258 case ReadTag{}:
259 tag_step(ch)
260 case ReadTagSemi{tag}:
261 expected_char(Char.is_eq(ch, ';'), ReadKeyLength{tag, Decimal.Reading{0n, False{}, False{}}}, InvalidEntryTag{})
262 case ReadKeyLength{tag, scan}:
263 key_length_scan(tag, Decimal.scan_step(ch, scan, max_key_chars(), Decimal.Delimited{';'}))
264 case ReadValueLength{key_length, scan}:
265 value_length_scan(key_length, Decimal.scan_step(ch, scan, max_value_chars(), Decimal.Delimited{';'}))
266 case ReadKey{tag, remaining, value_length, reversed}:
267 key_step(tag, remaining, value_length, reversed, ch)
268 case ReadValue{key, remaining, reversed}:
269 value_step(key, remaining, reversed, ch)
270 case NeedHash{}:
271 expected_char(Char.is_eq(ch, '#'), ReadChecksum{SNil{}}, TruncatedChecksum{})
272 case ReadChecksum{reversed}:
273 checksum_step(reversed, ch)