Struct ssbh_lib::SsbhEnum64[][src]

pub struct SsbhEnum64<T: BinRead<Args = (u64,)> + SsbhWrite> {
    pub data: RelPtr64<T>,
    pub data_type: u64,
}
Expand description

Parses a struct with a relative offset to a structure of type T with some data type. Parsing will fail if there is no matching variant for data_type.

use binread::BinRead;

#[derive(BinRead)]
struct EnumData {
    data_relative_offset: u64,
    data_type: u64
}

This can instead be expressed as the following struct. The T type should have line to specify that it takes the data type as an argument. data_type is automatically passed as an argument when reading T.

use binread::BinRead;
use ssbh_lib::SsbhEnum64;
use ssbh_lib::SsbhWrite;

impl SsbhWrite for Data {
    fn write_ssbh<W: std::io::Write + std::io::Seek>(
        &self,
        writer: &mut W,
        data_ptr: &mut u64,
    ) -> std::io::Result<()> {
        match self {
            Data::Float(f) => f.write_ssbh(writer, data_ptr),
            Data::Boolean(b) => b.write_ssbh(writer, data_ptr),
        }
    }

    fn size_in_bytes(&self) -> u64 {
        16
    }
}

#[derive(BinRead)]
#[br(import(data_type: u64))]
pub enum Data {
    #[br(pre_assert(data_type == 01u64))]
    Float(f32),
    #[br(pre_assert(data_type == 02u64))]
    Boolean(u32),
    // Add additional variants as needed.
}

#[derive(BinRead)]
pub struct EnumData {
    data: SsbhEnum64<Data>,
}

Fields

data: RelPtr64<T>data_type: u64

Trait Implementations

impl<T> BinRead for SsbhEnum64<T> where
    T: BinRead<Args = (u64,)> + SsbhWrite
[src]

type Args = ()

The type of arguments needed to be supplied in order to read this type, usually a tuple. Read more

fn read_options<R: Read + Seek>(
    reader: &mut R,
    options: &ReadOptions,
    _args: Self::Args
) -> BinResult<Self>
[src]

Read the type from the reader

fn read<R>(reader: &mut R) -> Result<Self, Error> where
    R: Read + Seek
[src]

Read the type from the reader while assuming no arguments have been passed Read more

fn read_args<R>(reader: &mut R, args: Self::Args) -> Result<Self, Error> where
    R: Read + Seek
[src]

Read the type from the reader using the specified arguments

fn after_parse<R>(
    &mut self,
    &mut R,
    &ReadOptions,
    Self::Args
) -> Result<(), Error> where
    R: Read + Seek
[src]

fn args_default() -> Option<Self::Args>[src]

The default arguments to be used when using the read shortcut method. Override this for any type that optionally requries arguments Read more

impl<T: Debug + BinRead<Args = (u64,)> + SsbhWrite> Debug for SsbhEnum64<T>[src]

fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

Formats the value using the given formatter. Read more

impl<'de, T: BinRead<Args = (u64,)> + SsbhWrite> Deserialize<'de> for SsbhEnum64<T> where
    T: Deserialize<'de>, 
[src]

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
    __D: Deserializer<'de>, 
[src]

Deserialize this value from the given Serde deserializer. Read more

impl<T: BinRead<Args = (u64,)> + SsbhWrite> Serialize for SsbhEnum64<T> where
    T: Serialize
[src]

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error> where
    __S: Serializer
[src]

Serialize this value into the given Serde serializer. Read more

impl<T: BinRead<Args = (u64,)> + SsbhWrite> SsbhWrite for SsbhEnum64<T>[src]

fn write_ssbh<W: Write + Seek>(
    &self,
    writer: &mut W,
    data_ptr: &mut u64
) -> Result<()>
[src]

fn size_in_bytes(&self) -> u64[src]

fn alignment_in_bytes(&self) -> u64[src]

Auto Trait Implementations

impl<T> RefUnwindSafe for SsbhEnum64<T> where
    T: RefUnwindSafe

impl<T> Send for SsbhEnum64<T> where
    T: Send

impl<T> Sync for SsbhEnum64<T> where
    T: Sync

impl<T> Unpin for SsbhEnum64<T> where
    T: Unpin

impl<T> UnwindSafe for SsbhEnum64<T> where
    T: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

impl<T> From<T> for T[src]

pub fn from(t: T) -> T[src]

Performs the conversion.

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

pub fn into(self) -> U[src]

Performs the conversion.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]

Performs the conversion.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]

Performs the conversion.

impl<T> DeserializeOwned for T where
    T: for<'de> Deserialize<'de>, 
[src]