@@ -70,19 +70,11 @@ impl<'js> Deserializer<'js> {
7070 where
7171 V : de:: Visitor < ' de > ,
7272 {
73- if self . value . is_int ( ) {
74- return visitor. visit_i32 (
75- self . value
76- . as_int ( )
77- . ok_or_else ( || Error :: new ( "Failed to convert value to i32" ) ) ?,
78- ) ;
73+ if let Some ( i) = self . value . as_int ( ) {
74+ return visitor. visit_i32 ( i) ;
7975 }
8076
81- if self . value . is_float ( ) {
82- let f64_representation = self
83- . value
84- . as_float ( )
85- . ok_or_else ( || Error :: new ( "Failed to convert value to f64" ) ) ?;
77+ if let Some ( f64_representation) = self . value . as_float ( ) {
8678 let is_positive = f64_representation. is_sign_positive ( ) ;
8779 let safe_integer_range = ( MIN_SAFE_INTEGER as f64 ) ..=( MAX_SAFE_INTEGER as f64 ) ;
8880 let whole = f64_representation. fract ( ) == 0.0 ;
@@ -98,7 +90,11 @@ impl<'js> Deserializer<'js> {
9890
9991 return visitor. visit_f64 ( f64_representation) ;
10092 }
101- unreachable ! ( )
93+
94+ Err ( Error :: new ( Exception :: throw_type (
95+ self . value . ctx ( ) ,
96+ "Unsupported number type" ,
97+ ) ) )
10298 }
10399
104100 /// Pops the last visited value present in the stack.
@@ -146,8 +142,8 @@ impl<'de> de::Deserializer<'de> for &mut Deserializer<'de> {
146142 }
147143 }
148144
149- if self . value . is_bool ( ) {
150- return visitor. visit_bool ( self . value . as_bool ( ) . expect ( "value to be boolean" ) ) ;
145+ if let Some ( b ) = self . value . as_bool ( ) {
146+ return visitor. visit_bool ( b ) ;
151147 }
152148
153149 if get_class_id ( & self . value ) == ClassId :: Bool as u32 {
@@ -188,12 +184,9 @@ impl<'de> de::Deserializer<'de> for &mut Deserializer<'de> {
188184 }
189185 }
190186
191- if self . value . is_array ( ) {
192- let arr = self . value . as_array ( ) . unwrap ( ) . clone ( ) ;
193-
194- let seq_access = SeqAccess :: new ( self , arr) ?;
195- let result = visitor. visit_seq ( seq_access) ;
196- return result;
187+ if let Some ( arr) = self . value . as_array ( ) {
188+ let seq_access = SeqAccess :: new ( self , arr. clone ( ) ) ?;
189+ return visitor. visit_seq ( seq_access) ;
197190 }
198191
199192 if self . value . is_object ( ) {
@@ -416,8 +409,8 @@ impl<'a, 'de: 'a> SeqAccess<'a, 'de> {
416409 . as_object ( )
417410 . get ( PredefinedAtom :: Length )
418411 . map_err ( Error :: new) ?;
419- let length: usize = if value. is_number ( ) {
420- value . as_number ( ) . unwrap ( ) as usize
412+ let length: usize = if let Some ( n ) = value. as_number ( ) {
413+ n as usize
421414 } else {
422415 let value_of: Function = value
423416 . as_object ( )
@@ -494,8 +487,10 @@ pub(crate) fn get_to_json<'a>(value: &Value<'a>) -> Option<Function<'a>> {
494487 } ;
495488 let f = unsafe { Value :: from_raw ( value. ctx ( ) . clone ( ) , f) } ;
496489
497- if f. is_function ( ) {
498- Some ( f. into_function ( ) . unwrap ( ) )
490+ if f. is_function ( )
491+ && let Some ( f) = f. into_function ( )
492+ {
493+ Some ( f)
499494 } else {
500495 None
501496 }
0 commit comments