unicode_rs/unicode/
status.rs

1//! Status Unicode characters
2//! Characters for status indicators, progress, and state
3
4use super::{UnicodeProvider, UnicodeTheme};
5
6/// Status indicators
7#[derive(Debug, Clone, Copy)]
8pub enum Status {
9    /// Online/connected
10    Online,
11    /// Offline/disconnected
12    Offline,
13    /// Busy/working
14    Busy,
15    /// Idle
16    Idle,
17    /// Error state
18    Error,
19    /// Warning state
20    Warning,
21    /// Success state
22    Success,
23    /// Unknown state
24    Unknown,
25}
26
27impl UnicodeProvider for Status {
28    fn get_char(&self, theme: UnicodeTheme) -> char {
29        match (self, theme) {
30            (Status::Online, UnicodeTheme::Minimal) => '+',
31            (Status::Online, UnicodeTheme::Basic) => '●',
32            (Status::Online, UnicodeTheme::Rich) => '●',
33            (Status::Online, UnicodeTheme::Fancy) => '🟢',
34
35            (Status::Offline, UnicodeTheme::Minimal) => '-',
36            (Status::Offline, UnicodeTheme::Basic) => '○',
37            (Status::Offline, UnicodeTheme::Rich) => '○',
38            (Status::Offline, UnicodeTheme::Fancy) => '⚪',
39
40            (Status::Busy, UnicodeTheme::Minimal) => '*',
41            (Status::Busy, UnicodeTheme::Basic) => '◐',
42            (Status::Busy, UnicodeTheme::Rich) => '◐',
43            (Status::Busy, UnicodeTheme::Fancy) => '🔄',
44
45            (Status::Idle, UnicodeTheme::Minimal) => 'o',
46            (Status::Idle, UnicodeTheme::Basic) => '◯',
47            (Status::Idle, UnicodeTheme::Rich) => '◯',
48            (Status::Idle, UnicodeTheme::Fancy) => '💤',
49
50            (Status::Error, UnicodeTheme::Minimal) => 'X',
51            (Status::Error, UnicodeTheme::Basic) => '✗',
52            (Status::Error, UnicodeTheme::Rich) => '✗',
53            (Status::Error, UnicodeTheme::Fancy) => '❌',
54
55            (Status::Warning, UnicodeTheme::Minimal) => '!',
56            (Status::Warning, UnicodeTheme::Basic) => '⚠',
57            (Status::Warning, UnicodeTheme::Rich) => '⚠',
58            (Status::Warning, UnicodeTheme::Fancy) => '⚠',
59
60            (Status::Success, UnicodeTheme::Minimal) => '+',
61            (Status::Success, UnicodeTheme::Basic) => '✓',
62            (Status::Success, UnicodeTheme::Rich) => '✓',
63            (Status::Success, UnicodeTheme::Fancy) => '✅',
64
65            (Status::Unknown, UnicodeTheme::Minimal) => '?',
66            (Status::Unknown, UnicodeTheme::Basic) => '?',
67            (Status::Unknown, UnicodeTheme::Rich) => '❓',
68            (Status::Unknown, UnicodeTheme::Fancy) => '❓',
69        }
70    }
71}
72
73/// Convenience constants for status
74pub mod chars {
75    use super::*;
76
77    pub const ONLINE: Status = Status::Online;
78    pub const OFFLINE: Status = Status::Offline;
79    pub const BUSY: Status = Status::Busy;
80    pub const IDLE: Status = Status::Idle;
81    pub const ERROR: Status = Status::Error;
82    pub const WARNING: Status = Status::Warning;
83    pub const SUCCESS: Status = Status::Success;
84    pub const UNKNOWN: Status = Status::Unknown;
85}