diff --git a/src/lib.rs b/src/lib.rs index 6115b67..006c6cd 100755 --- a/src/lib.rs +++ b/src/lib.rs @@ -141,3 +141,9 @@ pub mod hwc; /// Reading IWC files pub mod iwc; + +/// Reading TMB files +pub mod tmb; + +/// Reading SKP files +pub mod skp; diff --git a/src/skp.rs b/src/skp.rs new file mode 100644 index 0000000..e0e38cd --- /dev/null +++ b/src/skp.rs @@ -0,0 +1,36 @@ +// SPDX-FileCopyrightText: 2024 Joshua Goins +// SPDX-License-Identifier: GPL-3.0-or-later + +use std::io::Cursor; + +use crate::ByteSpan; +use binrw::binrw; +use binrw::BinRead; + +#[binrw] +#[derive(Debug)] +#[brw(little)] +struct SkpHeader { + magic: i32, // TODO: what magic? + + #[br(count = 4)] + #[bw(pad_size_to = 4)] + #[bw(map = |x : &String | x.as_bytes())] + #[br(map = | x: Vec | String::from_utf8(x).unwrap().trim_matches(char::from(0)).to_string())] + pub version: String, +} + +#[derive(Debug)] +pub struct Skp { + +} + +impl Skp { + /// Reads an existing ULD file + pub fn from_existing(buffer: ByteSpan) -> Option { + let mut cursor = Cursor::new(buffer); + let header = SkpHeader::read(&mut cursor).ok()?; + + Some(Skp{}) + } +} diff --git a/src/tmb.rs b/src/tmb.rs new file mode 100644 index 0000000..e935675 --- /dev/null +++ b/src/tmb.rs @@ -0,0 +1,32 @@ +// SPDX-FileCopyrightText: 2024 Joshua Goins +// SPDX-License-Identifier: GPL-3.0-or-later + +use std::io::Cursor; + +use crate::ByteSpan; +use binrw::binrw; +use binrw::BinRead; + +#[binrw] +#[derive(Debug)] +#[brw(little)] +struct TmbHeader { + magic: i32, // TODO: figure out what this + size: i32, + entry_count: i32 +} + +#[derive(Debug)] +pub struct Tmb { + +} + +impl Tmb { + /// Reads an existing ULD file + pub fn from_existing(buffer: ByteSpan) -> Option { + let mut cursor = Cursor::new(buffer); + let header = TmbHeader::read(&mut cursor).ok()?; + + Some(Tmb{}) + } +}