unicode_rs/unicode/
blocks.rs

1//! Block Unicode characters
2//! Block elements for progress bars, charts, and visual elements
3
4use super::{UnicodeProvider, UnicodeTheme};
5
6/// Block characters for progress and visual elements
7#[derive(Debug, Clone, Copy)]
8pub enum Block {
9    /// Full block
10    Full,
11    /// Three quarters block
12    ThreeQuarters,
13    /// Half block
14    Half,
15    /// Quarter block
16    Quarter,
17    /// Eighth block
18    Eighth,
19    /// Upper half block
20    UpperHalf,
21    /// Lower half block
22    LowerHalf,
23    /// Left half block
24    LeftHalf,
25    /// Right half block
26    RightHalf,
27    /// Light shade
28    LightShade,
29    /// Medium shade
30    MediumShade,
31    /// Dark shade
32    DarkShade,
33}
34
35impl UnicodeProvider for Block {
36    fn get_char(&self, theme: UnicodeTheme) -> char {
37        match (self, theme) {
38            (Block::Full, UnicodeTheme::Minimal) => '#',
39            (Block::Full, UnicodeTheme::Basic) => '█',
40            (Block::Full, UnicodeTheme::Rich) => '█',
41            (Block::Full, UnicodeTheme::Fancy) => '█',
42
43            (Block::ThreeQuarters, UnicodeTheme::Minimal) => '#',
44            (Block::ThreeQuarters, UnicodeTheme::Basic) => '▉',
45            (Block::ThreeQuarters, UnicodeTheme::Rich) => '▉',
46            (Block::ThreeQuarters, UnicodeTheme::Fancy) => '▉',
47
48            (Block::Half, UnicodeTheme::Minimal) => '=',
49            (Block::Half, UnicodeTheme::Basic) => '▌',
50            (Block::Half, UnicodeTheme::Rich) => '▌',
51            (Block::Half, UnicodeTheme::Fancy) => '▌',
52
53            (Block::Quarter, UnicodeTheme::Minimal) => '|',
54            (Block::Quarter, UnicodeTheme::Basic) => '▎',
55            (Block::Quarter, UnicodeTheme::Rich) => '▎',
56            (Block::Quarter, UnicodeTheme::Fancy) => '▎',
57
58            (Block::Eighth, UnicodeTheme::Minimal) => '|',
59            (Block::Eighth, UnicodeTheme::Basic) => '▏',
60            (Block::Eighth, UnicodeTheme::Rich) => '▏',
61            (Block::Eighth, UnicodeTheme::Fancy) => '▏',
62
63            (Block::UpperHalf, UnicodeTheme::Minimal) => '^',
64            (Block::UpperHalf, UnicodeTheme::Basic) => '▀',
65            (Block::UpperHalf, UnicodeTheme::Rich) => '▀',
66            (Block::UpperHalf, UnicodeTheme::Fancy) => '▀',
67
68            (Block::LowerHalf, UnicodeTheme::Minimal) => '_',
69            (Block::LowerHalf, UnicodeTheme::Basic) => '▄',
70            (Block::LowerHalf, UnicodeTheme::Rich) => '▄',
71            (Block::LowerHalf, UnicodeTheme::Fancy) => '▄',
72
73            (Block::LeftHalf, UnicodeTheme::Minimal) => '|',
74            (Block::LeftHalf, UnicodeTheme::Basic) => '▌',
75            (Block::LeftHalf, UnicodeTheme::Rich) => '▌',
76            (Block::LeftHalf, UnicodeTheme::Fancy) => '▌',
77
78            (Block::RightHalf, UnicodeTheme::Minimal) => '|',
79            (Block::RightHalf, UnicodeTheme::Basic) => '▐',
80            (Block::RightHalf, UnicodeTheme::Rich) => '▐',
81            (Block::RightHalf, UnicodeTheme::Fancy) => '▐',
82
83            (Block::LightShade, UnicodeTheme::Minimal) => '.',
84            (Block::LightShade, UnicodeTheme::Basic) => '░',
85            (Block::LightShade, UnicodeTheme::Rich) => '░',
86            (Block::LightShade, UnicodeTheme::Fancy) => '░',
87
88            (Block::MediumShade, UnicodeTheme::Minimal) => ':',
89            (Block::MediumShade, UnicodeTheme::Basic) => '▒',
90            (Block::MediumShade, UnicodeTheme::Rich) => '▒',
91            (Block::MediumShade, UnicodeTheme::Fancy) => '▒',
92
93            (Block::DarkShade, UnicodeTheme::Minimal) => '#',
94            (Block::DarkShade, UnicodeTheme::Basic) => '▓',
95            (Block::DarkShade, UnicodeTheme::Rich) => '▓',
96            (Block::DarkShade, UnicodeTheme::Fancy) => '▓',
97        }
98    }
99}
100
101/// Convenience constants for blocks
102pub mod chars {
103    use super::*;
104
105    pub const FULL: Block = Block::Full;
106    pub const THREE_QUARTERS: Block = Block::ThreeQuarters;
107    pub const HALF: Block = Block::Half;
108    pub const QUARTER: Block = Block::Quarter;
109    pub const EIGHTH: Block = Block::Eighth;
110    pub const UPPER_HALF: Block = Block::UpperHalf;
111    pub const LOWER_HALF: Block = Block::LowerHalf;
112    pub const LEFT_HALF: Block = Block::LeftHalf;
113    pub const RIGHT_HALF: Block = Block::RightHalf;
114    pub const LIGHT_SHADE: Block = Block::LightShade;
115    pub const MEDIUM_SHADE: Block = Block::MediumShade;
116    pub const DARK_SHADE: Block = Block::DarkShade;
117}