summaryrefslogtreecommitdiff
path: root/src/tutors/fs_tutor_repo.rs
blob: 9b9a8d973d4078c10565264a972f773f7a192b0f (plain) (blame)
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
use crate::tutors::abstractions::tutor_repo::TutorRepo;
use crate::tutors::fs_tutor::FsTutor;
use std::{fs, path::PathBuf};

pub struct FsTutorRepo {
    dir: PathBuf,
}

impl FsTutorRepo {
    pub fn with_dir(path: impl Into<PathBuf>) -> Self {
        Self { dir: path.into() }
    }
}

impl TutorRepo for FsTutorRepo {
    fn load(&self) -> impl IntoIterator<Item = FsTutor> {
        let dirs = fs::read_dir(&self.dir).unwrap();
        dirs.flatten()
            .filter(|d| {
                !d.path()
                    .file_stem()
                    .unwrap()
                    .to_str()
                    .unwrap_or_default()
                    .starts_with('.')
            })
            .map(|d| FsTutor::with_dir(d.path()))
    }
}