From bfd355e2a0bb9a2217d8f8ffa14b44ae8d682abb Mon Sep 17 00:00:00 2001 From: Gabriel Minatel Date: Sun, 12 Apr 2026 17:36:17 -0400 Subject: [PATCH] feat: toml v1.1 support --- Cargo.lock | 90 ++++++++++------------------------- Cargo.toml | 4 +- tests/skeletons/tests/core.rs | 67 ++++++++++++++++++++++++++ 3 files changed, 95 insertions(+), 66 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8aba659..1402efe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -162,18 +162,18 @@ dependencies = [ "rstest", "serde", "serde_json", - "toml 1.0.3+spec-1.1.0", + "toml", ] [[package]] name = "cargo-manifest" -version = "0.20.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99c6f1c3eb197d17dde4f1a1170fbe7ce3e5f23f1166ae480875a9f4a9c11c40" +checksum = "fae5b96898dec422317cc18037ff6ddd3f7d0766e74a230e9aeddfc21f878267" dependencies = [ "serde", "thiserror", - "toml 0.8.23", + "toml", ] [[package]] @@ -782,7 +782,7 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit 0.23.10+spec-1.0.0", + "toml_edit", ] [[package]] @@ -965,18 +965,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.9" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_spanned" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" dependencies = [ "serde_core", ] @@ -1074,39 +1065,17 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" -dependencies = [ - "indexmap", - "serde", - "serde_spanned 0.6.9", - "toml_datetime 0.6.11", - "toml_edit 0.22.27", -] - -[[package]] -name = "toml" -version = "1.0.3+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7614eaf19ad818347db24addfa201729cf2a9b6fdfd9eb0ab870fcacc606c0c" +checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" dependencies = [ "indexmap", "serde_core", - "serde_spanned 1.0.4", - "toml_datetime 1.0.0+spec-1.1.0", + "serde_spanned", + "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", "toml_writer", - "winnow", -] - -[[package]] -name = "toml_datetime" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" -dependencies = [ - "serde", + "winnow 1.0.1", ] [[package]] @@ -1120,26 +1089,13 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "1.0.0+spec-1.1.0" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32c2555c699578a4f59f0cc68e5116c8d7cabbd45e1409b989d4be085b53f13e" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" dependencies = [ "serde_core", ] -[[package]] -name = "toml_edit" -version = "0.22.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" -dependencies = [ - "indexmap", - "serde", - "serde_spanned 0.6.9", - "toml_datetime 0.6.11", - "winnow", -] - [[package]] name = "toml_edit" version = "0.23.10+spec-1.0.0" @@ -1149,23 +1105,23 @@ dependencies = [ "indexmap", "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", - "winnow", + "winnow 0.7.14", ] [[package]] name = "toml_parser" -version = "1.0.9+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "winnow", + "winnow 1.0.1", ] [[package]] name = "toml_writer" -version = "1.0.6+spec-1.1.0" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" +checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" [[package]] name = "unicode-ident" @@ -1295,6 +1251,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "winnow" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5" + [[package]] name = "wit-bindgen" version = "0.51.0" diff --git a/Cargo.toml b/Cargo.toml index 348aef4..1a4503c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,9 +28,9 @@ env_logger = "0.11" globwalk = "0.9.1" anyhow = "1.0.102" pathdiff = "0.2.3" -cargo-manifest = "0.20.0" +cargo-manifest = "0.21.0" fs-err = "3.3.0" -toml = { version = "1.0", features = ["preserve_order"] } +toml = { version = "1.1", features = ["preserve_order"] } expect-test = "1.5.1" guppy = "0.17" diff --git a/tests/skeletons/tests/core.rs b/tests/skeletons/tests/core.rs index 20dee2b..7d93b16 100644 --- a/tests/skeletons/tests/core.rs +++ b/tests/skeletons/tests/core.rs @@ -461,3 +461,70 @@ workspace = true } } } + +#[test] +pub fn test_toml_v1_1() { + // Arrange + let project = CargoWorkspace::new() + .manifest( + ".", + r#" +[package] +name = "test-dummy" +version = "0.1.0" +edition = "2018" + +[dependencies] +reqwest = { + version = "0.13", + default-features = false, + features = [ + "json", + ] +} + +"#, + ) + .touch("src/main.rs") + .build(); + + // Act + let skeleton = Skeleton::derive(project.path(), None).unwrap(); + + // Assert + assert_eq!(1, skeleton.manifests.len()); + + let manifest = &skeleton.manifests[0]; + let parsed: toml::Value = toml::from_str(&manifest.contents).unwrap(); + + let reqwest = parsed + .get("dependencies") + .and_then(|deps| deps.get("reqwest")) + .expect("Expected to find reqwest dependency in manifest") + .as_table() + .expect("Expected reqwest dependency to be a table"); + assert_eq!( + reqwest.get("version").and_then(|v| v.as_str()), + Some("0.13"), + "Expected reqwest version to be '0.13' (TOML 1.1 multiline inline table)" + ); + + assert_eq!( + reqwest.get("default-features").and_then(|v| v.as_bool()), + Some(false), + "Expected reqwest default-features to be false" + ); + + let features = reqwest + .get("features") + .expect("Expected to find features in reqwest dependency") + .as_array() + .expect("Expected features to be an array"); + + let feature_names: Vec<&str> = features.iter().filter_map(|f| f.as_str()).collect(); + assert_eq!( + feature_names, + vec!["json"], + "Expected features to contain exactly 'json' from TOML 1.1 multiline inline table" + ); +}