diff --git a/src/metafiles/binstall_v1.rs b/src/metafiles/binstall_v1.rs index 3ed2a1bc..0089c5bb 100644 --- a/src/metafiles/binstall_v1.rs +++ b/src/metafiles/binstall_v1.rs @@ -84,3 +84,27 @@ pub enum Error { #[error(transparent)] SerdeJsonParse(#[from] serde_json::Error), } + +pub fn append_to_path<Iter>(path: impl AsRef<Path>, iter: Iter) -> Result<(), Error> +where + Iter: IntoIterator<Item = Entry>, +{ + let file = FileLock::new_exclusive( + fs::OpenOptions::new() + .create(true) + .append(true) + .open(path)?, + )?; + + let writer = io::BufWriter::with_capacity(512, file); + + let mut ser = serde_json::Serializer::new(writer); + + for item in iter { + item.serialize(&mut ser)?; + } + + ser.into_inner().flush()?; + + Ok(()) +}