1#![allow(clippy::cognitive_complexity)]
2
3use std::{io::Write, thread, time::Duration};
4use terminal::{error::Result, stdout, Action, Attribute, TerminalLock};
5
6const ATTRIBUTES: [(Attribute, Attribute); 7] = [
7 (Attribute::Bold, Attribute::BoldOff),
8 (Attribute::Italic, Attribute::ItalicOff),
9 (Attribute::Underlined, Attribute::UnderlinedOff),
10 (Attribute::Reversed, Attribute::ReversedOff),
11 (Attribute::Crossed, Attribute::CrossedOff),
12 (Attribute::SlowBlink, Attribute::BlinkOff),
13 (Attribute::Conceal, Attribute::ConcealOff),
14];
15
16fn display_attributes<W: Write>(w: &mut TerminalLock<W>) -> Result<()> {
17 let mut y = 2;
18 w.write(b"Display attributes");
19
20 for (on, off) in &ATTRIBUTES {
21 w.act(Action::MoveCursorTo(0, y));
22
23 w.batch(Action::SetAttribute(*on));
24 w.write(format!("{:>width$} ", format!("{:?}", on), width = 35).as_bytes());
25 w.batch(Action::SetAttribute(*off));
26 w.write(format!("{:>width$}", format!("{:?}", off), width = 35).as_bytes());
27 w.batch(Action::ResetColor);
28
29 w.flush_batch();
30
31 y += 1;
32 }
33
34 Ok(())
35}
36
37pub fn main() {
38 let stdout = stdout();
39 let mut lock = stdout.lock_mut().unwrap();
40
41 display_attributes(&mut lock);
42
43 thread::sleep(Duration::from_millis(5000))
44}