(data: &'a [u8], pos: &mut usize)
| 22 | const SUPPORTED_PAYLOAD_VERSION: u8 = 1; |
| 23 | |
| 24 | fn read_framed<'a>(data: &'a [u8], pos: &mut usize) -> ArrayResult<&'a [u8]> { |
| 25 | if *pos + 4 > data.len() { |
| 26 | return Err(ArrayError::SegmentCorruption { |
| 27 | detail: "framed block: truncated length".into(), |
| 28 | }); |
| 29 | } |
| 30 | let len = u32::from_le_bytes( |
| 31 | data[*pos..*pos + 4] |
| 32 | .try_into() |
| 33 | .expect("invariant: bounds-checked above (*pos + 4 <= data.len())"), |
| 34 | ) as usize; |
| 35 | *pos += 4; |
| 36 | if *pos + len > data.len() { |
| 37 | return Err(ArrayError::SegmentCorruption { |
| 38 | detail: format!( |
| 39 | "framed block: body truncated (need {len}, have {})", |
| 40 | data.len() - *pos |
| 41 | ), |
| 42 | }); |
| 43 | } |
| 44 | let slice = &data[*pos..*pos + len]; |
| 45 | *pos += len; |
| 46 | Ok(slice) |
| 47 | } |
| 48 | |
| 49 | /// Decode a tile payload previously written by `encode_sparse_tile`. |
| 50 | /// |
no test coverage detected