macro_rules! embed {
($($path:expr),* $(,)?) => {
pub const ALL: &[(&str, &str)] = &[
$((
$path,
include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/assets/", $path)),
),)*
];
pub fn source(path: &str) -> Option<&'static str> {
ALL.iter()
.find(|(known, _)| *known == path)
.map(|(_, svg)| *svg)
}
};
}
embed![
"icons/crown.svg", "icons/crown-simple.svg", "icons/castle-turret.svg", "icons/horse.svg", "icons/church.svg", "icons/circle.svg", "icons/cube.svg",
"icons/shapes.svg",
"icons/lightbulb.svg",
"icons/sun.svg",
"icons/lamp.svg",
"icons/camera.svg",
"icons/grid-four.svg",
"icons/list-bullets.svg",
"icons/sliders.svg",
"icons/cards-three.svg",
"icons/clock.svg",
"icons/play.svg",
"icons/pencil.svg",
"icons/plug.svg",
"icons/gear.svg",
"icons/info.svg",
"icons/sign-out.svg",
"icons/folder.svg",
"icons/floppy-disk.svg",
"icons/export.svg",
"icons/image.svg",
"icons/monitor.svg",
"icons/target.svg",
"icons/eye.svg",
"icons/eye-slash.svg",
"icons/plus.svg",
"icons/x.svg",
"icons/caret-up.svg",
"icons/caret-down.svg",
"icons/caret-left.svg",
"icons/caret-right.svg",
"icons/wrench.svg",
"ui/pointer-up.svg",
"ui/pointer-down.svg",
"ui/pointer-left.svg",
"ui/pointer-right.svg",
];
#[cfg(test)]
mod tests {
#[test]
fn every_embedded_icon_has_a_name() {
for (path, _) in super::ALL {
if crate::ui::icons::ours::ALL.contains(path) {
continue;
}
assert!(
crate::ui::icons::path::ALL
.iter()
.any(|(_, known)| known == path),
"{path} is embedded but is not in `path::ALL`",
);
}
}
}