Skip to main content

css_ast/units/
number.rs

1use super::prelude::*;
2use crate::Percentage;
3
4#[derive(
5	Parse, Peek, ToCursors, IntoCursor, ToSpan, SemanticEq, Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
6)]
7#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
8pub enum NumberOrInfinity {
9	Number(T![Number]),
10	#[atom(CssAtomSet::Infinity)]
11	Infinity(T![Ident]),
12	#[atom(CssAtomSet::_NegInfinity)]
13	NegInfinity(T![Ident]),
14}
15
16#[derive(
17	Parse, Peek, ToCursors, IntoCursor, ToSpan, SemanticEq, Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
18)]
19#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
20pub enum NumberOrPercentage {
21	Number(T![Number]),
22	Percentage(Percentage),
23}
24
25impl From<NumberOrPercentage> for f32 {
26	fn from(val: NumberOrPercentage) -> Self {
27		match val {
28			NumberOrPercentage::Number(f) => f.into(),
29			NumberOrPercentage::Percentage(f) => f.into(),
30		}
31	}
32}
33
34#[cfg(test)]
35mod tests {
36	use super::*;
37	use crate::CssAtomSet;
38	use css_parse::assert_parse;
39
40	#[test]
41	fn size_test() {
42		assert_eq!(std::mem::size_of::<NumberOrInfinity>(), 16);
43	}
44
45	#[test]
46	fn test_writes() {
47		assert_parse!(CssAtomSet::ATOMS, NumberOrInfinity, "10000000");
48		assert_parse!(CssAtomSet::ATOMS, NumberOrInfinity, "infinity");
49		assert_parse!(CssAtomSet::ATOMS, NumberOrInfinity, "-infinity");
50	}
51}