library/boxs/
refcells.rs

1#[cfg(test)]
2mod test;
3
4trait MessageSender {
5    fn send(&self, msg: &str);
6}
7
8struct LimitChecker<'a, T>
9where
10    T: MessageSender,
11{
12    message_sender: &'a T,
13    value: usize,
14    max: usize,
15}
16
17impl<'a, T> LimitChecker<'a, T>
18where
19    T: MessageSender,
20{
21    pub fn new(message_sender: &'a T, max: usize) -> LimitChecker<'a, T> {
22        LimitChecker {
23            message_sender,
24            value: 0,
25            max,
26        }
27    }
28
29    pub fn set_value(&mut self, value: usize) {
30        self.value = value;
31        let ratio = (self.value as f64 / self.max as f64 * 100.0) as usize;
32        match ratio {
33            0..=75 => {
34                self.message_sender.send("<= 75%");
35            }
36            76..=90 => {
37                self.message_sender.send("> 75%, <= 90%");
38            }
39            _ => {
40                self.message_sender.send("> 90%");
41            }
42        }
43    }
44}