css_ast/functions/
symbols_function.rs1use super::prelude::*;
2use crate::{CssAtomSet, types::Image};
3
4#[derive(Parse, Peek, ToCursors, ToSpan, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
10#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
11#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit(self))]
12pub struct SymbolsFunction<'a> {
13 #[atom(CssAtomSet::Symbols)]
14 pub name: T![Function],
15 pub params: SymbolsFunctionParams<'a>,
16 pub close: T![')'],
17}
18
19#[derive(Parse, Peek, ToCursors, ToSpan, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
20#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
21#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit(self))]
22pub struct SymbolsFunctionParams<'a> {
23 pub symbols_type: Option<SymbolsType>,
24 pub symbols: Vec<'a, Symbol<'a>>,
25}
26
27#[derive(Parse, Peek, ToCursors, ToSpan, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
33#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
34#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit(skip))]
35pub enum SymbolsType {
36 #[atom(CssAtomSet::Cyclic)]
37 Cyclic(T![Ident]),
38 #[atom(CssAtomSet::Numeric)]
39 Numeric(T![Ident]),
40 #[atom(CssAtomSet::Alphabetic)]
41 Alphabetic(T![Ident]),
42 #[atom(CssAtomSet::Symbolic)]
43 Symbolic(T![Ident]),
44 #[atom(CssAtomSet::Fixed)]
45 Fixed(T![Ident]),
46}
47
48#[derive(Parse, Peek, ToCursors, ToSpan, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
56#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
57#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit(children))]
58#[allow(clippy::large_enum_variant)] pub enum Symbol<'a> {
60 #[cfg_attr(feature = "visitable", visit(skip))]
61 String(T![String]),
62 Image(Image<'a>),
63}
64
65#[cfg(test)]
66mod tests {
67 use super::*;
68 use crate::CssAtomSet;
69 use css_parse::assert_parse;
70
71 #[test]
72 fn size_test() {
73 assert_eq!(std::mem::size_of::<SymbolsFunction>(), 72);
74 assert_eq!(std::mem::size_of::<Symbol>(), 208);
75 assert_eq!(std::mem::size_of::<SymbolsType>(), 16);
76 }
77
78 #[test]
79 fn test_writes() {
80 assert_parse!(CssAtomSet::ATOMS, SymbolsFunction, "symbols(symbolic'+')");
81 assert_parse!(CssAtomSet::ATOMS, SymbolsFunction, "symbols(symbolic'*''†''‡')");
82 }
83}