@@ -27,18 +27,16 @@ impl TryFrom<char> for Char8 {
27
27
type Error = CharConversionError ;
28
28
29
29
fn try_from ( value : char ) -> Result < Self , Self :: Error > {
30
- let code_point = value as u32 ;
31
- if code_point <= 0xff {
32
- Ok ( Char8 ( code_point as u8 ) )
33
- } else {
34
- Err ( CharConversionError )
35
- }
30
+ let code_point = u32:: from ( value) ;
31
+ u8:: try_from ( code_point)
32
+ . map ( Char8 )
33
+ . map_err ( |_| CharConversionError )
36
34
}
37
35
}
38
36
39
37
impl From < Char8 > for char {
40
38
fn from ( char : Char8 ) -> char {
41
- char. 0 as char
39
+ char:: from ( char . 0 )
42
40
}
43
41
}
44
42
@@ -101,12 +99,10 @@ impl TryFrom<char> for Char16 {
101
99
type Error = CharConversionError ;
102
100
103
101
fn try_from ( value : char ) -> Result < Self , Self :: Error > {
104
- let code_point = value as u32 ;
105
- if code_point <= 0xffff {
106
- Ok ( Char16 ( code_point as u16 ) )
107
- } else {
108
- Err ( CharConversionError )
109
- }
102
+ let code_point = u32:: from ( value) ;
103
+ u16:: try_from ( code_point)
104
+ . map ( Char16 )
105
+ . map_err ( |_| CharConversionError )
110
106
}
111
107
}
112
108
@@ -169,6 +165,17 @@ pub const NUL_16: Char16 = unsafe { Char16::from_u16_unchecked(0) };
169
165
mod tests {
170
166
use super :: * ;
171
167
168
+ #[ test]
169
+ fn test_char8_from_char ( ) {
170
+ assert_eq ! ( Char8 :: try_from( 'A' ) . unwrap( ) , Char8 ( 0x41 ) ) ;
171
+ }
172
+
173
+ #[ test]
174
+ fn test_char16_from_char ( ) {
175
+ assert_eq ! ( Char16 :: try_from( 'A' ) . unwrap( ) , Char16 ( 0x41 ) ) ;
176
+ assert_eq ! ( Char16 :: try_from( 'ꋃ' ) . unwrap( ) , Char16 ( 0xa2c3 ) ) ;
177
+ }
178
+
172
179
/// Test that `Char8` and `Char16` can be directly compared with `char`.
173
180
#[ test]
174
181
fn test_char_eq ( ) {
0 commit comments