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}