File tree Expand file tree Collapse file tree 2 files changed +54
-3
lines changed Expand file tree Collapse file tree 2 files changed +54
-3
lines changed Original file line number Diff line number Diff line change @@ -2203,6 +2203,41 @@ where
2203
2203
deserialize_numeric_key ! ( deserialize_f32, deserialize_f32) ;
2204
2204
deserialize_numeric_key ! ( deserialize_f64) ;
2205
2205
2206
+ fn deserialize_bool < V > ( self , visitor : V ) -> Result < V :: Value >
2207
+ where
2208
+ V : de:: Visitor < ' de > ,
2209
+ {
2210
+ self . de . eat_char ( ) ;
2211
+
2212
+ let peek = match tri ! ( self . de. next_char( ) ) {
2213
+ Some ( b) => b,
2214
+ None => {
2215
+ return Err ( self . de . peek_error ( ErrorCode :: EofWhileParsingValue ) ) ;
2216
+ }
2217
+ } ;
2218
+
2219
+ let value = match peek {
2220
+ b't' => {
2221
+ tri ! ( self . de. parse_ident( b"rue\" " ) ) ;
2222
+ visitor. visit_bool ( true )
2223
+ }
2224
+ b'f' => {
2225
+ tri ! ( self . de. parse_ident( b"alse\" " ) ) ;
2226
+ visitor. visit_bool ( false )
2227
+ }
2228
+ _ => {
2229
+ self . de . scratch . clear ( ) ;
2230
+ let s = tri ! ( self . de. read. parse_str( & mut self . de. scratch) ) ;
2231
+ Err ( de:: Error :: invalid_type ( Unexpected :: Str ( & s) , & visitor) )
2232
+ }
2233
+ } ;
2234
+
2235
+ match value {
2236
+ Ok ( value) => Ok ( value) ,
2237
+ Err ( err) => Err ( self . de . fix_position ( err) ) ,
2238
+ }
2239
+ }
2240
+
2206
2241
#[ inline]
2207
2242
fn deserialize_option < V > ( self , visitor : V ) -> Result < V :: Value >
2208
2243
where
@@ -2258,7 +2293,7 @@ where
2258
2293
}
2259
2294
2260
2295
forward_to_deserialize_any ! {
2261
- bool char str string unit unit_struct seq tuple tuple_struct map struct
2296
+ char str string unit unit_struct seq tuple tuple_struct map struct
2262
2297
identifier ignored_any
2263
2298
}
2264
2299
}
Original file line number Diff line number Diff line change @@ -1183,6 +1183,22 @@ impl<'de> serde::Deserializer<'de> for MapKeyDeserializer<'de> {
1183
1183
deserialize_numeric_key ! ( deserialize_i128, do_deserialize_i128) ;
1184
1184
deserialize_numeric_key ! ( deserialize_u128, do_deserialize_u128) ;
1185
1185
1186
+ fn deserialize_bool < V > ( self , visitor : V ) -> Result < V :: Value , Error >
1187
+ where
1188
+ V : Visitor < ' de > ,
1189
+ {
1190
+ if self . key == "true" {
1191
+ visitor. visit_bool ( true )
1192
+ } else if self . key == "false" {
1193
+ visitor. visit_bool ( false )
1194
+ } else {
1195
+ Err ( serde:: de:: Error :: invalid_type (
1196
+ Unexpected :: Str ( & self . key ) ,
1197
+ & visitor,
1198
+ ) )
1199
+ }
1200
+ }
1201
+
1186
1202
#[ inline]
1187
1203
fn deserialize_option < V > ( self , visitor : V ) -> Result < V :: Value , Error >
1188
1204
where
@@ -1219,8 +1235,8 @@ impl<'de> serde::Deserializer<'de> for MapKeyDeserializer<'de> {
1219
1235
}
1220
1236
1221
1237
forward_to_deserialize_any ! {
1222
- bool char str string bytes byte_buf unit unit_struct seq tuple
1223
- tuple_struct map struct identifier ignored_any
1238
+ char str string bytes byte_buf unit unit_struct seq tuple tuple_struct
1239
+ map struct identifier ignored_any
1224
1240
}
1225
1241
}
1226
1242
You can’t perform that action at this time.
0 commit comments