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]
impl<T> BinRead for SsbhEnum64<T> where
T: BinRead<Args = (u64,)> + SsbhWrite,
[src]type Args = ()
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]
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]
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]
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]
&mut self,
&mut R,
&ReadOptions,
Self::Args
) -> Result<(), Error> where
R: Read + Seek,
impl<'de, T: BinRead<Args = (u64,)> + SsbhWrite> Deserialize<'de> for SsbhEnum64<T> where
T: Deserialize<'de>,
[src]
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]
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
__D: Deserializer<'de>,
[src]Deserialize this value from the given Serde deserializer. Read more
Auto Trait Implementations
impl<T> RefUnwindSafe for SsbhEnum64<T> where
T: RefUnwindSafe,
T: RefUnwindSafe,
impl<T> Send for SsbhEnum64<T> where
T: Send,
T: Send,
impl<T> Sync for SsbhEnum64<T> where
T: Sync,
T: Sync,
impl<T> Unpin for SsbhEnum64<T> where
T: Unpin,
T: Unpin,
impl<T> UnwindSafe for SsbhEnum64<T> where
T: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]pub fn borrow_mut(&mut self) -> &mut T
[src]
pub fn borrow_mut(&mut self) -> &mut T
[src]Mutably borrows from an owned value. Read more
impl<T> DeserializeOwned for T where
T: for<'de> Deserialize<'de>,
[src]
T: for<'de> Deserialize<'de>,