@@ -300,12 +300,19 @@ impl std::str::FromStr for Metadata {
300
300
}
301
301
}
302
302
303
- let table = manifest
303
+ let plain_table = manifest
304
+ . clone ( )
304
305
. and_then ( |t| table ( t, "package" ) )
305
306
. and_then ( |t| table ( t, "metadata" ) )
306
307
. and_then ( |t| table ( t, "docs" ) )
307
308
. and_then ( |t| table ( t, "rs" ) ) ;
308
- let mut metadata = if let Some ( table) = table {
309
+ let quoted_table = manifest
310
+ . and_then ( |t| table ( t, "package" ) )
311
+ . and_then ( |t| table ( t, "metadata" ) )
312
+ . and_then ( |t| table ( t, "docs.rs" ) ) ;
313
+ let mut metadata = if let Some ( table) = plain_table {
314
+ Value :: Table ( table) . try_into ( ) ?
315
+ } else if let Some ( table) = quoted_table {
309
316
Value :: Table ( table) . try_into ( ) ?
310
317
} else {
311
318
Metadata :: default ( )
@@ -409,6 +416,26 @@ mod test_parsing {
409
416
. unwrap ( ) ;
410
417
assert ! ( metadata. targets. unwrap( ) . is_empty( ) ) ;
411
418
}
419
+
420
+ #[ test]
421
+ fn test_quoted_table ( ) {
422
+ // parse quoted keys
423
+ let manifest = r#"
424
+ [package]
425
+ name = "test"
426
+ [package.metadata."docs.rs"]
427
+ features = [ "feature1", "feature2" ]
428
+ all-features = true
429
+ no-default-features = true
430
+ default-target = "x86_64-unknown-linux-gnu"
431
+ "# ;
432
+ let metadata = Metadata :: from_str ( manifest) . unwrap ( ) ;
433
+
434
+ assert ! ( metadata. features. is_some( ) ) ;
435
+ assert ! ( metadata. all_features) ;
436
+ assert ! ( metadata. no_default_features) ;
437
+ assert ! ( metadata. default_target. is_some( ) ) ;
438
+ }
412
439
}
413
440
414
441
#[ cfg( test) ]
0 commit comments