Skip to main content

nurtex_protocol/types/
bit_set.rs

1use nurtex_codec::Buffer;
2use nurtex_codec::types::variable::VarI32;
3
4/// Набор битов
5#[derive(Clone, Debug, PartialEq)]
6pub struct BitSet(Vec<i64>);
7
8impl BitSet {
9  /// Метод получения набора
10  pub fn get(&self) -> &Vec<i64> {
11    &self.0
12  }
13}
14
15impl Buffer for BitSet {
16  fn read_buf(buffer: &mut std::io::Cursor<&[u8]>) -> Option<Self> {
17    let len = i32::read_var(buffer)? as usize;
18    let mut set = Vec::with_capacity(len);
19
20    for _ in 0..len {
21      set.push(i64::read_buf(buffer)?);
22    }
23
24    Some(Self(set))
25  }
26
27  fn write_buf(&self, buffer: &mut impl std::io::Write) -> std::io::Result<()> {
28    (self.0.len() as i32).write_var(buffer)?;
29
30    for el in &self.0 {
31      el.write_buf(buffer)?;
32    }
33
34    Ok(())
35  }
36}