| 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 | |