Skip to main content

css_ast/units/
resolution.rs

1use super::prelude::*;
2
3// const DPPX_IN: f32 = 96.0;
4// const DPPX_CM: f32 = DPPX_IN / 2.54;
5
6/// <https://drafts.csswg.org/css-values/#resolution>
7///
8/// ```text,ignore
9/// <resolution> = <dimension-token>
10/// ```
11#[derive(ToCursors, Parse, Peek, IntoCursor, Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
12#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
13pub enum Resolution {
14	#[atom(CssAtomSet::Dpi)]
15	Dpi(T![Dimension]),
16	#[atom(CssAtomSet::Dpcm)]
17	Dpcm(T![Dimension]),
18	#[atom(CssAtomSet::Dppx)]
19	Dppx(T![Dimension]),
20	#[atom(CssAtomSet::X)]
21	X(T![Dimension]),
22}
23
24impl From<Resolution> for f32 {
25	fn from(res: Resolution) -> Self {
26		match res {
27			Resolution::Dpi(r) => r.into(),
28			Resolution::Dpcm(r) => r.into(),
29			Resolution::Dppx(r) => r.into(),
30			Resolution::X(r) => r.into(),
31		}
32	}
33}
34
35#[cfg(test)]
36mod tests {
37	use super::*;
38	use crate::CssAtomSet;
39	use css_parse::assert_parse;
40
41	#[test]
42	fn size_test() {
43		assert_eq!(std::mem::size_of::<Resolution>(), 16);
44	}
45
46	#[test]
47	fn test_writes() {
48		assert_parse!(CssAtomSet::ATOMS, Resolution, "1dppx");
49		assert_parse!(CssAtomSet::ATOMS, Resolution, "1x");
50	}
51}