1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
use teleia::*;
use std::collections::HashMap;
#[derive(Debug, Clone)]
pub struct Toggle {
pub val: bool,
pub set_time: u64,
}
pub struct Toggles {
toggles: HashMap<String, Toggle>,
}
impl Toggles {
pub fn new() -> Self {
Self {
toggles: HashMap::new(),
}
}
pub fn set(&mut self, ctx: &context::Context, st: &state::State, nm: &str, val: bool) {
self.toggles.insert(nm.to_string(), Toggle { val, set_time: st.tick });
}
pub fn get(&self, ctx: &context::Context, st: &state::State, nm: &str) -> Option<Toggle> {
self.toggles.get(nm).cloned()
}
pub fn reset(&mut self) {
self.toggles.clear();
}
pub fn handle(&mut self,
ctx: &context::Context, st: &state::State,
msg: fig::BinaryMessage
) {
let nm = if let Ok(s) = str::from_utf8(&msg.data) { s } else {
log::warn!("failed to decode toggle name");
return;
};
let prev = self.get(ctx, st, nm).map(|t| t.val).unwrap_or(false);
self.set(ctx, st, nm, !prev);
}
pub fn handle_set(&mut self,
ctx: &context::Context, st: &state::State,
msg: fig::BinaryMessage, val: bool
) {
let nm = if let Ok(s) = str::from_utf8(&msg.data) { s } else {
log::warn!("failed to decode toggle name");
return;
};
self.set(ctx, st, nm, val);
}
}
|