1use crate::identifiers::{ConnectionId, PlayerId, RequestId};
2
3#[derive(Debug, Clone, Default, insim_core::Decode, insim_core::Encode)]
4#[cfg_attr(feature = "serde", derive(serde::Serialize))]
5pub struct Iii {
7 #[insim(pad_after = 1)]
8 pub reqi: RequestId,
10
11 pub ucid: ConnectionId,
13
14 #[insim(pad_after = 2)]
16 pub plid: PlayerId,
17
18 #[insim(codepage(length = 64, align_to = 4, trailing_nul = true))]
20 pub msg: String,
21}
22
23#[cfg(test)]
24mod test {
25 use bytes::BytesMut;
26
27 use super::*;
28
29 #[test]
30 fn test_iii() {
31 let mut raw = BytesMut::new();
32 raw.extend_from_slice(&[
33 0, 0, 2, 4, 0, 0, ]);
40 raw.extend_from_slice(b"abcd");
41
42 assert_from_to_bytes!(Iii, raw.freeze(), |parsed: Iii| {
43 assert_eq!(parsed.reqi, RequestId(0));
44 assert_eq!(parsed.ucid, ConnectionId(2));
45 assert_eq!(parsed.plid, PlayerId(4));
46 assert_eq!(parsed.msg, "abcd");
47 });
48 }
49}