io_trait/
dir_entry.rs

1use std::{fs, io};
2
3use crate::Metadata;
4
5pub trait DirEntry {
6    type Metadata: Metadata;
7    fn path(&self) -> String;
8    fn metadata(&self) -> io::Result<Self::Metadata>;
9}
10
11impl DirEntry for fs::DirEntry {
12    type Metadata = fs::Metadata;
13    fn path(&self) -> String {
14        self.path().to_str().unwrap().to_string()
15    }
16    fn metadata(&self) -> io::Result<Self::Metadata> {
17        self.metadata()
18    }
19}
20
21#[cfg(test)]
22mod test {
23    use std::fs;
24
25    use crate::DirEntry;
26
27    #[test]
28    fn test() {
29        let x = fs::read_dir(".").unwrap();
30        for i in x {
31            let i = i.unwrap();
32            assert_eq!(DirEntry::path(&i), i.path().to_str().unwrap());
33            assert_eq!(
34                DirEntry::metadata(&i).unwrap().is_dir(),
35                i.metadata().unwrap().is_dir()
36            );
37        }
38    }
39}