summaryrefslogtreecommitdiff
path: root/src/tutors/fs_tutor_repo.rs
diff options
context:
space:
mode:
authorAdam T. Carpenter <atc@53hor.net>2024-11-14 21:49:47 -0500
committerAdam T. Carpenter <atc@53hor.net>2024-11-14 21:49:47 -0500
commit4aa45ef3e7798ee18bea8b49af75e383afce02a1 (patch)
tree7a1353753d9300929b43a561ff2f1aae59b6434f /src/tutors/fs_tutor_repo.rs
parent014e34fa4a8cd4e3cdb3573a7748696c68873523 (diff)
parentfc0e8296178ca779a270d91b681777f50b3b626d (diff)
downloadcarpentertutoring-4aa45ef3e7798ee18bea8b49af75e383afce02a1.tar.xz
carpentertutoring-4aa45ef3e7798ee18bea8b49af75e383afce02a1.zip
Merge branch 'release'HEADmaster
Diffstat (limited to 'src/tutors/fs_tutor_repo.rs')
-rw-r--r--src/tutors/fs_tutor_repo.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/tutors/fs_tutor_repo.rs b/src/tutors/fs_tutor_repo.rs
new file mode 100644
index 0000000..9b9a8d9
--- /dev/null
+++ b/src/tutors/fs_tutor_repo.rs
@@ -0,0 +1,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()))
+ }
+}