From c87d42d2d84ad37c9a85c49d4e15cded49765fa5 Mon Sep 17 00:00:00 2001 From: Jiahao XU Date: Wed, 28 Dec 2022 11:31:47 +1100 Subject: [PATCH] Fix `CratesToml::load_from_reader`: Ret default for empty reader (#622) Fixed #621 Also add a new unit test for this bug. Signed-off-by: Jiahao XU --- .../binstalk-manifests/src/cargo_crates_v1.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/crates/binstalk-manifests/src/cargo_crates_v1.rs b/crates/binstalk-manifests/src/cargo_crates_v1.rs index b9528220..7be49cb7 100644 --- a/crates/binstalk-manifests/src/cargo_crates_v1.rs +++ b/crates/binstalk-manifests/src/cargo_crates_v1.rs @@ -49,7 +49,12 @@ impl CratesToml<'_> { pub fn load_from_reader(mut reader: R) -> Result { let mut vec = Vec::new(); reader.read_to_end(&mut vec)?; - Ok(toml::from_slice(&vec)?) + + if vec.is_empty() { + Ok(Self::default()) + } else { + toml::from_slice(&vec).map_err(CratesTomlParseError::from) + } } pub fn load_from_path(path: impl AsRef) -> Result { @@ -246,6 +251,16 @@ mod tests { ); } + #[test] + fn test_empty_file() { + let tempdir = TempDir::new().unwrap(); + let path = tempdir.path().join("crates-v1.toml"); + + File::create(&path).unwrap(); + + assert!(CratesToml::load_from_path(&path).unwrap().v1.is_empty()); + } + #[test] fn test_loading() { let raw_data = br#"