Skip to content

Commit

Permalink
Remove more impls that may cause inference failures
Browse files Browse the repository at this point in the history
  • Loading branch information
joshtriplett committed Jan 7, 2025
1 parent 9ccc52b commit 75a8d0d
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 51 deletions.
39 changes: 12 additions & 27 deletions library/alloc/src/bstr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
use core::borrow::{Borrow, BorrowMut};
#[unstable(feature = "bstr", issue = "134915")]
pub use core::bstr::ByteStr;
use core::bstr::{impl_partial_eq, impl_partial_eq_ord, impl_partial_eq_ord_n};
use core::bstr::{impl_partial_eq, impl_partial_eq_n, impl_partial_eq_ord};
use core::cmp::Ordering;
use core::ops::{
Deref, DerefMut, DerefPure, Index, IndexMut, Range, RangeFrom, RangeFull, RangeInclusive,
Expand Down Expand Up @@ -165,21 +165,8 @@ impl Borrow<ByteStr> for ByteString {
}
}

#[unstable(feature = "bstr", issue = "134915")]
impl Borrow<ByteStr> for Vec<u8> {
#[inline]
fn borrow(&self) -> &ByteStr {
ByteStr::from_bytes(self.as_slice())
}
}

#[unstable(feature = "bstr", issue = "134915")]
impl Borrow<ByteStr> for String {
#[inline]
fn borrow(&self) -> &ByteStr {
ByteStr::from_bytes(self.as_bytes())
}
}
// `impl Borrow<ByteStr> for Vec<u8>` omitted to avoid inference failures
// `impl Borrow<ByteStr> for String` omitted to avoid inference failures

#[unstable(feature = "bstr", issue = "134915")]
impl BorrowMut<[u8]> for ByteString {
Expand All @@ -197,13 +184,7 @@ impl BorrowMut<ByteStr> for ByteString {
}
}

#[unstable(feature = "bstr", issue = "134915")]
impl BorrowMut<ByteStr> for Vec<u8> {
#[inline]
fn borrow_mut(&mut self) -> &mut ByteStr {
ByteStr::from_bytes_mut(self.as_mut_slice())
}
}
// `impl BorrowMut<ByteStr> for Vec<u8>` omitted to avoid inference failures

#[unstable(feature = "bstr", issue = "134915")]
impl Default for ByteString {
Expand Down Expand Up @@ -563,20 +544,24 @@ macro_rules! impl_partial_eq_ord_cow {
};
}

impl_partial_eq_ord!(ByteString, Vec<u8>);
// PartialOrd with `Vec<u8>` omitted to avoid inference failures
impl_partial_eq!(ByteString, Vec<u8>);
// PartialOrd with `[u8]` omitted to avoid inference failures
impl_partial_eq!(ByteString, [u8]);
// PartialOrd with `&[u8]` omitted to avoid inference failures
impl_partial_eq!(ByteString, &[u8]);
impl_partial_eq_ord!(ByteString, String);
// PartialOrd with `String` omitted to avoid inference failures
impl_partial_eq!(ByteString, String);
// PartialOrd with `str` omitted to avoid inference failures
impl_partial_eq!(ByteString, str);
// PartialOrd with `&str` omitted to avoid inference failures
impl_partial_eq!(ByteString, &str);
impl_partial_eq_ord!(ByteString, ByteStr);
impl_partial_eq_ord!(ByteString, &ByteStr);
impl_partial_eq_ord_n!(ByteString, [u8; N]);
impl_partial_eq_ord_n!(ByteString, &[u8; N]);
// PartialOrd with `[u8; N]` omitted to avoid inference failures
impl_partial_eq_n!(ByteString, [u8; N]);
// PartialOrd with `&[u8; N]` omitted to avoid inference failures
impl_partial_eq_n!(ByteString, &[u8; N]);
impl_partial_eq_ord_cow!(ByteString, Cow<'_, ByteStr>);
impl_partial_eq_ord_cow!(ByteString, Cow<'_, str>);
impl_partial_eq_ord_cow!(ByteString, Cow<'_, [u8]>);
Expand Down
30 changes: 6 additions & 24 deletions library/core/src/bstr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -498,7 +498,7 @@ pub use impl_partial_eq_ord;
#[doc(hidden)]
#[macro_export]
#[unstable(feature = "bstr_internals", issue = "none")]
macro_rules! impl_partial_eq_ord_n {
macro_rules! impl_partial_eq_n {
($lhs:ty, $rhs:ty) => {
#[allow(unused_lifetimes)]
#[unstable(feature = "bstr", issue = "134915")]
Expand All @@ -519,32 +519,12 @@ macro_rules! impl_partial_eq_ord_n {
PartialEq::eq(this, other.as_bytes())
}
}

#[allow(unused_lifetimes)]
#[unstable(feature = "bstr", issue = "134915")]
impl<const N: usize> PartialOrd<$rhs> for $lhs {
#[inline]
fn partial_cmp(&self, other: &$rhs) -> Option<Ordering> {
let other: &[u8] = other.as_ref();
PartialOrd::partial_cmp(self.as_bytes(), other)
}
}

#[allow(unused_lifetimes)]
#[unstable(feature = "bstr", issue = "134915")]
impl<const N: usize> PartialOrd<$lhs> for $rhs {
#[inline]
fn partial_cmp(&self, other: &$lhs) -> Option<Ordering> {
let this: &[u8] = self.as_ref();
PartialOrd::partial_cmp(this, other.as_bytes())
}
}
};
}

#[doc(hidden)]
#[unstable(feature = "bstr_internals", issue = "none")]
pub use impl_partial_eq_ord_n;
pub use impl_partial_eq_n;

// PartialOrd with `[u8]` omitted to avoid inference failures
impl_partial_eq!(ByteStr, [u8]);
Expand All @@ -554,8 +534,10 @@ impl_partial_eq!(ByteStr, &[u8]);
impl_partial_eq!(ByteStr, str);
// PartialOrd with `&str` omitted to avoid inference failures
impl_partial_eq!(ByteStr, &str);
impl_partial_eq_ord_n!(ByteStr, [u8; N]);
impl_partial_eq_ord_n!(ByteStr, &[u8; N]);
// PartialOrd with `[u8; N]` omitted to avoid inference failures
impl_partial_eq_n!(ByteStr, [u8; N]);
// PartialOrd with `[u8; N]` omitted to avoid inference failures
impl_partial_eq_n!(ByteStr, &[u8; N]);

#[unstable(feature = "bstr", issue = "134915")]
impl Ord for ByteStr {
Expand Down

0 comments on commit 75a8d0d

Please sign in to comment.