@@ -87,20 +87,54 @@ impl From<char> for u128 {
8787 }
8888}
8989
90- /// Map `char` with code point in U+0000..=U+00FF to byte in 0x00..=0xFF with same value, failing
91- /// if the code point is greater than U+00FF.
90+ /// Maps a `char` with code point in U+0000..=U+00FF to a byte in 0x00..=0xFF with same value,
91+ /// failing if the code point is greater than U+00FF.
9292///
9393/// See [`impl From<u8> for char`](char#impl-From<u8>-for-char) for details on the encoding.
9494#[ stable( feature = "u8_from_char" , since = "1.59.0" ) ]
9595impl TryFrom < char > for u8 {
9696 type Error = TryFromCharError ;
9797
98+ /// Tries to convert a [`char`] into a [`u8`].
99+ ///
100+ /// # Examples
101+ ///
102+ /// ```
103+ /// let a = 'ÿ'; // U+00FF
104+ /// let b = 'Ā'; // U+0100
105+ /// assert_eq!(u8::try_from(a), Ok(0xFF_u8));
106+ /// assert!(u8::try_from(b).is_err());
107+ /// ```
98108 #[ inline]
99109 fn try_from ( c : char ) -> Result < u8 , Self :: Error > {
100110 u8:: try_from ( u32:: from ( c) ) . map_err ( |_| TryFromCharError ( ( ) ) )
101111 }
102112}
103113
114+ /// Maps a `char` with code point in U+0000..=U+FFFF to a `u16` in 0x0000..=0xFFFF with same value,
115+ /// failing if the code point is greater than U+FFFF.
116+ ///
117+ /// This corresponds to the UCS-2 encoding, as specified in ISO/IEC 10646:2003.
118+ #[ stable( feature = "u16_from_char" , since = "CURRENT_RUSTC_VERSION" ) ]
119+ impl TryFrom < char > for u16 {
120+ type Error = TryFromCharError ;
121+
122+ /// Tries to convert a [`char`] into a [`u16`].
123+ ///
124+ /// # Examples
125+ ///
126+ /// ```
127+ /// let trans_rights = '⚧'; // U+26A7
128+ /// let ninjas = '🥷'; // U+1F977
129+ /// assert_eq!(u16::try_from(trans_rights), Ok(0x26A7_u16));
130+ /// assert!(u16::try_from(ninjas).is_err());
131+ /// ```
132+ #[ inline]
133+ fn try_from ( c : char ) -> Result < u16 , Self :: Error > {
134+ u16:: try_from ( u32:: from ( c) ) . map_err ( |_| TryFromCharError ( ( ) ) )
135+ }
136+ }
137+
104138/// Maps a byte in 0x00..=0xFF to a `char` whose code point has the same value, in U+0000..=U+00FF.
105139///
106140/// Unicode is designed such that this effectively decodes bytes
0 commit comments