1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use crate::fetch::{FetchCancelReason, FetchEngine, FetchProcess, FetchStatus};
use std::collections::HashMap;

#[derive(Default, Clone)]
pub struct MapFetchEngine {
    pub map: HashMap<String, Vec<u8>>,
}

impl MapFetchEngine {
    pub fn new(map: HashMap<String, Vec<u8>>) -> Self {
        Self { map }
    }
}

impl FetchEngine for MapFetchEngine {
    fn fetch(&mut self, path: &str) -> Result<Box<FetchProcess>, FetchStatus> {
        if let Some(bytes) = self.map.get(path) {
            Ok(Box::new(FetchProcess::new_done(bytes.to_vec())))
        } else {
            Err(FetchStatus::Canceled(FetchCancelReason::Error))
        }
    }
}