From 0c04e466af38cae3ead18ed3614590a96bcfcd98 Mon Sep 17 00:00:00 2001 From: mykola2312 <49044616+mykola2312@users.noreply.github.com> Date: Thu, 7 Sep 2023 15:43:40 +0300 Subject: [PATCH] the same update but for DecoderOpt --- src/fot/decoder.rs | 2 +- src/fot/entity.rs | 5 ++--- src/fot/entitylist.rs | 5 ++--- src/fot/stream.rs | 8 ++------ 4 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/fot/decoder.rs b/src/fot/decoder.rs index 2bf77ae..a0f24eb 100644 --- a/src/fot/decoder.rs +++ b/src/fot/decoder.rs @@ -11,7 +11,7 @@ pub trait Decoder: Sized { pub trait DecoderCtx: Sized { fn decode(raw: &Raw, offset: usize, size: usize, ctx: DCtx) -> Result; - fn encode(&self, ctx: ECtx) -> Result; + fn encode(&self, wd: &mut WriteStream, ctx: ECtx) -> Result<()>; fn get_enc_size(&self) -> usize; } diff --git a/src/fot/entity.rs b/src/fot/entity.rs index d2ae286..8acfb24 100644 --- a/src/fot/entity.rs +++ b/src/fot/entity.rs @@ -51,8 +51,7 @@ impl DecoderCtx<&mut EntityList, &EntityList> for Entity { }) } - fn encode(&self, ctx: &EntityList) -> Result { - let mut wd = WriteStream::new(self.get_enc_size()); + fn encode(&self, wd: &mut WriteStream, ctx: &EntityList) -> Result<()> { match ctx.get_entity_encoding() { EntityEncoding::File => { wd.write(ctx.get_type_name(self.type_idx))?; @@ -67,7 +66,7 @@ impl DecoderCtx<&mut EntityList, &EntityList> for Entity { } } } - Ok(wd.into_raw(0, 0)) + Ok(()) } fn get_enc_size(&self) -> usize { diff --git a/src/fot/entitylist.rs b/src/fot/entitylist.rs index 8643e64..12b2206 100644 --- a/src/fot/entitylist.rs +++ b/src/fot/entitylist.rs @@ -129,8 +129,7 @@ impl DecoderCtx for EntityList { }) } - fn encode(&self, ctx: EntityEncoding) -> Result { - let mut wd = WriteStream::new(self.get_enc_size()); + fn encode(&self, wd: &mut WriteStream, ctx: EntityEncoding) -> Result<()> { match ctx { EntityEncoding::File => { for ent in self.ents.iter() { @@ -156,7 +155,7 @@ impl DecoderCtx for EntityList { } } - Ok(wd.into_raw(0, 0)) + Ok(()) } fn get_enc_size(&self) -> usize { diff --git a/src/fot/stream.rs b/src/fot/stream.rs index db34383..f159c93 100644 --- a/src/fot/stream.rs +++ b/src/fot/stream.rs @@ -125,16 +125,12 @@ impl WriteStream { val: &T, ctx: ECtx, ) -> Result<()> { - let mut raw = val.encode(ctx)?; - self.skip(raw.mem.len()); - self.buf.get_mut().append(&mut raw.mem); + self.reserve(val.get_enc_size()); + val.encode(self, ctx)?; Ok(()) } pub fn write(&mut self, val: &T) -> Result<()> { - //let mut raw = val.encode()?; - //self.skip(raw.mem.len()); - //self.buf.get_mut().append(&mut raw.mem); self.reserve(val.get_enc_size()); val.encode(self)?; Ok(())