fn seek_to_offset(&mut self, offset: usize) {
        let mut entry = &self.block.data[offset..];
        // Since `get_u16()` will automatically move the ptr 2 bytes ahead here,
        // we don't need to manually advance it
        let overlap_len = entry.get_u16() as usize;
        let key_len = entry.get_u16() as usize;
        let key = &entry[..key_len];
        self.key.clear();
        self.key.append(&self.first_key.key_ref()[..overlap_len]);
        self.key.append(key);
        entry.advance(key_len);
        let ts = entry.get_u64();
        self.key.set_ts(ts);
        let value_len = entry.get_u16() as usize;
        // REMEMBER TO CHANGE THIS every time you change the encoding!
        let value_offset_begin =
            offset + SIZEOF_U16 + SIZEOF_U16 + std::mem::size_of::<u64>() + key_len + SIZEOF_U16;
        let value_offset_end = value_offset_begin + value_len;
        self.value_range = (value_offset_begin, value_offset_end);
        entry.advance(value_len);
    }
Seek to the specified position and update the current `key` and `value`
Index update will be handled by caller
mini-lsm-mvcc/src/block/iterator.rs