52 lines
1.5 KiB
Rust
52 lines
1.5 KiB
Rust
use clap::ValueEnum;
|
|
use ratatui::symbols::shade;
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
#[derive(Debug, Copy, Clone, ValueEnum, Default, Serialize, Deserialize)]
|
|
pub enum Style {
|
|
#[default]
|
|
#[value(name = "full", alias = "f")]
|
|
Full,
|
|
#[value(name = "light", alias = "l")]
|
|
Light,
|
|
#[value(name = "medium", alias = "m")]
|
|
Medium,
|
|
#[value(name = "dark", alias = "d")]
|
|
Dark,
|
|
#[value(name = "thick", alias = "t")]
|
|
Thick,
|
|
#[value(name = "cross", alias = "c")]
|
|
Cross,
|
|
/// https://en.wikipedia.org/wiki/Braille_Patterns
|
|
/// Note: Might not be supported in all terminals
|
|
/// see https://docs.rs/ratatui/latest/src/ratatui/symbols.rs.html#150
|
|
#[value(name = "braille", alias = "b")]
|
|
Braille,
|
|
}
|
|
|
|
impl Style {
|
|
pub fn next(&self) -> Self {
|
|
match self {
|
|
Style::Full => Style::Dark,
|
|
Style::Dark => Style::Medium,
|
|
Style::Medium => Style::Light,
|
|
Style::Light => Style::Braille,
|
|
Style::Braille => Style::Thick,
|
|
Style::Thick => Style::Cross,
|
|
Style::Cross => Style::Full,
|
|
}
|
|
}
|
|
|
|
pub fn get_digit_symbol(&self) -> &str {
|
|
match &self {
|
|
Style::Full => shade::FULL,
|
|
Style::Light => shade::LIGHT,
|
|
Style::Medium => shade::MEDIUM,
|
|
Style::Dark => shade::DARK,
|
|
Style::Cross => "╬",
|
|
Style::Thick => "┃",
|
|
Style::Braille => "⣿",
|
|
}
|
|
}
|
|
}
|