Skip to main content

steel_protocol/packets/config/
s_select_known.rs

1use 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}