diff --git a/src/fot/decoder.rs b/src/fot/decoder.rs index 5163cd0..006f9c5 100644 --- a/src/fot/decoder.rs +++ b/src/fot/decoder.rs @@ -5,6 +5,7 @@ use crate::fot::raw::Raw; pub trait Decoder: Sized { fn decode(raw: &Raw, offset: usize, size: usize) -> Result; fn encode(&self) -> Raw; + fn get_enc_len(&self) -> usize; } impl Decoder for String { @@ -21,4 +22,8 @@ impl Decoder for String { str.push(0); Raw { offset: 0, size: str.len(), mem: str} } + + fn get_enc_len(&self) -> usize { + self.len() + 1 + } } \ No newline at end of file diff --git a/src/fot/tag.rs b/src/fot/tag.rs index e3c6502..dfcb6ae 100644 --- a/src/fot/tag.rs +++ b/src/fot/tag.rs @@ -8,12 +8,6 @@ pub struct Tag { pub version: String } -impl Tag { - pub fn get_tag_len(&self) -> usize { - self.name.len() + 1 + self.version.len() + 1 - } -} - impl Decoder for Tag { fn decode(raw: &Raw, offset: usize, size: usize) -> Result { let name = String::decode(raw, offset, size)?; @@ -22,9 +16,13 @@ impl Decoder for Tag { } fn encode(&self) -> Raw { - Raw::join(0, self.get_tag_len(), &mut [ + Raw::join(0, self.get_enc_len(), &mut [ self.name.encode(), self.version.encode() ]) } + + fn get_enc_len(&self) -> usize { + self.name.get_enc_len() + self.version.get_enc_len() + } } \ No newline at end of file diff --git a/src/fot/world.rs b/src/fot/world.rs index b5e1710..cc76fcc 100644 --- a/src/fot/world.rs +++ b/src/fot/world.rs @@ -49,4 +49,8 @@ impl Decoder for World { Raw { offset: Self::WORLD_HDR_LEN, size: data.len(), mem: data} ]) } + + fn get_enc_len(&self) -> usize { + Self::WORLD_HDR_LEN + self.data.mem.len() + } } \ No newline at end of file