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#[derive(ToCursors, Parse, Peek, IntoCursor, Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
8#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
9pub enum Resolution {
10	#[atom(CssAtomSet::Dpi)]
11	Dpi(T![Dimension]),
12	#[atom(CssAtomSet::Dpcm)]
13	Dpcm(T![Dimension]),
14	#[atom(CssAtomSet::Dppx)]
15	Dppx(T![Dimension]),
16	#[atom(CssAtomSet::X)]
17	X(T![Dimension]),
18}
19
20impl From<Resolution> for f32 {
21	fn from(res: Resolution) -> Self {
22		match res {
23			Resolution::Dpi(r) => r.into(),
24			Resolution::Dpcm(r) => r.into(),
25			Resolution::Dppx(r) => r.into(),
26			Resolution::X(r) => r.into(),
27		}
28	}
29}
30
31#[cfg(test)]
32mod tests {
33	use super::*;
34	use crate::CssAtomSet;
35	use css_parse::assert_parse;
36
37	#[test]
38	fn size_test() {
39		assert_eq!(std::mem::size_of::<Resolution>(), 16);
40	}
41
42	#[test]
43	fn test_writes() {
44		assert_parse!(CssAtomSet::ATOMS, Resolution, "1dppx");
45		assert_parse!(CssAtomSet::ATOMS, Resolution, "1x");
46	}
47}