diff --git a/src/lib.rs b/src/lib.rs index c893225..b61289d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -502,14 +502,26 @@ pub trait PathExt { } } -impl PathExt for Path { - fn access(&self, mode: AccessMode) -> io::Result<()> { - imp::access(self, mode) +impl

PathExt for P +where + P: AsRef, +{ + fn access(&self, mode: AccessMode) -> std::io::Result<()> { + imp::access(self.as_ref(), mode) } } #[test] fn amazing_test_suite() { + use std::path::PathBuf; + + // the new impl works with PathBuf, and any other type which implies AsRef. + // for example, https://docs.rs/typed-path/latest/typed_path/struct.Path.html, which -> AsRef -> AsRef + let cargotoml = PathBuf::from("Cargo.toml"); + assert!(cargotoml.access(AccessMode::EXISTS).is_ok()); + assert!(cargotoml.access(AccessMode::READ).is_ok()); + assert!(cargotoml.access(AccessMode::READ | AccessMode::WRITE).is_ok()); + let cargotoml = Path::new("Cargo.toml"); assert!(cargotoml.access(AccessMode::EXISTS).is_ok());