1 import Base 2 import ../ByteMemTable.bend as ByteMemTable 3 import ../ByteWal.bend as ByteWal 4 5 # Carries the state for Decision. 6 type Decision is Data: 7 NeedSst{} 8 Missing{} 9 Found{value_bytes: U32} 10 11 # Handles delta. 12 def delta(probe: ByteMemTable.LengthProbe) -> Decision: 13 match probe: 14 case ByteMemTable.LengthAbsent{}: NeedSst{} 15 case ByteMemTable.LengthDeleted{}: Missing{} 16 case ByteMemTable.LengthPresent{value_bytes}: Found{value_bytes} 17 18 # Handles persisted. 19 def persisted(metadata: ByteWal.ValueMetadata) -> Decision: 20 match metadata: 21 case ByteWal.ValueAbsent{}: Missing{} 22 case ByteWal.ValueDeleted{}: Missing{} 23 case ByteWal.ValuePresent{value_bytes}: Found{value_bytes} 24 25 # Handles result. 26 def result( 27 delta: ByteMemTable.LengthProbe, 28 persisted_metadata: ByteWal.ValueMetadata 29 ) -> Decision: 30 match delta: 31 case ByteMemTable.LengthAbsent{}: persisted(persisted_metadata) 32 case ByteMemTable.LengthDeleted{}: Missing{} 33 case ByteMemTable.LengthPresent{value_bytes}: Found{value_bytes}