diff --git a/README.md b/README.md index 37b9045..52102a5 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Provides injectable Filesystem and Network resources to make code more testable. #### std::fs alternatives -- [ ] `std::fs::canonicalize` - `path(path).canonicalize()` - Returns the canonical, absolute form of a path with all intermediate components normalized and symbolic links resolved. +- [x] `std::fs::canonicalize` - `path(path).canonicalize()` - Returns the canonical, absolute form of a path with all intermediate components normalized and symbolic links resolved. - [ ] `std::fs::copy` - `file(path).copy(target)` - Copies the contents of one file to another. This function will also copy the permission bits of the original file to the destination file. - [x] `std::fs::create_dir` - `dir(path).create()` - Creates a new, empty directory at the provided path - [x] `std::fs::create_dir_all` - `dir(path).create_all()` - Recursively create a directory and all of its parent components if they are missing. diff --git a/src/fs/path.rs b/src/fs/path.rs index 50169d5..814a11c 100644 --- a/src/fs/path.rs +++ b/src/fs/path.rs @@ -201,6 +201,25 @@ impl<'base, 'path, T: PathType> PathReal<'base, 'path, T> { Ok(None) } } + + /// Returns the canonical, absolute form of the path with all intermediate + /// components normalized and symbolic links resolved. + /// + /// ``` + /// # use kxio::fs::Result; + /// # fn main() -> Result<()> { + /// let fs = kxio::fs::temp()?; + /// let path = fs.base().join("foo"); + /// # fs.dir(&path).create()?; + /// let dir = fs.path(&path); + /// let canonical = dir.canonicalize()?; + /// # Ok(()) + /// # } + /// ``` + pub fn canonicalize(&self) -> Result { + self.check_error()?; + self.as_pathbuf().canonicalize().map_err(Error::Io) + } } impl From> for PathBuf { fn from(path: PathReal) -> Self {