Kevin Lee 1 year ago
parent
commit
13b0674672
2 changed files with 10 additions and 8 deletions
  1. 5 6
      src/ezcad/file.rs
  2. 5 2
      src/ezcad/pen.rs

+ 5 - 6
src/ezcad/file.rs

@@ -2,11 +2,7 @@ use std::io::{Seek, SeekFrom, Write};
 
 use binrw::{BinRead, BinResult, BinWrite, BinWriterExt, Endian, FilePtr64};
 
-use crate::{
-    array_of::ArrayOf,
-    layer::{self, Layer},
-    pen::PenHeader,
-};
+use crate::{array_of::ArrayOf, layer::Layer, pen::PenHeader};
 
 #[derive(BinRead, Debug)]
 pub struct Header {
@@ -19,6 +15,8 @@ pub struct Header {
     _unknown_2: [u8; 0x1A8],
 }
 
+// Manually implement BinWrite as FilePtr does not support serialization
+// See: https://github.com/jam1garner/binrw/issues/4
 impl BinWrite for Header {
     type Args<'a> = ();
 
@@ -31,7 +29,7 @@ impl BinWrite for Header {
         self._magic.write_options(writer, endian, args)?;
         self._unknown_1.write_options(writer, endian, args)?;
 
-        // Save address and write placeholder (zeros) for now
+        // Save offset addresses and write placeholder (zeros) for now
         let thumbnail_save_offset: u64 = writer.stream_position().unwrap();
         0u64.write_options(writer, endian, args)?;
         let pens_save_offset: u64 = writer.stream_position().unwrap();
@@ -43,6 +41,7 @@ impl BinWrite for Header {
 
         self._unknown_2.write_options(writer, endian, args)?;
 
+        // Helper fn to write current address to given offset without modifying cursor position
         let write_offset = |writer: &mut W, offset: u64| -> BinResult<()> {
             let current_offset: u64 = writer.stream_position().unwrap();
             writer.seek(SeekFrom::Start(offset)).unwrap();

+ 5 - 2
src/ezcad/pen.rs

@@ -16,6 +16,8 @@ pub struct PenHeader {
     pub data: FilePtr64<Pens>,
 }
 
+// Manually implement BinWrite as FilePtr does not support serialization
+// See: https://github.com/jam1garner/binrw/issues/4
 impl BinWrite for PenHeader {
     type Args<'a> = ();
 
@@ -28,8 +30,9 @@ impl BinWrite for PenHeader {
         let pen_count: u32 = self.data.pens.len().try_into().unwrap();
         pen_count.write_options(writer, endian, args)?;
 
-        let position: u64 = writer.stream_position().unwrap() + 8;
-        position.write_options(writer, endian, args)?;
+        // Write address of data, which is placed after this field
+        let data_offset: u64 = writer.stream_position().unwrap() + 8;
+        data_offset.write_options(writer, endian, args)?;
 
         self.data.pens.write_options(writer, endian, args)
     }