1use crate::{Error, Result};
4use std::{
5 collections::BTreeMap,
6 ops::{Deref, DerefMut},
7};
8
9#[derive(Default, Clone, Debug)]
13pub struct Data(BTreeMap<i32, Vec<u8>>);
14
15impl Data {
16 pub fn load(&self, offset: i32, size: usize) -> Result<Vec<u8>> {
18 for ptr in self.0.keys().cloned().rev() {
19 if offset >= ptr {
20 let start = (offset - ptr) as usize;
21 let data = self.get(&ptr).ok_or(Error::DataNotFound(offset, size))?;
22
23 return Ok(data[start..start + size].to_vec());
24 }
25 }
26
27 Err(Error::DataNotFound(offset, size))
28 }
29}
30
31impl Deref for Data {
32 type Target = BTreeMap<i32, Vec<u8>>;
33
34 fn deref(&self) -> &Self::Target {
35 &self.0
36 }
37}
38
39impl DerefMut for Data {
40 fn deref_mut(&mut self) -> &mut Self::Target {
41 &mut self.0
42 }
43}