Trait ssbh_write::SsbhWrite
source · pub trait SsbhWrite: Sized {
// Required method
fn ssbh_write<W: Write + Seek>(
&self,
writer: &mut W,
data_ptr: &mut u64
) -> Result<()>;
// Provided methods
fn write<W: Write + Seek>(&self, writer: &mut W) -> Result<()> { ... }
fn size_in_bytes(&self) -> u64 { ... }
fn alignment_in_bytes() -> u64 { ... }
}
Expand description
A trait for writing types that are part of SSBH formats.
Required Methods§
sourcefn ssbh_write<W: Write + Seek>(
&self,
writer: &mut W,
data_ptr: &mut u64
) -> Result<()>
fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, data_ptr: &mut u64 ) -> Result<()>
Writes the byte representation of self
to writer
.
data_ptr
is assumed to be the absolute offset where the next data stored behind an offset will be written.
Struct that contains no offsets as fields can skip updating data_ptr
.
§Example
In most cases, simply derive SsbhWrite
. The example demonstrates correctly implementing the trait for an SSBH type.
use ssbh_write::SsbhWrite;
struct MyStruct {
x: f32,
y: u8
}
impl SsbhWrite for MyStruct {
fn ssbh_write<W: std::io::Write + std::io::Seek>(
&self,
writer: &mut W,
data_ptr: &mut u64,
) -> std::io::Result<()> {
// Ensure the next pointer won't point inside this struct.
let current_pos = writer.stream_position()?;
if *data_ptr < current_pos + self.size_in_bytes() {
*data_ptr = current_pos + self.size_in_bytes();
}
// Write all the fields.
self.x.ssbh_write(writer, data_ptr)?;
self.y.ssbh_write(writer, data_ptr)?;
Ok(())
}
}
Provided Methods§
sourcefn write<W: Write + Seek>(&self, writer: &mut W) -> Result<()>
fn write<W: Write + Seek>(&self, writer: &mut W) -> Result<()>
Writes the byte representation of self
to writer
.
This is a convenience method for ssbh_write that handles initializing the data pointer.
sourcefn size_in_bytes(&self) -> u64
fn size_in_bytes(&self) -> u64
The offset in bytes between successive elements in an array of this type. This should include any alignment or padding.
sourcefn alignment_in_bytes() -> u64
fn alignment_in_bytes() -> u64
The alignment for pointers of this type, which is useful for offset calculations.
Object Safety§
This trait is not object safe.