#[allow(unused_imports)] use crate::errors::{Error, ErrorKind}; use std::fs; use std::io; use std::path::{Path, PathBuf}; /// Defines aliases on [`Path`](https://doc.rust-lang.org/std/path/struct.Path.html) for `fs_err` functions. /// /// This trait is sealed and can not be implemented by other crates. // // Because no one else can implement it, we can add methods backwards-compatibly. pub trait PathExt: crate::Sealed { /// Returns Ok(true) if the path points at an existing entity. /// /// Wrapper for [`Path::try_exists`](https://doc.rust-lang.org/std/path/struct.Path.html#method.try_exists). #[cfg(rustc_1_63)] fn fs_err_try_exists(&self) -> io::Result; /// Given a path, query the file system to get information about a file, directory, etc. /// /// Wrapper for [`crate::metadata`]. fn fs_err_metadata(&self) -> io::Result; /// Query the metadata about a file without following symlinks. /// /// Wrapper for [`crate::symlink_metadata`]. fn fs_err_symlink_metadata(&self) -> io::Result; /// Returns the canonical, absolute form of a path with all intermediate components /// normalized and symbolic links resolved. /// /// Wrapper for [`crate::canonicalize`]. fn fs_err_canonicalize(&self) -> io::Result; /// Reads a symbolic link, returning the file that the link points to. /// /// Wrapper for [`crate::read_link`]. fn fs_err_read_link(&self) -> io::Result; /// Returns an iterator over the entries within a directory. /// /// Wrapper for [`crate::read_dir`]. fn fs_err_read_dir(&self) -> io::Result; } impl PathExt for Path { #[cfg(rustc_1_63)] fn fs_err_try_exists(&self) -> io::Result { self.try_exists() .map_err(|source| Error::build(source, ErrorKind::FileExists, self)) } fn fs_err_metadata(&self) -> io::Result { crate::metadata(self) } fn fs_err_symlink_metadata(&self) -> io::Result { crate::symlink_metadata(self) } fn fs_err_canonicalize(&self) -> io::Result { crate::canonicalize(self) } fn fs_err_read_link(&self) -> io::Result { crate::read_link(self) } fn fs_err_read_dir(&self) -> io::Result { crate::read_dir(self) } }