diff --git a/crates/binstalk-manifests/src/cargo_crates_v1.rs b/crates/binstalk-manifests/src/cargo_crates_v1.rs index 7be49cb7..f5315682 100644 --- a/crates/binstalk-manifests/src/cargo_crates_v1.rs +++ b/crates/binstalk-manifests/src/cargo_crates_v1.rs @@ -99,6 +99,37 @@ impl CratesToml<'_> { self.write_to_file(&mut file) } + pub fn append_to_file<'a, Iter>(file: &mut File, iter: Iter) -> Result<(), CratesTomlParseError> + where + Iter: IntoIterator, + { + fn inner( + file: &mut File, + iter: &mut dyn Iterator, + ) -> Result<(), CratesTomlParseError> { + let mut c1 = CratesToml::load_from_reader(&mut *file)?; + + for metadata in iter { + let name = &metadata.name; + let version = &metadata.current_version; + let source = Source::from(&metadata.source); + + c1.remove(name); + c1.v1.push(( + format!("{name} {version} ({source})"), + Cow::borrowed(&metadata.bins), + )); + } + + file.rewind()?; + c1.write_to_file(file)?; + + Ok(()) + } + + inner(file, &mut iter.into_iter()) + } + pub fn append_to_path<'a, Iter>( path: impl AsRef, iter: Iter, @@ -107,28 +138,7 @@ impl CratesToml<'_> { Iter: IntoIterator, { let mut file = FileLock::new_exclusive(create_if_not_exist(path.as_ref())?)?; - let mut c1 = if file.metadata()?.len() != 0 { - Self::load_from_reader(&mut *file)? - } else { - Self::default() - }; - - for metadata in iter { - let name = &metadata.name; - let version = &metadata.current_version; - let source = Source::from(&metadata.source); - - c1.remove(name); - c1.v1.push(( - format!("{name} {version} ({source})"), - Cow::borrowed(&metadata.bins), - )); - } - - file.rewind()?; - c1.write_to_file(&mut file)?; - - Ok(()) + Self::append_to_file(&mut file, iter) } pub fn append<'a, Iter>(iter: Iter) -> Result<(), CratesTomlParseError>