polished_css/data_type/
hue.rs

1use super::{Angle, Number, NumberStorage};
2
3/// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/CSS/hue)
4#[derive(
5    Clone,
6    Debug,
7    PartialEq,
8    strum_macros::EnumIs,
9    polished_css_macros::Display,
10    polished_css_macros::DataTypeFromDataTypes,
11)]
12#[display(on_enum = true)]
13pub enum Hue {
14    /// An angle expressed in **degrees, gradians, radians, or turns**.
15    Angle(Angle),
16    /// A real number, representing **degrees of the hue's angle**.
17    Number(Number),
18    /// In certain cases, a color can have one or more **missing color
19    /// components**.
20    /// [See more in the CSSWG specification](https://drafts.csswg.org/css-color/#missing)
21    None,
22}
23
24impl From<f64> for Hue {
25    fn from(value: f64) -> Self {
26        Self::number(value)
27    }
28}
29
30#[polished_css_macros::create_trait_from_enum_impl(constructor_arg_type = Hue)]
31impl Hue {
32    // TODO: Add conversion methods?
33}
34
35#[cfg(test)]
36mod test {
37    #[test]
38    fn display() {
39        use crate::data_type::{DegreeStorage, NumberStorage};
40        assert_eq!(super::Hue::deg(0.1).to_string(), String::from("0.1deg"));
41        assert_eq!(super::Hue::number(13.37).to_string(), String::from("13.37"));
42    }
43}