@@ -27,18 +27,14 @@ 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) . map ( Char8 ) . map_err ( |_| CharConversionError )
36
32
}
37
33
}
38
34
39
35
impl From < Char8 > for char {
40
36
fn from ( char : Char8 ) -> char {
41
- char. 0 as char
37
+ char:: from ( char . 0 )
42
38
}
43
39
}
44
40
@@ -101,12 +97,8 @@ impl TryFrom<char> for Char16 {
101
97
type Error = CharConversionError ;
102
98
103
99
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
- }
100
+ let code_point = u32:: from ( value) ;
101
+ u16:: try_from ( code_point) . map ( Char16 ) . map_err ( |_| CharConversionError )
110
102
}
111
103
}
112
104
@@ -169,6 +161,17 @@ pub const NUL_16: Char16 = unsafe { Char16::from_u16_unchecked(0) };
169
161
mod tests {
170
162
use super :: * ;
171
163
164
+ #[ test]
165
+ fn test_char8_from_char ( ) {
166
+ assert_eq ! ( Char8 :: try_from( 'A' ) . unwrap( ) , Char8 ( 0x41 ) ) ;
167
+ }
168
+
169
+ #[ test]
170
+ fn test_char16_from_char ( ) {
171
+ assert_eq ! ( Char16 :: try_from( 'A' ) . unwrap( ) , Char16 ( 0x41 ) ) ;
172
+ assert_eq ! ( Char16 :: try_from( 'ꋃ' ) . unwrap( ) , Char16 ( 0xa2c3 ) ) ;
173
+ }
174
+
172
175
/// Test that `Char8` and `Char16` can be directly compared with `char`.
173
176
#[ test]
174
177
fn test_char_eq ( ) {
0 commit comments