52 lines
1.7 KiB
Rust
52 lines
1.7 KiB
Rust
use crate::common::{read_string_with_length, write_string_with_length};
|
|
use binrw::binrw;
|
|
|
|
#[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,
|
|
}
|
|
|
|
impl crate::structs::PropertyBase for EnumProperty {
|
|
fn type_name() -> &'static str {
|
|
"EnumProperty"
|
|
}
|
|
|
|
fn size_in_bytes(&self) -> u32 {
|
|
8 + crate::common::size_of_string_with_length(&self.enum_type)
|
|
+ 1
|
|
+ crate::common::size_of_string_with_length(&self.value)
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
use binrw::BinRead;
|
|
use std::io::Cursor;
|
|
|
|
#[test]
|
|
fn read_enum() {
|
|
// 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, 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,
|
|
];
|
|
let mut cursor = Cursor::new(data);
|
|
let decoded = EnumProperty::read_le(&mut cursor).unwrap();
|
|
assert_eq!(decoded.enum_type, "EDAWeaponModulePosition");
|
|
assert_eq!(decoded.value, "EDAWeaponModulePosition::FrontWeapon");
|
|
}
|
|
}
|