ironrdp_pdu/rdp/capability_sets/
pointer.rs1#[cfg(test)]
2mod tests;
3
4use ironrdp_core::{ensure_fixed_part_size, Decode, DecodeResult, Encode, EncodeResult, ReadCursor, WriteCursor};
5
6const POINTER_LENGTH: usize = 6;
7
8#[derive(Debug, PartialEq, Eq, Clone)]
9pub struct Pointer {
10 pub color_pointer_cache_size: u16,
11 pub pointer_cache_size: u16,
12}
13
14impl Pointer {
15 const NAME: &'static str = "Pointer";
16
17 const FIXED_PART_SIZE: usize = POINTER_LENGTH;
18}
19
20impl Encode for Pointer {
21 fn encode(&self, dst: &mut WriteCursor<'_>) -> EncodeResult<()> {
22 ensure_fixed_part_size!(in: dst);
23
24 dst.write_u16(1); dst.write_u16(self.color_pointer_cache_size);
26 dst.write_u16(self.pointer_cache_size);
27
28 Ok(())
29 }
30
31 fn name(&self) -> &'static str {
32 Self::NAME
33 }
34
35 fn size(&self) -> usize {
36 Self::FIXED_PART_SIZE
37 }
38}
39
40impl<'de> Decode<'de> for Pointer {
41 fn decode(src: &mut ReadCursor<'de>) -> DecodeResult<Self> {
42 ensure_fixed_part_size!(in: src);
43
44 let _color_pointer_flag = src.read_u16() != 0;
45 let color_pointer_cache_size = src.read_u16();
46 let pointer_cache_size = src.read_u16();
47
48 Ok(Pointer {
49 color_pointer_cache_size,
50 pointer_cache_size,
51 })
52 }
53}