heroicons 0.2.0

Easily include Heroicons SVGs in Rust
Documentation
#![doc = include_str!("../README.md")]

use std::fmt::{Display, Formatter};

#[cfg(feature = "hypertext")]
pub mod hypertext;

pub(crate) mod svg;

pub use crate::svg::ToSvg;

#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct Icon<'a, Name: IconName, Variant: IconVariant> {
    pub name: Name,
    pub variant: Variant,
    pub id: &'a str,
    pub class: &'a str,
}

impl<'a, Name, Variant> Display for Icon<'a, Name, Variant>
where
    Icon<'a, Name, Variant>: svg::ToSvg,
    Name: IconName + Copy,
    Variant: IconVariant + Copy,
{
    fn fmt(&self, f: &mut Formatter) -> Result<(), std::fmt::Error> {
        self.to_svg().fmt(f)
    }
}

pub trait IconName {}
pub trait IconVariant {}

pub mod icon_variant {
    #[derive(Clone, Copy, Debug, Default, PartialEq)]
    pub struct Outline;
    impl super::IconVariant for Outline {}

    #[derive(Clone, Copy, Debug, Default, PartialEq)]
    pub struct Solid;
    impl super::IconVariant for Solid {}

    #[derive(Clone, Copy, Debug, Default, PartialEq)]
    pub struct Mini;
    impl super::IconVariant for Mini {}

    #[derive(Clone, Copy, Debug, Default, PartialEq)]
    pub struct Micro;
    impl super::IconVariant for Micro {}
}

pub mod icon_name {
    include!(concat!(env!("OUT_DIR"), "/generated_icon_names.rs"));
}