binary_codec/
config.rs

1use std::{collections::HashMap};
2
3#[derive(Clone, Debug)]
4pub struct SerializerConfig {
5    toggle_keys: HashMap<String, bool>,
6    length_keys: HashMap<String, usize>,
7    variant_keys: HashMap<String, u8>,
8    pub bits: u8,
9    pub pos: usize,
10    pub discriminator: Option<u8>
11}
12
13impl SerializerConfig {
14    pub fn new() -> Self {
15        Self {
16            toggle_keys: HashMap::new(),
17            length_keys: HashMap::new(),
18            variant_keys: HashMap::new(),
19            bits: 0,
20            pos: 0,
21            discriminator: None
22        }
23    }
24
25    pub fn next_reset_bits_pos(&self) -> usize {
26        if self.bits == 0 {
27            self.pos
28        } else {
29            self.pos + 1
30        }
31    }
32
33    pub fn reset_bits(&mut self, is_read: bool) {
34        if self.bits != 0 && is_read {
35            self.pos += 1;
36        }
37        self.bits = 0;
38    }
39
40    pub fn set_toggle(&mut self, key: &str, value: bool) {
41        println!("Setting toggle key {} to {}", key, value);
42        self.toggle_keys.insert(key.to_string(), value);
43    }
44
45    pub fn set_length(&mut self, key: &str, value: usize) {
46        self.length_keys.insert(key.to_string(), value);
47    }
48
49    pub fn set_variant(&mut self, key: &str, value: u8) {
50        self.variant_keys.insert(key.to_string(), value);
51    }
52
53    pub fn get_toggle(&self, key: &str) -> Option<bool> {
54        if key.starts_with('!') {
55            let key = &key[1..];
56            return self.toggle_keys.get(key).map(|v| !*v);
57        }
58        
59        self.toggle_keys.get(key).copied()
60    }
61
62    pub fn get_length(&self, key: &str) -> Option<usize> {
63        self.length_keys.get(key).copied()
64    }
65
66    pub fn get_variant(&self, key: &str) -> Option<u8> {
67        self.variant_keys.get(key).copied()
68    }
69
70    pub fn reset(&mut self) {
71        self.bits = 0;
72        self.pos = 0;
73        self.discriminator = None;
74    }
75}