use crate::tutors::abstractions::tutor::Tutor; use std::{borrow::Cow, cmp::Ordering, fs, path::PathBuf}; #[derive(Debug, Eq)] pub struct FsTutor { dir: PathBuf, } impl FsTutor { pub fn with_dir(path: PathBuf) -> Self { Self { dir: path } } } impl Tutor for FsTutor { fn get_id(&self) -> &str { self.dir.file_name().unwrap().to_str().unwrap() } fn get_name(&self) -> &str { self.get_id() } fn get_blurb(&self) -> Cow { let mut path = self.dir.to_owned(); path.push(format!("{}.md", self.get_id())); let blurb = fs::read_to_string(path).unwrap(); Cow::Owned(blurb) } } impl Ord for FsTutor { fn cmp(&self, other: &Self) -> Ordering { self.get_id().cmp(other.get_id()) } } impl PartialOrd for FsTutor { fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } } impl PartialEq for FsTutor { fn eq(&self, other: &Self) -> bool { self.get_id() == other.get_id() } }