From d2f423521ec76406944ad83098ec33afe20c692b Mon Sep 17 00:00:00 2001 From: Kim Altintop Date: Mon, 9 Jan 2023 13:18:33 +0100 Subject: This is it Squashed commit of all the exploration history. Development starts here. Signed-off-by: Kim Altintop --- src/json.rs | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/json.rs (limited to 'src/json.rs') diff --git a/src/json.rs b/src/json.rs new file mode 100644 index 0000000..52f6215 --- /dev/null +++ b/src/json.rs @@ -0,0 +1,49 @@ +// Copyright © 2022 Kim Altintop +// SPDX-License-Identifier: GPL-2.0-only WITH openvpn-openssl-exception + +use std::{ + fs::File, + io::BufReader, + path::Path, +}; + +use serde::{ + de::DeserializeOwned, + Deserialize, + Serialize, +}; + +pub mod canonical; + +pub fn from_blob<'a, T>(blob: &'a git2::Blob) -> crate::Result +where + T: Deserialize<'a>, +{ + Ok(serde_json::from_slice(blob.content())?) +} + +pub fn to_blob(repo: &git2::Repository, data: &T) -> crate::Result +where + T: Serialize, +{ + let mut writer = repo.blob_writer(None)?; + serde_json::to_writer_pretty(&mut writer, data)?; + Ok(writer.commit()?) +} + +pub fn from_file(path: P) -> crate::Result +where + P: AsRef, + T: DeserializeOwned, +{ + let file = File::open(path)?; + Ok(serde_json::from_reader(BufReader::new(file))?) +} + +pub fn load(path: P) -> crate::Result +where + P: AsRef, + T: DeserializeOwned, +{ + from_file(path) +} -- cgit v1.2.3