diff options
| author | Jorge Aparicio <japaricious@gmail.com> | 2015-02-25 11:43:39 -0500 |
|---|---|---|
| committer | Jorge Aparicio <japaricious@gmail.com> | 2015-02-25 12:34:50 -0500 |
| commit | 2de7a7c9badf71978c53f07fc6b2db097a8d4213 (patch) | |
| tree | ee039ab10f470535464b6b25759480bbcf47772c /src/libstd | |
| parent | 880fb89bde126aa43fc348d0b93839d3d18a1f51 (diff) | |
| download | rust-2de7a7c9badf71978c53f07fc6b2db097a8d4213.tar.gz rust-2de7a7c9badf71978c53f07fc6b2db097a8d4213.zip | |
impl IntoCow for Path[Buf]
Diffstat (limited to 'src/libstd')
| -rwxr-xr-x | src/libstd/path.rs | 34 |
1 files changed, 33 insertions, 1 deletions
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 @@ impl Borrow<Path> for PathBuf { } } +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() } @@ -1412,6 +1424,26 @@ mod tests { ); #[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> = 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() { t!("", |
