diff --git a/Cargo.lock b/Cargo.lock index 0c7ede49..a2e25333 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -247,7 +247,7 @@ dependencies = [ "serde_json", "tempfile", "thiserror", - "toml", + "toml 0.6.0", "url", ] @@ -385,7 +385,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f1204fe51a1e56042b8ec31d6407547ecd18f596b66f470dadb9abd9be9c843" dependencies = [ "serde", - "toml", + "toml 0.5.11", ] [[package]] @@ -671,7 +671,7 @@ checksum = "e62abb876c07e4754fae5c14cafa77937841f01740637e17d78dc04352f32a5e" dependencies = [ "cc", "rustc_version", - "toml", + "toml 0.5.11", "vswhom", "winreg", ] @@ -1476,6 +1476,15 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "nom8" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae01545c9c7fc4486ab7debaf2aad7003ac19431791868fb2e8066df97fad2f8" +dependencies = [ + "memchr", +] + [[package]] name = "normalize-path" version = "0.2.0" @@ -2127,6 +2136,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_spanned" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c68e921cef53841b8925c2abadd27c9b891d9613bdc43d6b823062866df38e8" +dependencies = [ + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -2484,6 +2502,40 @@ dependencies = [ "serde", ] +[[package]] +name = "toml" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb9d890e4dc9298b70f740f615f2e05b9db37dce531f6b24fb77ac993f9f217" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4553f467ac8e3d374bc9a177a26801e5d0f9b211aa1673fb137a403afd1c9cf5" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "729bfd096e40da9c001f778f5cdecbd2957929a24e10e5883d9392220a751581" +dependencies = [ + "indexmap", + "nom8", + "serde", + "serde_spanned", + "toml_datetime", +] + [[package]] name = "tower" version = "0.4.13" diff --git a/crates/binstalk-manifests/Cargo.toml b/crates/binstalk-manifests/Cargo.toml index b0a1dbfb..d424655d 100644 --- a/crates/binstalk-manifests/Cargo.toml +++ b/crates/binstalk-manifests/Cargo.toml @@ -21,7 +21,7 @@ serde = { version = "1.0.152", features = ["derive"] } serde-tuple-vec-map = "1.0.1" serde_json = "1.0.91" thiserror = "1.0.38" -toml = "0.5.11" +toml = "0.6.0" url = { version = "2.3.1", features = ["serde"] } [dev-dependencies] diff --git a/crates/binstalk-manifests/src/cargo_crates_v1.rs b/crates/binstalk-manifests/src/cargo_crates_v1.rs index 27a7fbe1..42a58a7c 100644 --- a/crates/binstalk-manifests/src/cargo_crates_v1.rs +++ b/crates/binstalk-manifests/src/cargo_crates_v1.rs @@ -13,6 +13,7 @@ use std::{ io::{self, Seek}, iter::IntoIterator, path::{Path, PathBuf}, + str::{self, Utf8Error}, }; use beef::Cow; @@ -54,7 +55,7 @@ impl CratesToml<'_> { if vec.is_empty() { Ok(CratesToml::default()) } else { - toml::from_slice(&vec).map_err(CratesTomlParseError::from) + toml::from_str(str::from_utf8(&vec)?).map_err(CratesTomlParseError::from) } } @@ -89,7 +90,7 @@ impl CratesToml<'_> { this: &CratesToml<'_>, writer: &mut dyn io::Write, ) -> Result<(), CratesTomlParseError> { - let data = toml::to_vec(&this)?; + let data = toml::to_string(&this)?.into_bytes(); writer.write_all(&data)?; Ok(()) } @@ -184,8 +185,11 @@ pub enum CratesTomlParseError { #[error(transparent)] Io(#[from] io::Error), + #[error("Failed to parse toml: File is not in valid utf-8 encodings: {0}")] + TomlParseNonUtf8(#[from] Utf8Error), + #[error(transparent)] - TomlParse(#[from] toml::de::Error), + TomlParse(Box), #[error(transparent)] TomlWrite(Box), @@ -206,6 +210,12 @@ impl From for CratesTomlParseError { } } +impl From for CratesTomlParseError { + fn from(e: toml::de::Error) -> Self { + CratesTomlParseError::TomlParse(Box::new(e)) + } +} + #[cfg(test)] mod tests { use super::*;