#[macro_export]
macro_rules! create_dioxus_icons {
($component_name:ident, $snake_name:ident) => {
paste::paste! {
static [<$component_name:upper _CACHE>]: std::sync::OnceLock<Vec<$crate::dioxus::parser::SvgElement>> = std::sync::OnceLock::new();
}
#[component]
pub fn $component_name(class: Option<String>) -> Element {
use dioxus::prelude::*;
use super::parser::parse_svg_elements;
use super::svg_icon::SvgIcon;
paste::paste! {
let elements = [<$component_name:upper _CACHE>].get_or_init(|| {
const SVG_CONTENT: &str = include_str!(concat!("../../ICONS/", stringify!($snake_name), ".txt"));
parse_svg_elements(SVG_CONTENT)
});
}
rsx! {
SvgIcon { class,
title { "Rust UI Icons - {stringify!($component_name)}" }
for element in elements.iter() {
{element.to_dioxus_element()}
}
}
}
}
};
}