diff options
| -rw-r--r-- | src/object.rs | 29 | ||||
| -rw-r--r-- | todo.txt | 2 |
2 files changed, 31 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) +} diff --git a/todo.txt b/todo.txt new file mode 100644 index 0000000..4c33ef3 --- /dev/null +++ b/todo.txt @@ -0,0 +1,2 @@ +- [ ] rewrite fast-glob to take arbitrary paths that are not UTF-8 +- [ ] helper functions for objects |
