1. let data = decompress(&mut rem, None)?;
  2. for rep in ib.reps {
  3. let mut slice = &data[rep.payload_offset as usize..rep.payload_size as usize];
  4. let mut base_phase = false;
  5. let mut bases = Vec::<String>::new();
  6. while !slice.is_empty() {
  7. // TODO: proper parsing
  8. let cmd = u32::from_le_bytes(slice[..4].try_into().unwrap());
  9. slice = &slice[4..];
  10. dbg!(cmd);
  11. if cmd == 0 {
  12. base_phase = !base_phase;
  13. if base_phase {
  14. bases.clear();
  15. }
  16. continue;
  17. }
  18. // let i = slice.iter().position(|&b| b == 0).unwrap_or(slice.len());
  19. let i = slice.iter().position(|&b| b == 0).unwrap();
  20. // dbg!(i, &slice[..i]);
  21. let s = std::str::from_utf8(&slice[..i]).unwrap(); // TODO
  22. // dbg!(i, s);
  23. slice = &slice[i + 1..];
  24. let s = if let Some(val) = bases.get(cmd as usize - 1) {
  25. val.clone() + s
  26. } else {
  27. s.to_owned()
  28. };
  29. if base_phase {
  30. bases.push(s);
  31. dbg!(&bases);
  32. } else {
  33. dbg!(s);
  34. }
  35. }
  36. }