wotbreplay_parser/models/data/
entity_method.rs1use byteorder::{LittleEndian, ReadBytesExt};
4use prost::encoding::decode_varint;
5use prost::Message;
6use serde::Serialize;
7use serde_with::serde_as;
8
9use self::update_arena::UpdateArena;
10use crate::models::data::read_quirky_length;
11use crate::result::Result;
12
13pub mod update_arena;
14
15#[serde_as]
16#[derive(Debug, Serialize)]
17pub enum EntityMethod {
18 UpdateArena {
20 field_number: u64,
21 arguments: UpdateArena,
22 },
23
24 Unknown { sub_type: u32 },
26}
27
28impl EntityMethod {
29 pub fn new(raw_payload: &[u8]) -> Result<Self> {
31 let mut raw_payload = raw_payload;
32
33 raw_payload.read_u32::<LittleEndian>()?;
34 let sub_type = raw_payload.read_u32::<LittleEndian>()?;
35
36 let this = match sub_type {
37 47 => {
38 let _inner_length = raw_payload.read_u32::<LittleEndian>()?;
39
40 let field_number = decode_varint(&mut raw_payload)?;
41 let message_length = read_quirky_length(&mut raw_payload)?;
42 Self::UpdateArena {
43 field_number,
44 arguments: UpdateArena::decode(&raw_payload[..message_length])?,
45 }
46 }
47
48 _ => Self::Unknown { sub_type },
49 };
50 Ok(this)
51 }
52}