Files
wotbreplay-parser/src/models/data/entity_method.rs
T

44 lines
1020 B
Rust
Raw Normal View History

2023-04-30 19:32:35 +02:00
use std::io::Read;
2023-04-29 22:17:12 +02:00
use byteorder::{LittleEndian, ReadBytesExt};
use serde::Serialize;
use serde_with::serde_as;
2023-04-29 22:17:12 +02:00
use crate::result::Result;
#[serde_as]
2023-04-29 22:17:12 +02:00
#[derive(Debug, Serialize)]
pub enum EntityMethod {
2023-04-30 19:32:35 +02:00
Subtype2F {
// prefix: [u8; 9],
},
2023-04-29 22:17:12 +02:00
2023-04-30 19:32:35 +02:00
/// Default variant when subtype is not known by the parser.
Unknown {
sub_type: u32,
/// Whole packet payload (including the sub-type).
#[serde_as(as = "serde_with::hex::Hex")]
payload: Vec<u8>,
},
2023-04-29 22:17:12 +02:00
}
impl EntityMethod {
pub fn new(payload: Vec<u8>) -> Result<Self> {
let mut reader = payload.as_slice();
reader.read_u32::<LittleEndian>()?;
let sub_type = reader.read_u32::<LittleEndian>()?;
let this = match sub_type {
2023-04-30 19:32:35 +02:00
0x2F => {
// let mut prefix = [0; 9];
// reader.read_exact(&mut prefix)?;
Self::Subtype2F {}
}
2023-04-29 22:17:12 +02:00
_ => Self::Unknown { sub_type, payload },
};
Ok(this)
}
}