summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorMichael Lamparski <diagonaldevice@gmail.com>2018-02-20 18:53:56 -0500
committerMichael Lamparski <diagonaldevice@gmail.com>2018-02-20 18:57:19 -0500
commit0d0a470b89df7b859ce048e29873621c957e29d8 (patch)
treeafb444777e0d205c2431d67a949fd5d215669a05 /src/libstd
parent27a046e9338fb0455c33b13e8fe28da78212dedc (diff)
downloadrust-0d0a470b89df7b859ce048e29873621c957e29d8.tar.gz
rust-0d0a470b89df7b859ce048e29873621c957e29d8.zip
Make signature of Path::strip_prefix un-bizarre
BREAKING CHANGE:
This has the potential to cause regressions in type inference.
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/path.rs18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/libstd/path.rs b/src/libstd/path.rs
index e03a182653e..527246fe1cd 100644
--- a/src/libstd/path.rs
+++ b/src/libstd/path.rs
@@ -297,10 +297,9 @@ pub const MAIN_SEPARATOR: char = ::sys::path::MAIN_SEP;
 // Iterate through `iter` while it matches `prefix`; return `None` if `prefix`
 // is not a prefix of `iter`, otherwise return `Some(iter_after_prefix)` giving
 // `iter` after having exhausted `prefix`.
-fn iter_after<A, I, J>(mut iter: I, mut prefix: J) -> Option<I>
-    where I: Iterator<Item = A> + Clone,
-          J: Iterator<Item = A>,
-          A: PartialEq
+fn iter_after<'a, 'b, I, J>(mut iter: I, mut prefix: J) -> Option<I>
+    where I: Iterator<Item = Component<'a>> + Clone,
+          J: Iterator<Item = Component<'b>>,
 {
     loop {
         let mut iter_next = iter.clone();
@@ -1865,7 +1864,7 @@ impl Path {
     /// # Examples
     ///
     /// ```
-    /// use std::path::Path;
+    /// use std::path::{Path, PathBuf};
     ///
     /// let path = Path::new("/test/haha/foo.txt");
     ///
@@ -1876,16 +1875,19 @@ impl Path {
     /// assert_eq!(path.strip_prefix("/test/haha/foo.txt/"), Ok(Path::new("")));
     /// assert_eq!(path.strip_prefix("test").is_ok(), false);
     /// assert_eq!(path.strip_prefix("/haha").is_ok(), false);
+    ///
+    /// let prefix = PathBuf::from("/test/");
+    /// assert_eq!(path.strip_prefix(prefix), Ok(Path::new("haha/foo.txt")));
     /// ```
     #[stable(since = "1.7.0", feature = "path_strip_prefix")]
-    pub fn strip_prefix<'a, P: ?Sized>(&'a self, base: &'a P)
-                                       -> Result<&'a Path, StripPrefixError>
+    pub fn strip_prefix<'a, P>(&'a self, base: P)
+                               -> Result<&'a Path, StripPrefixError>
         where P: AsRef<Path>
     {
         self._strip_prefix(base.as_ref())
     }
 
-    fn _strip_prefix<'a>(&'a self, base: &'a Path)
+    fn _strip_prefix<'a>(&'a self, base: &Path)
                          -> Result<&'a Path, StripPrefixError> {
         iter_after(self.components(), base.components())
             .map(|c| c.as_path())