diff options
| author | bors <bors@rust-lang.org> | 2015-04-03 22:37:07 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-04-03 22:37:07 +0000 |
| commit | f207ecbe021e2a81fbff4ea1904b955a156aa340 (patch) | |
| tree | 9217d1fca3661cb1fcd22ecc8957b660ae460c55 | |
| parent | c1b8eb5ad4e4b581a38dd7d94723497b568a60d4 (diff) | |
| parent | 52340630a6f76eae4e9b605d17c650d57114951e (diff) | |
| download | rust-f207ecbe021e2a81fbff4ea1904b955a156aa340.tar.gz rust-f207ecbe021e2a81fbff4ea1904b955a156aa340.zip | |
Auto merge of #23972 - gkoz:partial_eq_str_string, r=alexcrichton
Right now comparing a `&String` (or a `&Cow`) to a `&str` requires redundant borrowing of the latter. Implementing `PartialEq<str>` tries to avoid this limitation.
```rust
struct Foo (String);
fn main () {
let s = Foo("foo".to_string());
match s {
Foo(ref x) if x == &"foo" => println!("foo!"),
// avoid this -----^
_ => {}
}
}
```
I was hoping that #23521 would solve this but it didn't work out.
| -rw-r--r-- | src/libcollections/string.rs | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/src/libcollections/string.rs b/src/libcollections/string.rs index 7a772532091..8da8cad98a7 100644 --- a/src/libcollections/string.rs +++ b/src/libcollections/string.rs @@ -796,9 +796,9 @@ impl<'a, 'b> Pattern<'a> for &'b String { #[stable(feature = "rust1", since = "1.0.0")] impl PartialEq for String { #[inline] - fn eq(&self, other: &String) -> bool { PartialEq::eq(&**self, &**other) } + fn eq(&self, other: &String) -> bool { PartialEq::eq(&self[..], &other[..]) } #[inline] - fn ne(&self, other: &String) -> bool { PartialEq::ne(&**self, &**other) } + fn ne(&self, other: &String) -> bool { PartialEq::ne(&self[..], &other[..]) } } macro_rules! impl_eq { @@ -806,39 +806,41 @@ macro_rules! impl_eq { #[stable(feature = "rust1", since = "1.0.0")] impl<'a> PartialEq<$rhs> for $lhs { #[inline] - fn eq(&self, other: &$rhs) -> bool { PartialEq::eq(&**self, &**other) } + fn eq(&self, other: &$rhs) -> bool { PartialEq::eq(&self[..], &other[..]) } #[inline] - fn ne(&self, other: &$rhs) -> bool { PartialEq::ne(&**self, &**other) } + fn ne(&self, other: &$rhs) -> bool { PartialEq::ne(&self[..], &other[..]) } } #[stable(feature = "rust1", since = "1.0.0")] impl<'a> PartialEq<$lhs> for $rhs { #[inline] - fn eq(&self, other: &$lhs) -> bool { PartialEq::eq(&**self, &**other) } + fn eq(&self, other: &$lhs) -> bool { PartialEq::eq(&self[..], &other[..]) } #[inline] - fn ne(&self, other: &$lhs) -> bool { PartialEq::ne(&**self, &**other) } + fn ne(&self, other: &$lhs) -> bool { PartialEq::ne(&self[..], &other[..]) } } } } +impl_eq! { String, str } impl_eq! { String, &'a str } +impl_eq! { Cow<'a, str>, str } impl_eq! { Cow<'a, str>, String } #[stable(feature = "rust1", since = "1.0.0")] impl<'a, 'b> PartialEq<&'b str> for Cow<'a, str> { #[inline] - fn eq(&self, other: &&'b str) -> bool { PartialEq::eq(&**self, &**other) } + fn eq(&self, other: &&'b str) -> bool { PartialEq::eq(&self[..], &other[..]) } #[inline] - fn ne(&self, other: &&'b str) -> bool { PartialEq::ne(&**self, &**other) } + fn ne(&self, other: &&'b str) -> bool { PartialEq::ne(&self[..], &other[..]) } } #[stable(feature = "rust1", since = "1.0.0")] impl<'a, 'b> PartialEq<Cow<'a, str>> for &'b str { #[inline] - fn eq(&self, other: &Cow<'a, str>) -> bool { PartialEq::eq(&**self, &**other) } + fn eq(&self, other: &Cow<'a, str>) -> bool { PartialEq::eq(&self[..], &other[..]) } #[inline] - fn ne(&self, other: &Cow<'a, str>) -> bool { PartialEq::ne(&**self, &**other) } + fn ne(&self, other: &Cow<'a, str>) -> bool { PartialEq::ne(&self[..], &other[..]) } } #[unstable(feature = "collections", reason = "waiting on Str stabilization")] |
