use serde::{Deserialize, Serialize};
#[derive(
Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize,
)]
#[serde(rename_all = "lowercase")]
pub enum GlyphVariant {
#[default]
Unicode,
Ascii,
}
#[derive(Debug, Clone, Copy)]
pub struct Glyphs {
pub variant: GlyphVariant,
pub check: &'static str,
pub bullet: &'static str,
pub pointer: &'static str,
}
impl Glyphs {
pub fn new(variant: GlyphVariant) -> Self {
match variant {
GlyphVariant::Unicode => Self {
variant,
check: "\u{2713}",
bullet: "\u{2022}",
pointer: "\u{203a}",
},
GlyphVariant::Ascii => Self {
variant,
check: "x",
bullet: "*",
pointer: ">",
},
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn unicode_variant_uses_symbol_glyphs() {
let glyphs = Glyphs::new(GlyphVariant::Unicode);
assert_eq!(glyphs.variant, GlyphVariant::Unicode);
assert_eq!(glyphs.check, "\u{2713}");
assert_eq!(glyphs.pointer, "\u{203a}");
}
#[test]
fn ascii_variant_uses_plain_fallbacks() {
let glyphs = Glyphs::new(GlyphVariant::Ascii);
assert_eq!(glyphs.check, "x");
assert_eq!(glyphs.bullet, "*");
assert_eq!(glyphs.pointer, ">");
}
#[test]
fn variant_defaults_to_unicode() {
assert_eq!(GlyphVariant::default(), GlyphVariant::Unicode);
}
}