From 1907dab5ee4e08bf11cbdec135a797b844cabf8f Mon Sep 17 00:00:00 2001 From: Ming-Hung Tsai Date: Tue, 18 May 2021 17:11:21 +0800 Subject: [PATCH] [cache (rust)] Implement Pack and Default for restoration --- src/cache/hint.rs | 17 +++++++++++++++++ src/cache/mapping.rs | 18 ++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/src/cache/hint.rs b/src/cache/hint.rs index b066645..7dcc709 100644 --- a/src/cache/hint.rs +++ b/src/cache/hint.rs @@ -1,3 +1,5 @@ +use anyhow::Result; +use byteorder::WriteBytesExt; use nom::IResult; use std::convert::TryInto; @@ -26,4 +28,19 @@ impl Unpack for Hint { } } +impl Pack for Hint { + fn pack(&self, data: &mut W) -> Result<()> { + for v in &self.hint { + data.write_u8(*v)?; + } + Ok(()) + } +} + +impl Default for Hint { + fn default() -> Self { + Hint { hint: [0; 4] } + } +} + //------------------------------------------ diff --git a/src/cache/mapping.rs b/src/cache/mapping.rs index ac5a036..eed1840 100644 --- a/src/cache/mapping.rs +++ b/src/cache/mapping.rs @@ -1,3 +1,5 @@ +use anyhow::Result; +use byteorder::WriteBytesExt; use nom::number::complete::*; use nom::IResult; @@ -51,4 +53,20 @@ impl Unpack for Mapping { } } +impl Pack for Mapping { + fn pack(&self, data: &mut W) -> Result<()> { + let m: u64 = (self.oblock << 16) | self.flags as u64; + m.pack(data) + } +} + +impl Default for Mapping { + fn default() -> Self { + Mapping { + oblock: 0, + flags: 0, + } + } +} + //------------------------------------------