Omit some more From impls to avoid inference failures

This commit is contained in:
Josh Triplett 2025-01-12 12:27:24 +02:00
parent 76780fa10e
commit 22a4ec39fb
2 changed files with 80 additions and 87 deletions

View File

@ -43,21 +43,6 @@ use crate::vec::Vec;
/// ///
/// The `Debug` and `Display` implementations for `ByteString` are the same as those for `ByteStr`, /// The `Debug` and `Display` implementations for `ByteString` are the same as those for `ByteStr`,
/// showing invalid UTF-8 as hex escapes or the Unicode replacement character, respectively. /// showing invalid UTF-8 as hex escapes or the Unicode replacement character, respectively.
///
/// # Examples
///
/// You can create a new `ByteString` from a `Vec<u8>` directly, or via a `From` impl from various
/// string types:
///
/// ```
/// # #![feature(bstr)]
/// # use std::bstr::ByteString;
/// let s1 = ByteString(vec![b'H', b'e', b'l', b'l', b'o']);
/// let s2 = ByteString::from("Hello");
/// let s3 = ByteString::from(b"Hello");
/// assert_eq!(s1, s2);
/// assert_eq!(s2, s3);
/// ```
#[unstable(feature = "bstr", issue = "134915")] #[unstable(feature = "bstr", issue = "134915")]
#[repr(transparent)] #[repr(transparent)]
#[derive(Clone)] #[derive(Clone)]
@ -193,40 +178,42 @@ impl Default for ByteString {
} }
} }
#[cfg(not(test))] // https://github.com/rust-lang/rust/issues/135100 // Omitted due to inference failures
#[unstable(feature = "bstr", issue = "134915")] //
impl<'a, const N: usize> From<&'a [u8; N]> for ByteString { // #[cfg(not(test))] // https://github.com/rust-lang/rust/issues/135100
#[inline] // #[unstable(feature = "bstr", issue = "134915")]
fn from(s: &'a [u8; N]) -> Self { // impl<'a, const N: usize> From<&'a [u8; N]> for ByteString {
ByteString(s.as_slice().to_vec()) // #[inline]
} // fn from(s: &'a [u8; N]) -> Self {
} // ByteString(s.as_slice().to_vec())
// }
#[cfg(not(test))] // https://github.com/rust-lang/rust/issues/135100 // }
#[unstable(feature = "bstr", issue = "134915")] //
impl<const N: usize> From<[u8; N]> for ByteString { // #[cfg(not(test))] // https://github.com/rust-lang/rust/issues/135100
#[inline] // #[unstable(feature = "bstr", issue = "134915")]
fn from(s: [u8; N]) -> Self { // impl<const N: usize> From<[u8; N]> for ByteString {
ByteString(s.as_slice().to_vec()) // #[inline]
} // fn from(s: [u8; N]) -> Self {
} // ByteString(s.as_slice().to_vec())
// }
#[cfg(not(test))] // https://github.com/rust-lang/rust/issues/135100 // }
#[unstable(feature = "bstr", issue = "134915")] //
impl<'a> From<&'a [u8]> for ByteString { // #[cfg(not(test))] // https://github.com/rust-lang/rust/issues/135100
#[inline] // #[unstable(feature = "bstr", issue = "134915")]
fn from(s: &'a [u8]) -> Self { // impl<'a> From<&'a [u8]> for ByteString {
ByteString(s.to_vec()) // #[inline]
} // fn from(s: &'a [u8]) -> Self {
} // ByteString(s.to_vec())
// }
#[unstable(feature = "bstr", issue = "134915")] // }
impl From<Vec<u8>> for ByteString { //
#[inline] // #[unstable(feature = "bstr", issue = "134915")]
fn from(s: Vec<u8>) -> Self { // impl From<Vec<u8>> for ByteString {
ByteString(s) // #[inline]
} // fn from(s: Vec<u8>) -> Self {
} // ByteString(s)
// }
// }
#[unstable(feature = "bstr", issue = "134915")] #[unstable(feature = "bstr", issue = "134915")]
impl From<ByteString> for Vec<u8> { impl From<ByteString> for Vec<u8> {
@ -236,22 +223,24 @@ impl From<ByteString> for Vec<u8> {
} }
} }
#[cfg(not(test))] // https://github.com/rust-lang/rust/issues/135100 // Omitted due to inference failures
#[unstable(feature = "bstr", issue = "134915")] //
impl<'a> From<&'a str> for ByteString { // #[cfg(not(test))] // https://github.com/rust-lang/rust/issues/135100
#[inline] // #[unstable(feature = "bstr", issue = "134915")]
fn from(s: &'a str) -> Self { // impl<'a> From<&'a str> for ByteString {
ByteString(s.as_bytes().to_vec()) // #[inline]
} // fn from(s: &'a str) -> Self {
} // ByteString(s.as_bytes().to_vec())
// }
#[unstable(feature = "bstr", issue = "134915")] // }
impl From<String> for ByteString { //
#[inline] // #[unstable(feature = "bstr", issue = "134915")]
fn from(s: String) -> Self { // impl From<String> for ByteString {
ByteString(s.into_bytes()) // #[inline]
} // fn from(s: String) -> Self {
} // ByteString(s.into_bytes())
// }
// }
#[cfg(not(test))] // https://github.com/rust-lang/rust/issues/135100 #[cfg(not(test))] // https://github.com/rust-lang/rust/issues/135100
#[unstable(feature = "bstr", issue = "134915")] #[unstable(feature = "bstr", issue = "134915")]

View File

@ -246,21 +246,23 @@ impl<'a> Default for &'a mut ByteStr {
} }
} }
#[unstable(feature = "bstr", issue = "134915")] // Omitted due to inference failures
impl<'a, const N: usize> From<&'a [u8; N]> for &'a ByteStr { //
#[inline] // #[unstable(feature = "bstr", issue = "134915")]
fn from(s: &'a [u8; N]) -> Self { // impl<'a, const N: usize> From<&'a [u8; N]> for &'a ByteStr {
ByteStr::from_bytes(s) // #[inline]
} // fn from(s: &'a [u8; N]) -> Self {
} // ByteStr::from_bytes(s)
// }
#[unstable(feature = "bstr", issue = "134915")] // }
impl<'a> From<&'a [u8]> for &'a ByteStr { //
#[inline] // #[unstable(feature = "bstr", issue = "134915")]
fn from(s: &'a [u8]) -> Self { // impl<'a> From<&'a [u8]> for &'a ByteStr {
ByteStr::from_bytes(s) // #[inline]
} // fn from(s: &'a [u8]) -> Self {
} // ByteStr::from_bytes(s)
// }
// }
// Omitted due to slice-from-array-issue-113238: // Omitted due to slice-from-array-issue-113238:
// //
@ -280,13 +282,15 @@ impl<'a> From<&'a [u8]> for &'a ByteStr {
// } // }
// } // }
#[unstable(feature = "bstr", issue = "134915")] // Omitted due to inference failures
impl<'a> From<&'a str> for &'a ByteStr { //
#[inline] // #[unstable(feature = "bstr", issue = "134915")]
fn from(s: &'a str) -> Self { // impl<'a> From<&'a str> for &'a ByteStr {
ByteStr::from_bytes(s.as_bytes()) // #[inline]
} // fn from(s: &'a str) -> Self {
} // ByteStr::from_bytes(s.as_bytes())
// }
// }
#[unstable(feature = "bstr", issue = "134915")] #[unstable(feature = "bstr", issue = "134915")]
impl hash::Hash for ByteStr { impl hash::Hash for ByteStr {