ireko/src/enum_property.rs

61 lines
1.6 KiB
Rust
Raw Normal View History

2025-02-25 19:45:36 -05:00
use binrw::binrw;
use crate::common::{read_string_with_length, write_string_with_length};
#[binrw]
#[derive(Debug)]
pub struct EnumProperty {
#[br(pad_before = 8)] // unk
#[br(parse_with = read_string_with_length)]
#[bw(write_with = write_string_with_length)]
pub enum_type: String,
#[br(pad_before = 1)]
#[br(parse_with = read_string_with_length)]
#[bw(write_with = write_string_with_length)]
pub value: String,
}
#[cfg(test)]
mod tests {
use super::*;
use binrw::{BinRead, BinWrite};
use std::io::Cursor;
#[test]
2025-02-25 19:47:51 -05:00
fn read_enum() {
2025-02-25 19:45:36 -05:00
// Persistent.sav
let data = [
0x29, 0x00, 0x00,
0x00, 0x00, 0x00,
0x00, 0x00, 0x18,
0x00, 0x00, 0x00,
0x45, 0x44, 0x41,
0x57, 0x65, 0x61,
0x70, 0x6f, 0x6e,
0x4d, 0x6f, 0x64,
0x75, 0x6c, 0x65,
0x50, 0x6f, 0x73,
0x69, 0x74, 0x69,
0x6f, 0x6e, 0x00,
2025-02-25 19:47:51 -05:00
0x00, 0x25, 0x00,
0x00, 0x00, 0x45,
0x44, 0x41, 0x57,
0x65, 0x61, 0x70,
0x6f, 0x6e, 0x4d,
0x6f, 0x64, 0x75,
0x6c, 0x65, 0x50,
0x6f, 0x73, 0x69,
0x74, 0x69, 0x6f,
0x6e, 0x3a, 0x3a,
0x46, 0x72, 0x6f,
0x6e, 0x74, 0x57,
0x65, 0x61, 0x70,
0x6f, 0x6e, 0x00
2025-02-25 19:45:36 -05:00
];
let mut cursor = Cursor::new(data);
let decoded = EnumProperty::read_le(&mut cursor).unwrap();
2025-02-25 19:47:51 -05:00
assert_eq!(decoded.enum_type, "EDAWeaponModulePosition");
assert_eq!(decoded.value, "EDAWeaponModulePosition::FrontWeapon");
2025-02-25 19:45:36 -05:00
}
}