Skip to main content

css_ast/units/
line_width.rs

1use super::prelude::*;
2
3use super::Length;
4use crate::CalcableValue;
5
6#[node]
7#[derive(Parse, Peek, ToSpan, SemanticEq, ToCursors, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
8#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
9#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit)]
10#[derive(csskit_derives::NodeWithMetadata)]
11pub enum LineWidth<'a> {
12	#[cfg_attr(feature = "visitable", visit(skip))]
13	#[atom(CssAtomSet::Thin)]
14	Thin(T![Ident]),
15	#[cfg_attr(feature = "visitable", visit(skip))]
16	#[atom(CssAtomSet::Medium)]
17	Medium(T![Ident]),
18	#[cfg_attr(feature = "visitable", visit(skip))]
19	#[atom(CssAtomSet::Thick)]
20	Thick(T![Ident]),
21	Length(CalcableValue<'a, Length>),
22}
23
24// impl From<LineWidth> for Length {
25// 	fn from(value: LineWidth) -> Self {
26// 		match value {
27// 			LineWidth::Thin => Length::Px(1.0.into()),
28// 			LineWidth::Medium => Length::Px(3.0.into()),
29// 			LineWidth::Thick => Length::Px(3.0.into()),
30// 			LineWidth::Length(length) => length,
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 test_writes() {
43		assert_parse!(CssAtomSet::ATOMS, LineWidth, "1px");
44		assert_parse!(CssAtomSet::ATOMS, LineWidth, "medium");
45		assert_parse!(CssAtomSet::ATOMS, LineWidth, "calc(1px + 2px)");
46		assert_parse!(CssAtomSet::ATOMS, LineWidth, "max(1px, 2px)");
47	}
48}