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());