// 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) }