term_buffer_triangle/
term-buffer-triangle.rs1use glint::TermBuffer;
2
3enum Direction {
4 Grow,
5 Shrink,
6}
7
8const MIN: usize = 1;
9const MAX: usize = 30;
10
11struct State(usize, Direction);
12
13impl State {
14 fn update(&mut self) -> usize {
15 match self.1 {
16 Direction::Grow => {
17 if self.0 >= MAX {
18 self.0 -= 1;
19 self.1 = Direction::Shrink
20 } else {
21 self.0 += 1;
22 }
23 }
24 Direction::Shrink => {
25 if self.0 <= MIN {
26 self.0 = 1;
27 self.1 = Direction::Grow
28 } else {
29 self.0 -= 1;
30 }
31 }
32 }
33 self.0
34 }
35}
36
37pub fn main() {
38 let mut state = State(0, Direction::Grow);
39 let mut buf = TermBuffer::default();
40
41 loop {
42 let count = state.update();
43 for i in 0..count {
46 let line = format!("|{}\\", "*".repeat(i));
47 buf.push_line(line);
48 }
49 buf.push_line(format!(" {}", "‾".repeat(count - 1)));
50
51 buf.render_frame();
52 buf.flush();
53 std::thread::sleep(std::time::Duration::from_millis(15));
55 }
56}