diff options
author | Rosyid Haryadi <rosyid_haryadi@protonmail.com> | 2025-03-18 11:44:26 +0700 |
---|---|---|
committer | Rosyid Haryadi <rosyid_haryadi@protonmail.com> | 2025-03-18 11:44:26 +0700 |
commit | a173c17a4b45f30a0190050beb96684cf03ab5f0 (patch) | |
tree | 826f277a6ac53924245ed7b841042f32dd4c4c40 /src | |
parent | 52b0d3db1289a74aa4817b211c3fcbf0bba84a99 (diff) |
upd: obj serialization
Diffstat (limited to 'src')
-rw-r--r-- | src/object.rs | 6 | ||||
-rw-r--r-- | src/utilities.rs | 10 |
2 files changed, 13 insertions, 3 deletions
diff --git a/src/object.rs b/src/object.rs index 90a06f4..12f83ae 100644 --- a/src/object.rs +++ b/src/object.rs @@ -1,4 +1,4 @@ -use crate::utilities::deserialize_kv_with_message; +use crate::utilities::{deserialize_kv_with_message, serialize_kv_with_message}; use crate::{create_path_or_die, die}; use derive_is_enum_variant::is_enum_variant; use flate2::read::{ZlibDecoder, ZlibEncoder}; @@ -139,4 +139,8 @@ impl GitCommit { let (header, message) = deserialize_kv_with_message(&git_object.data); Self { header, message } } + + pub fn serialize(&self) -> Vec<u8> { + serialize_kv_with_message(&self.header, self.message.as_str()) + } }
\ No newline at end of file diff --git a/src/utilities.rs b/src/utilities.rs index 1a19f20..c918a2d 100644 --- a/src/utilities.rs +++ b/src/utilities.rs @@ -97,8 +97,14 @@ pub fn deserialize_kv_with_message(data: &Vec<u8>) -> (IndexMap<String, String>, (header, message) } -pub fn serialize_kv_with_message(header: &HashMap<String, String>, message: &str) { +pub fn serialize_kv_with_message(header: &IndexMap<String, String>, message: &str) -> Vec<u8> { + let mut result: Vec<u8> = Vec::new(); for (key, val) in header.into_iter() { - + let val = val.replace("\n ", "\n"); + result.extend(key.as_bytes()); + result.extend(val.as_bytes()); } + result.push(b'\n'); + result.extend(message.as_bytes()); + result } |