diff --git a/src/libstd/path.rs b/src/libstd/path.rs index 88543ad85ed..b85a0dcec81 100755 --- a/src/libstd/path.rs +++ b/src/libstd/path.rs @@ -108,7 +108,7 @@ use core::prelude::*; use ascii::*; -use borrow::{Borrow, ToOwned, Cow}; +use borrow::{Borrow, IntoCow, ToOwned, Cow}; use cmp; use iter::{self, IntoIterator}; use mem; @@ -987,6 +987,18 @@ fn borrow(&self) -> &Path { } } +impl IntoCow<'static, Path> for PathBuf { + fn into_cow(self) -> Cow<'static, Path> { + Cow::Owned(self) + } +} + +impl<'a> IntoCow<'a, Path> for &'a Path { + fn into_cow(self) -> Cow<'a, Path> { + Cow::Borrowed(self) + } +} + impl ToOwned for Path { type Owned = PathBuf; fn to_owned(&self) -> PathBuf { self.to_path_buf() } @@ -1411,6 +1423,26 @@ macro_rules! t( ); ); + #[test] + fn into_cow() { + use borrow::{Cow, IntoCow}; + + let static_path = Path::new("/home/foo"); + let static_cow_path: Cow<'static, Path> = static_path.into_cow(); + let pathbuf = PathBuf::new("/home/foo"); + + { + let path: &Path = &pathbuf; + let borrowed_cow_path: Cow = path.into_cow(); + + assert_eq!(static_cow_path, borrowed_cow_path); + } + + let owned_cow_path: Cow<'static, Path> = pathbuf.into_cow(); + + assert_eq!(static_cow_path, owned_cow_path); + } + #[test] #[cfg(unix)] pub fn test_decompositions_unix() {