open_dis_rust/common/
event_id.rs

1//     open-dis-rust - Rust implementation of the IEEE-1278.1 Distributed Interactive Simulation
2//     Copyright (C) 2023 Cameron Howell
3//
4//     Licensed under the BSD-2-Clause License
5
6use super::simulation_address::SimulationAddress;
7
8use bytes::{Buf, BufMut, BytesMut};
9
10#[derive(Copy, Clone, Debug, Default)]
11pub struct EventId {
12    pub simulation_address: SimulationAddress,
13    pub event_identifier: u16,
14}
15
16impl EventId {
17    #[must_use]
18    pub fn new(site_identifier: u16, application_identifier: u16, event_identifier: u16) -> Self {
19        EventId {
20            simulation_address: SimulationAddress::new(site_identifier, application_identifier),
21            event_identifier,
22        }
23    }
24
25    #[must_use]
26    pub fn default(event_identifier: u16) -> Self {
27        EventId {
28            simulation_address: SimulationAddress::default(),
29            event_identifier,
30        }
31    }
32
33    pub fn serialize(&self, buf: &mut BytesMut) {
34        self.simulation_address.serialize(buf);
35        buf.put_u16(self.event_identifier);
36    }
37
38    pub fn decode(buf: &mut BytesMut) -> EventId {
39        EventId {
40            simulation_address: SimulationAddress::decode(buf),
41            event_identifier: buf.get_u16(),
42        }
43    }
44}