#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum FontRole {
Chrome,
Editor,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum ChromePrimitive {
Tree,
List,
MenuBar,
ContextMenu,
Dialog,
RichTextPopup,
CommandCenter,
MultiSectionView,
SidebarPanel,
StatusBar,
ActivityBar,
Toolbar,
TabBar,
}
impl ChromePrimitive {
pub const ALL: [ChromePrimitive; 13] = [
ChromePrimitive::Tree,
ChromePrimitive::List,
ChromePrimitive::MenuBar,
ChromePrimitive::ContextMenu,
ChromePrimitive::Dialog,
ChromePrimitive::RichTextPopup,
ChromePrimitive::CommandCenter,
ChromePrimitive::MultiSectionView,
ChromePrimitive::SidebarPanel,
ChromePrimitive::StatusBar,
ChromePrimitive::ActivityBar,
ChromePrimitive::Toolbar,
ChromePrimitive::TabBar,
];
pub const fn font_role(self) -> FontRole {
FontRole::Chrome
}
pub const fn name(self) -> &'static str {
match self {
ChromePrimitive::Tree => "tree",
ChromePrimitive::List => "list",
ChromePrimitive::MenuBar => "menu_bar",
ChromePrimitive::ContextMenu => "context_menu",
ChromePrimitive::Dialog => "dialog",
ChromePrimitive::RichTextPopup => "rich_text_popup",
ChromePrimitive::CommandCenter => "command_center",
ChromePrimitive::MultiSectionView => "multi_section_view",
ChromePrimitive::SidebarPanel => "sidebar_panel",
ChromePrimitive::StatusBar => "status_bar",
ChromePrimitive::ActivityBar => "activity_bar",
ChromePrimitive::Toolbar => "toolbar",
ChromePrimitive::TabBar => "tab_bar",
}
}
}
impl std::fmt::Display for ChromePrimitive {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(self.name())
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum EditorClassPrimitive {
Editor,
Terminal,
DiffView,
TextDisplay,
Minimap,
CommandLine,
}
impl EditorClassPrimitive {
pub const ALL: [EditorClassPrimitive; 6] = [
EditorClassPrimitive::Editor,
EditorClassPrimitive::Terminal,
EditorClassPrimitive::DiffView,
EditorClassPrimitive::TextDisplay,
EditorClassPrimitive::Minimap,
EditorClassPrimitive::CommandLine,
];
pub const fn font_role(self) -> FontRole {
FontRole::Editor
}
pub const fn name(self) -> &'static str {
match self {
EditorClassPrimitive::Editor => "editor",
EditorClassPrimitive::Terminal => "terminal",
EditorClassPrimitive::DiffView => "diff_view",
EditorClassPrimitive::TextDisplay => "text_display",
EditorClassPrimitive::Minimap => "minimap",
EditorClassPrimitive::CommandLine => "command_line",
}
}
}
impl std::fmt::Display for EditorClassPrimitive {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(self.name())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn every_chrome_primitive_is_chrome() {
for p in ChromePrimitive::ALL {
assert_eq!(p.font_role(), FontRole::Chrome, "{p}");
}
}
#[test]
fn all_has_no_duplicates() {
let mut seen = std::collections::HashSet::new();
for p in ChromePrimitive::ALL {
assert!(
seen.insert(p),
"duplicate entry in ChromePrimitive::ALL: {p}"
);
}
}
#[test]
fn name_round_trips_through_display() {
for p in ChromePrimitive::ALL {
assert_eq!(p.to_string(), p.name());
}
}
#[test]
fn every_editor_class_primitive_is_editor() {
for p in EditorClassPrimitive::ALL {
assert_eq!(p.font_role(), FontRole::Editor, "{p}");
}
}
#[test]
fn editor_class_all_has_no_duplicates() {
let mut seen = std::collections::HashSet::new();
for p in EditorClassPrimitive::ALL {
assert!(
seen.insert(p),
"duplicate entry in EditorClassPrimitive::ALL: {p}"
);
}
}
#[test]
fn editor_class_name_round_trips_through_display() {
for p in EditorClassPrimitive::ALL {
assert_eq!(p.to_string(), p.name());
}
}
}