1use crate::color::Color;
2
3#[derive(Debug, Clone, Copy, Eq, PartialEq)]
4pub enum SGR {
5    Reset,
6    Bold,
7    HalfBright,
8    Underscore,
9    Blink,
10    Reverse,
11    Underline,
12    NormalIntensity,
13    UnderlineOff,
14    BlinkOff,
15    ReverseOff,
16
17    FG(Color),
19
20    FG256(u8),
23
24    FG24(u8, u8, u8),
26
27    DefaultFG,
28
29    BG(Color),
31
32    BG256(u8),
33
34    BG24(u8, u8, u8),
35
36    DefaultBG,
37
38    FGB(Color),
40
41    BGB(Color),
43}
44
45impl Into<Vec<u16>> for SGR {
46    fn into(self) -> Vec<u16> {
47        use SGR::*;
48        match self {
49            Reset           => vec![0],
50            Bold            => vec![1],
51            HalfBright      => vec![2],
52            Underscore      => vec![4],
53            Blink           => vec![5],
54            Reverse         => vec![7],
55            Underline       => vec![21],
56            NormalIntensity => vec![22],
57            UnderlineOff    => vec![24],
58            BlinkOff        => vec![25],
59            ReverseOff      => vec![27],
60            FG(n)           => vec![30 + u16::from(n)],
61            FG256(n)        => vec![38, 5, n.into()],
62            FG24(r, g, b)   => vec![38, 2, r.into(), g.into(), b.into()],
63            DefaultFG       => vec![39],
64            BG(n)           => vec![40 + u16::from(n)],
65            BG256(n)        => vec![48, 5, n.into()],
66            BG24(r, g, b)   => vec![48, 2, r.into(), g.into(), b.into()],
67            DefaultBG       => vec![49],
68            FGB(n)          => vec![90 + u16::from(n)],
69            BGB(n)          => vec![100 + u16::from(n)],
70        }
71    }
72}