Skip to content

Commit b70039c

Browse files
chansukejyn514
authored andcommitted
Fix metadata to accept quoted key table
1 parent fac3ea5 commit b70039c

File tree

1 file changed

+29
-2
lines changed

1 file changed

+29
-2
lines changed

crates/metadata/lib.rs

+29-2
Original file line numberDiff line numberDiff line change
@@ -300,12 +300,19 @@ impl std::str::FromStr for Metadata {
300300
}
301301
}
302302

303-
let table = manifest
303+
let plain_table = manifest
304+
.clone()
304305
.and_then(|t| table(t, "package"))
305306
.and_then(|t| table(t, "metadata"))
306307
.and_then(|t| table(t, "docs"))
307308
.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 {
309316
Value::Table(table).try_into()?
310317
} else {
311318
Metadata::default()
@@ -409,6 +416,26 @@ mod test_parsing {
409416
.unwrap();
410417
assert!(metadata.targets.unwrap().is_empty());
411418
}
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+
}
412439
}
413440

414441
#[cfg(test)]

0 commit comments

Comments
 (0)