diff --git a/crates/binstalk-manifests/src/cargo_crates_v1.rs b/crates/binstalk-manifests/src/cargo_crates_v1.rs index f5315682..27a7fbe1 100644 --- a/crates/binstalk-manifests/src/cargo_crates_v1.rs +++ b/crates/binstalk-manifests/src/cargo_crates_v1.rs @@ -47,14 +47,18 @@ impl CratesToml<'_> { } pub fn load_from_reader(mut reader: R) -> Result { - let mut vec = Vec::new(); - reader.read_to_end(&mut vec)?; + fn inner(reader: &mut dyn io::Read) -> Result, CratesTomlParseError> { + let mut vec = Vec::new(); + reader.read_to_end(&mut vec)?; - if vec.is_empty() { - Ok(Self::default()) - } else { - toml::from_slice(&vec).map_err(CratesTomlParseError::from) + if vec.is_empty() { + Ok(CratesToml::default()) + } else { + toml::from_slice(&vec).map_err(CratesTomlParseError::from) + } } + + inner(&mut reader) } pub fn load_from_path(path: impl AsRef) -> Result { @@ -81,9 +85,16 @@ impl CratesToml<'_> { } pub fn write_to_writer(&self, mut writer: W) -> Result<(), CratesTomlParseError> { - let data = toml::to_vec(&self)?; - writer.write_all(&data)?; - Ok(()) + fn inner( + this: &CratesToml<'_>, + writer: &mut dyn io::Write, + ) -> Result<(), CratesTomlParseError> { + let data = toml::to_vec(&this)?; + writer.write_all(&data)?; + Ok(()) + } + + inner(self, &mut writer) } pub fn write_to_file(&self, file: &mut File) -> Result<(), CratesTomlParseError> { @@ -95,7 +106,7 @@ impl CratesToml<'_> { } pub fn write_to_path(&self, path: impl AsRef) -> Result<(), CratesTomlParseError> { - let mut file = File::create(path)?; + let mut file = FileLock::new_exclusive(File::create(path)?)?; self.write_to_file(&mut file) } diff --git a/crates/binstalk-manifests/src/helpers.rs b/crates/binstalk-manifests/src/helpers.rs index ac5b35e2..029564c9 100644 --- a/crates/binstalk-manifests/src/helpers.rs +++ b/crates/binstalk-manifests/src/helpers.rs @@ -1,9 +1,7 @@ use std::{fs, io, path::Path}; /// Returned file is readable and writable. -pub(crate) fn create_if_not_exist(path: impl AsRef) -> io::Result { - let path = path.as_ref(); - +pub(crate) fn create_if_not_exist(path: &Path) -> io::Result { let mut options = fs::File::options(); options.read(true).write(true);