diff --git a/src/fot/decoder.rs b/src/fot/decoder.rs index 2800a1c..41990e5 100644 --- a/src/fot/decoder.rs +++ b/src/fot/decoder.rs @@ -4,7 +4,7 @@ use super::raw::Raw; pub trait Decoder: Sized { fn decode(raw: &Raw, offset: usize, size: usize) -> Result; - fn encode(&self) -> Raw; + fn encode(&self) -> Result; fn get_enc_size(&self) -> usize; } @@ -17,10 +17,10 @@ impl Decoder for String { } } - fn encode(&self) -> Raw { + fn encode(&self) -> Result { let mut str = self.as_bytes().to_vec(); str.push(0); - Raw { offset: 0, size: str.len(), mem: str} + Ok(Raw { offset: 0, size: str.len(), mem: str}) } fn get_enc_size(&self) -> usize { diff --git a/src/fot/fstring.rs b/src/fot/fstring.rs index be9789a..97ad53c 100644 --- a/src/fot/fstring.rs +++ b/src/fot/fstring.rs @@ -38,21 +38,21 @@ impl Decoder for FString { } } - fn encode(&self) -> Raw { + fn encode(&self) -> Result { let mut buf = vec![0u8; 4]; let mut wdr = Cursor::new(&mut buf[..]); if self.encoding == FStringEncoding::ANSI { - let _ = wdr.write_u32::(self.str.len() as u32 ^ (1<<31)); + wdr.write_u32::(self.str.len() as u32 ^ (1<<31))?; buf.append(&mut self.str.clone().into_bytes()); } else { // WCS2 let (chars, _, _) = WINDOWS_1251.encode(self.str.as_str()); - let _ = wdr.write_u32::(chars.len() as u32 | (1<<31)); + wdr.write_u32::(chars.len() as u32 | (1<<31))?; for &c in chars.iter() { buf.push(c); buf.push(0); } }; - Raw { offset: 0, size: buf.len(), mem: buf } + Ok(Raw { offset: 0, size: buf.len(), mem: buf }) } fn get_enc_size(&self) -> usize { diff --git a/src/fot/save.rs b/src/fot/save.rs index 7c930d6..154288d 100644 --- a/src/fot/save.rs +++ b/src/fot/save.rs @@ -52,7 +52,7 @@ impl Save { pub fn save(&self, path: &Path) -> Result<()> { self.raw.assemble_file(path, vec![ - self.world.encode() + self.world.encode()? ])?; Ok(()) diff --git a/src/fot/tag.rs b/src/fot/tag.rs index 5f9dab2..955651e 100644 --- a/src/fot/tag.rs +++ b/src/fot/tag.rs @@ -15,11 +15,11 @@ impl Decoder for Tag { Ok(Tag {name, version}) } - fn encode(&self) -> Raw { - Raw::join(0, self.get_enc_size(), &mut [ - self.name.encode(), - self.version.encode() - ]) + fn encode(&self) -> Result { + Ok(Raw::join(0, self.get_enc_size(), &mut [ + self.name.encode()?, + self.version.encode()? + ])) } fn get_enc_size(&self) -> usize { diff --git a/src/fot/world.rs b/src/fot/world.rs index e200800..71e3848 100644 --- a/src/fot/world.rs +++ b/src/fot/world.rs @@ -45,7 +45,7 @@ impl Decoder for World { Ok(World { tag, uncompressed_size, data: Raw { offset, size, mem: data } }) } - fn encode(&self) -> Raw { + fn encode(&self) -> Result { let mut hdr = [0u8; 8]; { let mut wdr = Cursor::new(&mut hdr[..]); @@ -54,11 +54,11 @@ impl Decoder for World { } let data = deflate_bytes_zlib(&self.data.mem); - Raw::join(self.data.offset, self.data.size, &mut [ - self.tag.encode(), + Ok(Raw::join(self.data.offset, self.data.size, &mut [ + self.tag.encode()?, Raw { offset: Self::WORLD_TAG_LEN, size: 8, mem: hdr.to_vec()}, Raw { offset: Self::WORLD_HDR_LEN, size: data.len(), mem: data} - ]) + ])) } fn get_enc_size(&self) -> usize {