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
use std::fs::File;

use std::path::Path;






use crate::layers::domain::reader_factory::{ReaderFactory, ReaderContext};

pub struct FileReaderFactory {}

impl ReaderFactory<File> for FileReaderFactory {
    fn make_reader(&self, name: String) -> Result<ReaderContext<File>, String> {
        let file_path = Path::new(&name);

        if !file_path.is_file() {
            return Err(format!("{} is not a file", name).into());
        }

        Ok(ReaderContext {
            source_name: name.clone(),
            reader: std::fs::File::open(file_path).map_err(|e| e.to_string())?
        })
    }
}