1 | #[allow (unused_imports)]
|
2 | use crate::errors::{Error, ErrorKind};
|
3 | use std::fs;
|
4 | use std::io;
|
5 | use std::path::{Path, PathBuf};
|
6 |
|
7 | /// Defines aliases on [`Path`](https://doc.rust-lang.org/std/path/struct.Path.html) for `fs_err` functions.
|
8 | ///
|
9 | /// This trait is sealed and can not be implemented by other crates.
|
10 | //
|
11 | // Because no one else can implement it, we can add methods backwards-compatibly.
|
12 | pub trait PathExt: crate::Sealed {
|
13 | /// Returns Ok(true) if the path points at an existing entity.
|
14 | ///
|
15 | /// Wrapper for [`Path::try_exists`](https://doc.rust-lang.org/std/path/struct.Path.html#method.try_exists).
|
16 | #[cfg (rustc_1_63)]
|
17 | fn fs_err_try_exists(&self) -> io::Result<bool>;
|
18 | /// Given a path, query the file system to get information about a file, directory, etc.
|
19 | ///
|
20 | /// Wrapper for [`crate::metadata`].
|
21 | fn fs_err_metadata(&self) -> io::Result<fs::Metadata>;
|
22 | /// Query the metadata about a file without following symlinks.
|
23 | ///
|
24 | /// Wrapper for [`crate::symlink_metadata`].
|
25 | fn fs_err_symlink_metadata(&self) -> io::Result<fs::Metadata>;
|
26 | /// Returns the canonical, absolute form of a path with all intermediate components
|
27 | /// normalized and symbolic links resolved.
|
28 | ///
|
29 | /// Wrapper for [`crate::canonicalize`].
|
30 | fn fs_err_canonicalize(&self) -> io::Result<PathBuf>;
|
31 | /// Reads a symbolic link, returning the file that the link points to.
|
32 | ///
|
33 | /// Wrapper for [`crate::read_link`].
|
34 | fn fs_err_read_link(&self) -> io::Result<PathBuf>;
|
35 | /// Returns an iterator over the entries within a directory.
|
36 | ///
|
37 | /// Wrapper for [`crate::read_dir`].
|
38 | fn fs_err_read_dir(&self) -> io::Result<crate::ReadDir>;
|
39 | }
|
40 |
|
41 | impl PathExt for Path {
|
42 | #[cfg (rustc_1_63)]
|
43 | fn fs_err_try_exists(&self) -> io::Result<bool> {
|
44 | self.try_exists()
|
45 | .map_err(|source| Error::build(source, ErrorKind::FileExists, self))
|
46 | }
|
47 |
|
48 | fn fs_err_metadata(&self) -> io::Result<fs::Metadata> {
|
49 | crate::metadata(self)
|
50 | }
|
51 |
|
52 | fn fs_err_symlink_metadata(&self) -> io::Result<fs::Metadata> {
|
53 | crate::symlink_metadata(self)
|
54 | }
|
55 |
|
56 | fn fs_err_canonicalize(&self) -> io::Result<PathBuf> {
|
57 | crate::canonicalize(self)
|
58 | }
|
59 |
|
60 | fn fs_err_read_link(&self) -> io::Result<PathBuf> {
|
61 | crate::read_link(self)
|
62 | }
|
63 |
|
64 | fn fs_err_read_dir(&self) -> io::Result<crate::ReadDir> {
|
65 | crate::read_dir(self)
|
66 | }
|
67 | }
|
68 | |