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
50
51
52
53
use std::collections::VecDeque;
use chrono::Local;
#[derive(Default)]
pub struct StatusReport {
status: VecDeque<String>,
}
impl StatusReport {
pub fn new() -> Self {
Self::default()
}
pub fn update_status(&mut self, status: &str) {
let date = {
let date = Local::now();
format!("{}", date.format("[%H:%M:%S]"))
};
let empty_space = " ".repeat(date.chars().count());
let mut rendered = String::new();
for (i, line) in status.lines().enumerate() {
let prefix = if i == 0 { &date } else { &empty_space };
rendered.push_str(&format!("\n{prefix} {line}"));
}
self.status.push_back(rendered);
if self.status.len() > 5 {
for _ in 0..(self.status.len() - 5) {
self.status.pop_front();
}
}
}
pub fn status(&self) -> String {
self.status
.iter()
.map(std::string::ToString::to_string)
.collect::<String>()
}
pub fn clear_status(&mut self) {
self.status.clear();
}
}