summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/object.rs6
-rw-r--r--src/utilities.rs10
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
}