From f0b6b7b1afcf43a1018492c4c7a037a990fe4540 Mon Sep 17 00:00:00 2001 From: Jiahao XU Date: Tue, 26 Jul 2022 22:45:59 +1000 Subject: [PATCH] Impl `binstall_v1::append_to_path` Signed-off-by: Jiahao XU --- src/metafiles/binstall_v1.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) 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(path: impl AsRef, iter: Iter) -> Result<(), Error> +where + Iter: IntoIterator, +{ + 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(()) +}