@@ -2234,20 +2234,15 @@ fn delete_value_object_by_keypath<'a>(
2234
2234
obj : & mut BTreeMap < String , Value < ' _ > > ,
2235
2235
keypath : & mut VecDeque < & ' a KeyPath < ' a > > ,
2236
2236
) {
2237
- if let Some ( path) = keypath. pop_front ( ) {
2238
- match path {
2239
- KeyPath :: QuotedName ( name) | KeyPath :: Name ( name) => {
2240
- if keypath. is_empty ( ) {
2241
- obj. remove ( name. as_ref ( ) ) ;
2242
- } else if let Some ( val) = obj. get_mut ( name. as_ref ( ) ) {
2243
- match val {
2244
- Value :: Array ( ref mut arr) => delete_value_array_by_keypath ( arr, keypath) ,
2245
- Value :: Object ( ref mut obj) => delete_value_object_by_keypath ( obj, keypath) ,
2246
- _ => { }
2247
- }
2248
- }
2237
+ if let Some ( KeyPath :: QuotedName ( name) | KeyPath :: Name ( name) ) = keypath. pop_front ( ) {
2238
+ if keypath. is_empty ( ) {
2239
+ obj. remove ( name. as_ref ( ) ) ;
2240
+ } else if let Some ( val) = obj. get_mut ( name. as_ref ( ) ) {
2241
+ match val {
2242
+ Value :: Array ( ref mut arr) => delete_value_array_by_keypath ( arr, keypath) ,
2243
+ Value :: Object ( ref mut obj) => delete_value_object_by_keypath ( obj, keypath) ,
2244
+ _ => { }
2249
2245
}
2250
- _ => { }
2251
2246
}
2252
2247
}
2253
2248
}
@@ -2346,49 +2341,45 @@ fn delete_jsonb_object_by_keypath<'a, 'b>(
2346
2341
keypath : & mut VecDeque < & ' a KeyPath < ' a > > ,
2347
2342
) -> Result < Option < ObjectBuilder < ' b > > , Error > {
2348
2343
match keypath. pop_front ( ) {
2349
- Some ( path) => match path {
2350
- KeyPath :: QuotedName ( name) | KeyPath :: Name ( name) => {
2351
- let mut builder = ObjectBuilder :: new ( ) ;
2352
- for ( key, jentry, item) in iterate_object_entries ( value, header) {
2353
- if !key. eq ( name) {
2354
- builder. push_raw ( key, jentry, item) ;
2355
- } else if !keypath. is_empty ( ) {
2356
- match jentry. type_code {
2357
- CONTAINER_TAG => {
2358
- let item_header = read_u32 ( item, 0 ) ?;
2359
- match item_header & CONTAINER_HEADER_TYPE_MASK {
2360
- ARRAY_CONTAINER_TAG => match delete_jsonb_array_by_keypath (
2344
+ Some ( KeyPath :: QuotedName ( name) | KeyPath :: Name ( name) ) => {
2345
+ let mut builder = ObjectBuilder :: new ( ) ;
2346
+ for ( key, jentry, item) in iterate_object_entries ( value, header) {
2347
+ if !key. eq ( name) {
2348
+ builder. push_raw ( key, jentry, item) ;
2349
+ } else if !keypath. is_empty ( ) {
2350
+ match jentry. type_code {
2351
+ CONTAINER_TAG => {
2352
+ let item_header = read_u32 ( item, 0 ) ?;
2353
+ match item_header & CONTAINER_HEADER_TYPE_MASK {
2354
+ ARRAY_CONTAINER_TAG => {
2355
+ match delete_jsonb_array_by_keypath ( item, item_header, keypath) ?
2356
+ {
2357
+ Some ( item_builder) => builder. push_array ( key, item_builder) ,
2358
+ None => return Ok ( None ) ,
2359
+ }
2360
+ }
2361
+ OBJECT_CONTAINER_TAG => {
2362
+ match delete_jsonb_object_by_keypath (
2361
2363
item,
2362
2364
item_header,
2363
2365
keypath,
2364
2366
) ? {
2365
- Some ( item_builder) => builder. push_array ( key, item_builder) ,
2366
- None => return Ok ( None ) ,
2367
- } ,
2368
- OBJECT_CONTAINER_TAG => {
2369
- match delete_jsonb_object_by_keypath (
2370
- item,
2371
- item_header,
2372
- keypath,
2373
- ) ? {
2374
- Some ( item_builder) => {
2375
- builder. push_object ( key, item_builder)
2376
- }
2377
- None => return Ok ( None ) ,
2367
+ Some ( item_builder) => {
2368
+ builder. push_object ( key, item_builder)
2378
2369
}
2370
+ None => return Ok ( None ) ,
2379
2371
}
2380
- _ => unreachable ! ( ) ,
2381
2372
}
2373
+ _ => unreachable ! ( ) ,
2382
2374
}
2383
- _ => return Ok ( None ) ,
2384
2375
}
2376
+ _ => return Ok ( None ) ,
2385
2377
}
2386
2378
}
2387
- Ok ( Some ( builder) )
2388
2379
}
2389
- _ => Ok ( None ) ,
2390
- } ,
2391
- None => Ok ( None ) ,
2380
+ Ok ( Some ( builder ) )
2381
+ }
2382
+ _ => Ok ( None ) ,
2392
2383
}
2393
2384
}
2394
2385
0 commit comments