Add ToOwned and Borrow impls

yoshuawuyts-patch-1
Stjepan Glavina 5 years ago
parent ba87048db5
commit 0adcb50f58

@ -32,7 +32,7 @@ use crate::task::blocking;
/// # Ok(()) }) } /// # Ok(()) }) }
/// ``` /// ```
pub async fn canonicalize<P: AsRef<Path>>(path: P) -> io::Result<PathBuf> { pub async fn canonicalize<P: AsRef<Path>>(path: P) -> io::Result<PathBuf> {
let path: std::path::PathBuf = path.as_ref().to_path_buf().into(); let path: PathBuf = path.as_ref().to_owned();
Ok(blocking::spawn(async move { std::fs::canonicalize(&path) }) Ok(blocking::spawn(async move { std::fs::canonicalize(&path) })
.await? .await?
.into()) .into())

@ -35,7 +35,7 @@ use crate::task::blocking;
/// # Ok(()) }) } /// # Ok(()) }) }
/// ``` /// ```
pub async fn metadata<P: AsRef<Path>>(path: P) -> io::Result<Metadata> { pub async fn metadata<P: AsRef<Path>>(path: P) -> io::Result<Metadata> {
let path: std::path::PathBuf = path.as_ref().to_path_buf().into(); let path = path.as_ref().to_owned();
blocking::spawn(async move { std::fs::metadata(path) }).await blocking::spawn(async move { std::fs::metadata(path) }).await
} }

@ -44,7 +44,7 @@ use crate::task::{blocking, Context, JoinHandle, Poll};
/// # Ok(()) }) } /// # Ok(()) }) }
/// ``` /// ```
pub async fn read_dir<P: AsRef<Path>>(path: P) -> io::Result<ReadDir> { pub async fn read_dir<P: AsRef<Path>>(path: P) -> io::Result<ReadDir> {
let path: std::path::PathBuf = path.as_ref().to_path_buf().into(); let path = path.as_ref().to_owned();
blocking::spawn(async move { std::fs::read_dir(path) }) blocking::spawn(async move { std::fs::read_dir(path) })
.await .await
.map(ReadDir::new) .map(ReadDir::new)

@ -27,7 +27,7 @@ use crate::task::blocking;
/// # Ok(()) }) } /// # Ok(()) }) }
/// ``` /// ```
pub async fn read_link<P: AsRef<Path>>(path: P) -> io::Result<PathBuf> { pub async fn read_link<P: AsRef<Path>>(path: P) -> io::Result<PathBuf> {
let path: std::path::PathBuf = path.as_ref().to_path_buf().into(); let path = path.as_ref().to_owned();
Ok(blocking::spawn(async move { std::fs::read_link(path) }) Ok(blocking::spawn(async move { std::fs::read_link(path) })
.await? .await?
.into()) .into())

@ -33,6 +33,6 @@ use crate::task::blocking;
/// # Ok(()) }) } /// # Ok(()) }) }
/// ``` /// ```
pub async fn symlink_metadata<P: AsRef<Path>>(path: P) -> io::Result<Metadata> { pub async fn symlink_metadata<P: AsRef<Path>>(path: P) -> io::Result<Metadata> {
let path: std::path::PathBuf = path.as_ref().to_path_buf().into(); let path = path.as_ref().to_owned();
blocking::spawn(async move { std::fs::symlink_metadata(path) }).await blocking::spawn(async move { std::fs::symlink_metadata(path) }).await
} }

@ -830,3 +830,11 @@ impl AsRef<Path> for String {
Path::new(self) Path::new(self)
} }
} }
impl std::borrow::ToOwned for Path {
type Owned = PathBuf;
fn to_owned(&self) -> PathBuf {
self.to_path_buf()
}
}

@ -192,6 +192,12 @@ impl std::ops::Deref for PathBuf {
} }
} }
impl std::borrow::Borrow<Path> for PathBuf {
fn borrow(&self) -> &Path {
&**self
}
}
impl From<std::path::PathBuf> for PathBuf { impl From<std::path::PathBuf> for PathBuf {
fn from(path: std::path::PathBuf) -> PathBuf { fn from(path: std::path::PathBuf) -> PathBuf {
PathBuf { inner: path } PathBuf { inner: path }

Loading…
Cancel
Save