use std::str::FromStr;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum IconName {
Home,
Settings,
List,
Add,
Delete,
Edit,
Save,
Search,
Menu,
Close,
Back,
Forward,
Refresh,
Folder,
File,
Copy,
Paste,
Cut,
Undo,
Redo,
Info,
Warning,
Error,
Check,
Star,
Heart,
Pin,
Share,
Download,
Upload,
Cloud,
User,
People,
Mail,
Calendar,
Clock,
Notification,
Chat,
Phone,
Camera,
Image,
Video,
Music,
Apps,
Grid,
Layout,
PanelLeft,
Filter,
Sort,
ZoomIn,
ZoomOut,
Lock,
Unlock,
Tag,
Flag,
Print,
Code,
}
const ICON_TABLE: &[(&str, IconName)] = &[
("add", IconName::Add),
("apps", IconName::Apps),
("back", IconName::Back),
("calendar", IconName::Calendar),
("camera", IconName::Camera),
("chat", IconName::Chat),
("check", IconName::Check),
("clock", IconName::Clock),
("close", IconName::Close),
("cloud", IconName::Cloud),
("code", IconName::Code),
("copy", IconName::Copy),
("cut", IconName::Cut),
("delete", IconName::Delete),
("download", IconName::Download),
("edit", IconName::Edit),
("error", IconName::Error),
("file", IconName::File),
("filter", IconName::Filter),
("flag", IconName::Flag),
("folder", IconName::Folder),
("forward", IconName::Forward),
("grid", IconName::Grid),
("heart", IconName::Heart),
("home", IconName::Home),
("image", IconName::Image),
("info", IconName::Info),
("layout", IconName::Layout),
("list", IconName::List),
("lock", IconName::Lock),
("mail", IconName::Mail),
("menu", IconName::Menu),
("music", IconName::Music),
("notification", IconName::Notification),
("panel-left", IconName::PanelLeft),
("paste", IconName::Paste),
("people", IconName::People),
("phone", IconName::Phone),
("pin", IconName::Pin),
("print", IconName::Print),
("redo", IconName::Redo),
("refresh", IconName::Refresh),
("save", IconName::Save),
("search", IconName::Search),
("settings", IconName::Settings),
("share", IconName::Share),
("sort", IconName::Sort),
("star", IconName::Star),
("tag", IconName::Tag),
("undo", IconName::Undo),
("unlock", IconName::Unlock),
("upload", IconName::Upload),
("user", IconName::User),
("video", IconName::Video),
("warning", IconName::Warning),
("zoom-in", IconName::ZoomIn),
("zoom-out", IconName::ZoomOut),
];
impl FromStr for IconName {
type Err = ();
fn from_str(s: &str) -> Result<Self, Self::Err> {
ICON_TABLE
.binary_search_by_key(&s, |(name, _)| name)
.map(|i| ICON_TABLE[i].1)
.map_err(|_| ())
}
}
pub fn fluent_icon(name: &str) -> Option<&'static str> {
Some(match IconName::from_str(name).ok()? {
IconName::Home => "\u{E80F}",
IconName::Settings => "\u{E713}",
IconName::List => "\u{E8FD}",
IconName::Add => "\u{E710}",
IconName::Delete => "\u{E74D}",
IconName::Edit => "\u{E70F}",
IconName::Save => "\u{E74E}",
IconName::Search => "\u{E721}",
IconName::Menu => "\u{E700}",
IconName::Close => "\u{E8BB}",
IconName::Back => "\u{E72B}",
IconName::Forward => "\u{E72A}",
IconName::Refresh => "\u{E72C}",
IconName::Folder => "\u{E8B7}",
IconName::File => "\u{E7C3}",
IconName::Copy => "\u{E8C8}",
IconName::Paste => "\u{E77F}",
IconName::Cut => "\u{E8C6}",
IconName::Undo => "\u{E7A7}",
IconName::Redo => "\u{E7A6}",
IconName::Info => "\u{E946}",
IconName::Warning => "\u{E7BA}",
IconName::Error => "\u{E783}",
IconName::Check => "\u{E73E}",
IconName::Star => "\u{E734}",
IconName::Heart => "\u{EB51}",
IconName::Pin => "\u{E718}",
IconName::Share => "\u{E72D}",
IconName::Download => "\u{E896}",
IconName::Upload => "\u{E898}",
IconName::Cloud => "\u{E753}",
IconName::User => "\u{E77B}",
IconName::People => "\u{E716}",
IconName::Mail => "\u{E715}",
IconName::Calendar => "\u{E787}",
IconName::Clock => "\u{E823}",
IconName::Notification => "\u{EA8F}",
IconName::Chat => "\u{E8BD}",
IconName::Phone => "\u{E717}",
IconName::Camera => "\u{E722}",
IconName::Image => "\u{EB9F}",
IconName::Video => "\u{E714}",
IconName::Music => "\u{EC4F}",
IconName::Apps => "\u{E71A}",
IconName::Grid => "\u{E80A}",
IconName::Layout => "\u{E8A1}",
IconName::PanelLeft => "\u{EE49}",
IconName::Filter => "\u{E71C}",
IconName::Sort => "\u{E8CB}",
IconName::ZoomIn => "\u{E8A3}",
IconName::ZoomOut => "\u{E71F}",
IconName::Lock => "\u{E72E}",
IconName::Unlock => "\u{E785}",
IconName::Tag => "\u{E8EC}",
IconName::Flag => "\u{E7C1}",
IconName::Print => "\u{E749}",
IconName::Code => "\u{E943}",
})
}