about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2024-01-26 23:15:51 +0100
committerGitHub <noreply@github.com>2024-01-26 23:15:51 +0100
commit411b41e0db9eaf684602a59d8b692fdfcf377802 (patch)
tree31e5d53a4efbacca22e443bdae87436fab86f3f9
parent8ec883856d73ccfc72ccf907cc8c361dc66e65f3 (diff)
parentc4208fad3ce9d851fe5d54ba030b07a5aa3e0a89 (diff)
downloadrust-411b41e0db9eaf684602a59d8b692fdfcf377802.tar.gz
rust-411b41e0db9eaf684602a59d8b692fdfcf377802.zip
Rollup merge of #120311 - mina86:h, r=cuviper
core: add `From<core::ascii::Char>` implementations

Introduce `From<core::ascii::Char>` implementations for all unsigned
numeric types and `char`.  This matches the API of `char` type.

Issue: https://github.com/rust-lang/rust/issues/110998
-rw-r--r--library/core/src/ascii/ascii_char.rs16
-rw-r--r--tests/ui/traits/issue-77982.stderr1
-rw-r--r--tests/ui/try-trait/bad-interconversion.stderr1
3 files changed, 18 insertions, 0 deletions
diff --git a/library/core/src/ascii/ascii_char.rs b/library/core/src/ascii/ascii_char.rs
index cc872a5343d..5f758af1624 100644
--- a/library/core/src/ascii/ascii_char.rs
+++ b/library/core/src/ascii/ascii_char.rs
@@ -537,6 +537,22 @@ impl AsciiChar {
     }
 }
 
+macro_rules! into_int_impl {
+    ($($ty:ty)*) => {
+        $(
+            #[unstable(feature = "ascii_char", issue = "110998")]
+            impl From<AsciiChar> for $ty {
+                #[inline]
+                fn from(chr: AsciiChar) -> $ty {
+                    chr as u8 as $ty
+                }
+            }
+        )*
+    }
+}
+
+into_int_impl!(u8 u16 u32 u64 u128 char);
+
 impl [AsciiChar] {
     /// Views this slice of ASCII characters as a UTF-8 `str`.
     #[unstable(feature = "ascii_char", issue = "110998")]
diff --git a/tests/ui/traits/issue-77982.stderr b/tests/ui/traits/issue-77982.stderr
index 592cfd970c6..b130b7620fc 100644
--- a/tests/ui/traits/issue-77982.stderr
+++ b/tests/ui/traits/issue-77982.stderr
@@ -44,6 +44,7 @@ LL |     let ips: Vec<_> = (0..100_000).map(|_| u32::from(0u32.into())).collect(
    |                                            type must be known at this point
    |
    = note: multiple `impl`s satisfying `u32: From<_>` found in the `core` crate:
+           - impl From<Char> for u32;
            - impl From<Ipv4Addr> for u32;
            - impl From<NonZeroU32> for u32;
            - impl From<bool> for u32;
diff --git a/tests/ui/try-trait/bad-interconversion.stderr b/tests/ui/try-trait/bad-interconversion.stderr
index 97fbbdbf8f8..4d046635d64 100644
--- a/tests/ui/try-trait/bad-interconversion.stderr
+++ b/tests/ui/try-trait/bad-interconversion.stderr
@@ -12,6 +12,7 @@ LL |     Ok(Err(123_i32)?)
    = help: the following other types implement trait `From<T>`:
              <u8 as From<bool>>
              <u8 as From<NonZeroU8>>
+             <u8 as From<Char>>
    = note: required for `Result<u64, u8>` to implement `FromResidual<Result<Infallible, i32>>`
 
 error[E0277]: the `?` operator can only be used on `Result`s, not `Option`s, in a function that returns `Result`