attribute/
attribute.rs

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}