#[allow(unused_imports)]
use crate::{Choice, Field};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[non_exhaustive]
pub enum ThemeVariant {
Light,
Dark,
HighContrast,
}
impl ThemeVariant {
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
ThemeVariant::Light => "light",
ThemeVariant::Dark => "dark",
ThemeVariant::HighContrast => "high-contrast",
}
}
#[must_use]
pub const fn heading(self) -> &'static str {
match self {
ThemeVariant::Light => "Light",
ThemeVariant::Dark => "Dark",
ThemeVariant::HighContrast => "High Contrast",
}
}
}
impl std::fmt::Display for ThemeVariant {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(self.as_str())
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[non_exhaustive]
pub enum Contrast {
Low,
Standard,
High,
}
impl Contrast {
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Contrast::Low => "low",
Contrast::Standard => "standard",
Contrast::High => "high",
}
}
#[must_use]
pub const fn badge(self) -> &'static str {
match self {
Contrast::Low => "low",
Contrast::Standard => "OK",
Contrast::High => "AA",
}
}
}
impl std::fmt::Display for Contrast {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(self.as_str())
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub struct ThemeChoice<'a> {
pub id: &'a str,
pub name: &'a str,
pub variant: ThemeVariant,
pub contrast: Contrast,
}
impl<'a> ThemeChoice<'a> {
#[must_use]
pub const fn new(
id: &'a str,
name: &'a str,
variant: ThemeVariant,
contrast: Contrast,
) -> Self {
Self {
id,
name,
variant,
contrast,
}
}
}