|
@@ -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();
|