steel_protocol/packets/config/
s_select_known.rs1use steel_macros::{ReadFrom, ServerPacket};
2
3use crate::packets::shared_implementation::KnownPack;
4
5#[derive(ReadFrom, ServerPacket, Clone, Debug)]
6pub struct SSelectKnownPacks {
7 #[read(as = Prefixed(VarInt), bound = 64)]
8 pub packs: Vec<KnownPack>,
9}
10
11#[cfg(test)]
12mod tests {
13 use super::SSelectKnownPacks;
14 use crate::packets::shared_implementation::KnownPack;
15 use std::io::Cursor;
16 use steel_utils::codec::VarInt;
17 use steel_utils::serial::{ReadFrom, WriteTo};
18
19 fn encode_packs(count: i32) -> Vec<u8> {
20 let mut data = Vec::new();
21 VarInt(count).write(&mut data).unwrap();
22
23 for _ in 0..count {
24 let pack = KnownPack::new(String::new(), String::new(), String::new());
25 pack.write(&mut data).unwrap();
26 }
27 data
28 }
29
30 #[test]
31 fn accepts_64_packs() {
32 let data = encode_packs(64);
33 let mut cursor = Cursor::new(data.as_slice());
34
35 let packet = SSelectKnownPacks::read(&mut cursor)
36 .expect("64 known packs should decode successfully");
37
38 assert_eq!(packet.packs.len(), 64);
39 }
40
41 #[test]
42 fn rejects_65_packs() {
43 let data = encode_packs(65);
44 let mut cursor = Cursor::new(data.as_slice());
45 assert!(SSelectKnownPacks::read(&mut cursor).is_err());
46 }
47}