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}