23 lines
572 B
Rust
23 lines
572 B
Rust
use std::io::{Cursor, Read};
|
|
|
|
use sqpack::binrw::BinRead;
|
|
use sqpack::binrw::meta::ReadEndian;
|
|
|
|
use crate::error::{Error, Result};
|
|
|
|
pub const MAX_MODEL_LODS: usize = 3;
|
|
pub const MAX_TEXTURE_LODS: usize = 3;
|
|
|
|
pub fn read_struct<S: BinRead + ReadEndian, T: Read>(mut reader: T, buf: &mut [u8]) -> Result<S>
|
|
where S::Args: Default,
|
|
{
|
|
let size = std::mem::size_of::<S>();
|
|
if size > buf.len() {
|
|
panic!();
|
|
}
|
|
|
|
reader.read_exact(&mut buf[..size]).map_err(Error::Io)?;
|
|
S::read(&mut Cursor::new(&buf[..size]))
|
|
.map_err(Error::SqPackError)
|
|
}
|