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§

source

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§

source

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.

source

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.

source

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.

Implementations on Foreign Types§

source§

impl SsbhWrite for f32

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, _data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl SsbhWrite for f64

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, _data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl SsbhWrite for i8

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, _data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl SsbhWrite for i16

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, _data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl SsbhWrite for i32

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, _data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl SsbhWrite for i64

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, _data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl SsbhWrite for i128

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, _data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl SsbhWrite for u8

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, _data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl SsbhWrite for u16

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, _data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl SsbhWrite for u32

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, _data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl SsbhWrite for u64

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, _data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl SsbhWrite for u128

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, _data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl SsbhWrite for ()

source§

impl SsbhWrite for NonZeroI8

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, _data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl SsbhWrite for NonZeroI16

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, _data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl SsbhWrite for NonZeroI32

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, _data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl SsbhWrite for NonZeroI64

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, _data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl SsbhWrite for NonZeroI128

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, _data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl SsbhWrite for NonZeroU8

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, _data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl SsbhWrite for NonZeroU16

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, _data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl SsbhWrite for NonZeroU32

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, _data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl SsbhWrite for NonZeroU64

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, _data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl SsbhWrite for NonZeroU128

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, _data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl SsbhWrite for NonZeroUsize

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, _data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl<T: SsbhWrite> SsbhWrite for &[T]

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl<T: SsbhWrite> SsbhWrite for Option<T>

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl<T: SsbhWrite> SsbhWrite for Vec<T>

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

source§

fn alignment_in_bytes() -> u64

source§

impl<T: SsbhWrite, const N: usize> SsbhWrite for [T; N]

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, data_ptr: &mut u64 ) -> Result<()>

source§

fn size_in_bytes(&self) -> u64

Implementors§