accessibility_tree/style/
rules.rs1use crate::style::declaration_block::DeclarationBlock;
2use crate::style::errors::RuleParseErrorKind;
3use crate::style::selectors::{self, SelectorList};
4use cssparser::{AtRuleParser, ParseError, Parser, QualifiedRuleParser, SourceLocation};
5use std::sync::Arc;
6
7pub enum CssRule {
8 StyleRule {
9 selectors: SelectorList,
10
11 block: Arc<DeclarationBlock>,
17 },
18}
19
20pub struct RulesParser;
21
22impl<'i> QualifiedRuleParser<'i> for RulesParser {
23 type Prelude = SelectorList;
24 type QualifiedRule = CssRule;
25 type Error = RuleParseErrorKind<'i>;
26
27 fn parse_prelude<'t>(
28 &mut self,
29 parser: &mut Parser<'i, 't>,
30 ) -> Result<Self::Prelude, ParseError<'i, Self::Error>> {
31 SelectorList::parse(&selectors::Parser, parser)
32 }
33
34 fn parse_block<'t>(
35 &mut self,
36 prelude: Self::Prelude,
37 _location: SourceLocation,
38 parser: &mut Parser<'i, 't>,
39 ) -> Result<Self::QualifiedRule, ParseError<'i, Self::Error>> {
40 Ok(CssRule::StyleRule {
41 selectors: prelude,
42 block: Arc::new(DeclarationBlock::parse(parser)),
43 })
44 }
45}
46
47impl<'i> AtRuleParser<'i> for RulesParser {
48 type PreludeNoBlock = ();
49 type PreludeBlock = ();
50 type AtRule = CssRule;
51 type Error = RuleParseErrorKind<'i>;
52}