1use std::fs::{self, Metadata};
2use std::io::Result as IoResult;
3use std::path::{Path, PathBuf};
4
5use super::{File, Filesystem};
6
7#[derive(Default)]
8pub struct StdFilesystem;
9
10impl Filesystem for StdFilesystem {
11 type File = fs::File;
12
13 fn create_dir<P: AsRef<Path>>(&self, path: P) -> IoResult<()> {
14 fs::create_dir(path)
15 }
16
17 fn create_dir_all<P: AsRef<Path>>(&self, path: P) -> IoResult<()> {
18 fs::create_dir_all(path)
19 }
20
21 fn rename<P: AsRef<Path>, Q: AsRef<Path>>(
22 &self,
23 from: P,
24 to: Q,
25 ) -> IoResult<()> {
26 fs::rename(from, to)
27 }
28
29 fn remove_file<P: AsRef<Path>>(&self, path: P) -> IoResult<()> {
30 fs::remove_file(path)
31 }
32
33 fn remove_dir_all<P: AsRef<Path>>(&self, path: P) -> IoResult<()> {
34 fs::remove_dir_all(path)
35 }
36
37 fn read_link<P: AsRef<Path>>(&self, path: P) -> IoResult<PathBuf> {
38 fs::read_link(path)
39 }
40
41 fn path_metadata<P: AsRef<Path>>(&self, path: P) -> IoResult<Metadata> {
42 fs::metadata(path)
43 }
44
45 fn symlink_metadata<P: AsRef<Path>>(&self, path: P) -> IoResult<Metadata> {
46 fs::symlink_metadata(path)
47 }
48
49 fn file_metadata(&self, file: &Self::File) -> IoResult<Metadata> {
50 file.metadata()
51 }
52
53 fn path_exists<P: AsRef<Path>>(&self, path: P) -> IoResult<bool> {
54 Ok(path.as_ref().exists())
55 }
56
57 fn open_file<P: AsRef<Path>>(&self, path: P) -> IoResult<Self::File> {
58 fs::File::open(path)
59 }
60
61 fn create_file<P: AsRef<Path>>(&self, path: P) -> IoResult<Self::File> {
62 fs::File::create(path)
63 }
64}
65
66impl File for fs::File {}