add get_enc_len to Decoder trait

This commit is contained in:
mykola2312 2023-08-28 19:04:57 +03:00
parent 493376a805
commit ecfd10adbc
3 changed files with 14 additions and 7 deletions

View file

@ -5,6 +5,7 @@ use crate::fot::raw::Raw;
pub trait Decoder: Sized { pub trait Decoder: Sized {
fn decode(raw: &Raw, offset: usize, size: usize) -> Result<Self>; fn decode(raw: &Raw, offset: usize, size: usize) -> Result<Self>;
fn encode(&self) -> Raw; fn encode(&self) -> Raw;
fn get_enc_len(&self) -> usize;
} }
impl Decoder for String { impl Decoder for String {
@ -21,4 +22,8 @@ impl Decoder for String {
str.push(0); str.push(0);
Raw { offset: 0, size: str.len(), mem: str} Raw { offset: 0, size: str.len(), mem: str}
} }
fn get_enc_len(&self) -> usize {
self.len() + 1
}
} }

View file

@ -8,12 +8,6 @@ pub struct Tag {
pub version: String pub version: String
} }
impl Tag {
pub fn get_tag_len(&self) -> usize {
self.name.len() + 1 + self.version.len() + 1
}
}
impl Decoder for Tag { impl Decoder for Tag {
fn decode(raw: &Raw, offset: usize, size: usize) -> Result<Self> { fn decode(raw: &Raw, offset: usize, size: usize) -> Result<Self> {
let name = String::decode(raw, offset, size)?; let name = String::decode(raw, offset, size)?;
@ -22,9 +16,13 @@ impl Decoder for Tag {
} }
fn encode(&self) -> Raw { fn encode(&self) -> Raw {
Raw::join(0, self.get_tag_len(), &mut [ Raw::join(0, self.get_enc_len(), &mut [
self.name.encode(), self.name.encode(),
self.version.encode() self.version.encode()
]) ])
} }
fn get_enc_len(&self) -> usize {
self.name.get_enc_len() + self.version.get_enc_len()
}
} }

View file

@ -49,4 +49,8 @@ impl Decoder for World {
Raw { offset: Self::WORLD_HDR_LEN, size: data.len(), mem: data} 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()
}
} }