css_ast/functions/
content_function.rs1use super::prelude::*;
2
3#[derive(Peek, Parse, ToCursors, ToSpan, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
9#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
10#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit(self))]
11pub struct ContentFunction {
12 #[atom(CssAtomSet::Content)]
13 pub name: T![Function],
14 pub params: Option<ContentKeyword>,
15 pub close: T![')'],
16}
17
18#[derive(Parse, Peek, IntoCursor, ToCursors, Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
19#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
20#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit(skip))]
21pub enum ContentKeyword {
22 #[atom(CssAtomSet::Text)]
23 Text(T![Ident]),
24 #[atom(CssAtomSet::Before)]
25 Before(T![Ident]),
26 #[atom(CssAtomSet::After)]
27 After(T![Ident]),
28 #[atom(CssAtomSet::FirstLetter)]
29 FirstLetter(T![Ident]),
30 #[atom(CssAtomSet::Marker)]
31 Marker(T![Ident]),
32}
33
34#[cfg(test)]
35mod tests {
36 use super::*;
37 use crate::CssAtomSet;
38 use css_parse::{assert_parse, assert_parse_error};
39
40 #[test]
41 fn size_test() {
42 assert_eq!(std::mem::size_of::<ContentFunction>(), 40);
43 assert_eq!(std::mem::size_of::<ContentKeyword>(), 16);
44 }
45
46 #[test]
47 fn test_writes() {
48 assert_parse!(CssAtomSet::ATOMS, ContentFunction, "content(text)");
49 assert_parse!(CssAtomSet::ATOMS, ContentFunction, "content(before)");
50 assert_parse!(CssAtomSet::ATOMS, ContentFunction, "content()");
51 }
52
53 #[test]
54 fn test_errors() {
55 assert_parse_error!(CssAtomSet::ATOMS, ContentFunction, "content(text before)");
56 }
57}