Skip to main content

css_ast/units/
frequency.rs

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