use crate::posts::abstractions::post::Post; use std::{borrow::Cow, fs, path::PathBuf}; #[derive(Debug, Eq)] pub struct FsPost { file: PathBuf, } impl FsPost { pub fn with_path(path: PathBuf) -> Self { Self { file: path } } } impl Post for FsPost { fn get_title(&self) -> &str { self.file.file_stem().unwrap().to_str().unwrap() } fn get_article(&self) -> Cow { let article = fs::read_to_string(&self.file).unwrap(); Cow::Owned(article) } } impl Ord for FsPost { fn cmp(&self, other: &Self) -> std::cmp::Ordering { self.file .metadata() .unwrap() .modified() .unwrap() .cmp(&other.file.metadata().unwrap().modified().unwrap()) } } impl PartialOrd for FsPost { fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } } impl PartialEq for FsPost { fn eq(&self, other: &Self) -> bool { self.get_title() == other.get_title() } }