evtc_parse/
event.rs

1use crate::{util::Endian, Event, Parse, Save};
2use byteorder::{ReadBytesExt, WriteBytesExt};
3use std::io;
4
5impl Parse for Event {
6    type Error = io::Error;
7
8    fn parse(input: &mut impl io::Read) -> Result<Self, Self::Error> {
9        Ok(Self {
10            time: input.read_u64::<Endian>()?,
11            src_agent: input.read_u64::<Endian>()?,
12            dst_agent: input.read_u64::<Endian>()?,
13            value: input.read_i32::<Endian>()?,
14            buff_dmg: input.read_i32::<Endian>()?,
15            overstack_value: input.read_u32::<Endian>()?,
16            skill_id: input.read_u32::<Endian>()?,
17            src_instance_id: input.read_u16::<Endian>()?,
18            dst_instance_id: input.read_u16::<Endian>()?,
19            src_master_instance_id: input.read_u16::<Endian>()?,
20            dst_master_instance_id: input.read_u16::<Endian>()?,
21            affinity: input.read_u8()?,
22            buff: input.read_u8()?,
23            result: input.read_u8()?,
24            is_activation: input.read_u8()?,
25            is_buffremove: input.read_u8()?,
26            is_ninety: input.read_u8()?,
27            is_fifty: input.read_u8()?,
28            is_moving: input.read_u8()?,
29            is_statechange: input.read_u8()?,
30            is_flanking: input.read_u8()?,
31            is_shields: input.read_u8()?,
32            is_offcycle: input.read_u8()?,
33            pad61: input.read_u8()?,
34            pad62: input.read_u8()?,
35            pad63: input.read_u8()?,
36            pad64: input.read_u8()?,
37        })
38    }
39}
40
41impl Save for Event {
42    type Error = io::Error;
43
44    fn save(&self, output: &mut impl io::Write) -> Result<(), Self::Error> {
45        output.write_u64::<Endian>(self.time)?;
46        output.write_u64::<Endian>(self.src_agent)?;
47        output.write_u64::<Endian>(self.dst_agent)?;
48        output.write_i32::<Endian>(self.value)?;
49        output.write_i32::<Endian>(self.buff_dmg)?;
50        output.write_u32::<Endian>(self.overstack_value)?;
51        output.write_u32::<Endian>(self.skill_id)?;
52        output.write_u16::<Endian>(self.src_instance_id)?;
53        output.write_u16::<Endian>(self.dst_instance_id)?;
54        output.write_u16::<Endian>(self.src_master_instance_id)?;
55        output.write_u16::<Endian>(self.dst_master_instance_id)?;
56        output.write_u8(self.affinity)?;
57        output.write_u8(self.buff)?;
58        output.write_u8(self.result)?;
59        output.write_u8(self.is_activation)?;
60        output.write_u8(self.is_buffremove)?;
61        output.write_u8(self.is_ninety)?;
62        output.write_u8(self.is_fifty)?;
63        output.write_u8(self.is_moving)?;
64        output.write_u8(self.is_statechange)?;
65        output.write_u8(self.is_flanking)?;
66        output.write_u8(self.is_shields)?;
67        output.write_u8(self.is_offcycle)?;
68        output.write_u8(self.pad61)?;
69        output.write_u8(self.pad62)?;
70        output.write_u8(self.pad63)?;
71        output.write_u8(self.pad64)
72    }
73}