summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/object.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/object.rs b/src/object.rs
new file mode 100644
index 0000000..e303900
--- /dev/null
+++ b/src/object.rs
@@ -0,0 +1,29 @@
+use std::io::{Read, Write};
+use std::path::{Path, PathBuf};
+
+use serde::de::DeserializeOwned;
+use serde::Serialize;
+
+use crate::{FileInfo, Id, Patch};
+
+fn object_path(pj_dir: impl AsRef<Path>, object: &impl Id, file_type: &str) -> PathBuf {
+ let id = object.id();
+ Path::join(pj_dir.as_ref(), format!("objects/{id}.{file_type}"))
+}
+
+pub fn file_info_object_path(pj_dir: impl AsRef<Path>, file: &FileInfo) -> PathBuf {
+ object_path(pj_dir, file, "file")
+}
+
+pub fn patch_object_path(pj_dir: impl AsRef<Path>, patch: &Patch) -> PathBuf {
+ object_path(pj_dir, patch, "patch")
+}
+
+pub fn write_object(writer: impl Write, object: &impl Serialize) -> std::io::Result<()> {
+ serde_json::to_writer_pretty(writer, &object)?;
+ Ok(())
+}
+
+pub fn read_object<T: DeserializeOwned>(reader: impl Read) -> serde_json::Result<T> {
+ serde_json::from_reader(reader)
+}