1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
use std::{
    io::{
        Read,
        Result,
    }
};

#[derive(Debug)]
pub struct Memory {
    pub buffer: Vec<u8>,
}

impl Read for Memory {
    fn read(&mut self, buf: &mut [u8]) -> Result<usize> {
        let len = buf.len();

        if len == 0 {
            Ok(0)
        } else if len > self.buffer.len() {
            // TODO: is this the way that is supposed to read the data?
            let mut buffer = vec![0; len];

            for (i, v) in self.buffer.iter().enumerate() {
                buffer[i] = *v;
            }

            buf.copy_from_slice(&buffer[0..len]);
            Ok(len)
        } else {
            buf.copy_from_slice(&self.buffer[0..len]);
            Ok(len)
        }
    }
}