stylex_transform/shared/structures/
pre_rule_set.rs1use stylex_macros::stylex_panic;
2
3use crate::shared::structures::pre_rule::{CompiledResult, ComputedStyle};
4use stylex_constants::constants::messages::RULE_SET_EMPTY;
5
6use super::{
7 null_pre_rule::NullPreRule,
8 pre_rule::{PreRule, PreRuleValue, PreRules},
9 state_manager::StateManager,
10};
11#[derive(Debug, Clone, PartialEq)]
12pub(crate) struct PreRuleSet {
13 rules: Vec<PreRules>,
14}
15
16impl PreRuleSet {
17 pub(crate) fn _new() -> Self {
18 PreRuleSet { rules: vec![] }
19 }
20 pub(crate) fn create(rules: Vec<PreRules>) -> PreRules {
21 let flat_rules = rules
22 .into_iter()
23 .flat_map(|rule| match rule {
24 PreRules::PreRuleSet(rule_set) => rule_set.rules,
25 _ => vec![rule],
26 })
27 .collect::<Vec<PreRules>>();
28
29 match flat_rules.len() {
30 0 => PreRules::NullPreRule(NullPreRule::new()),
31 1 => match flat_rules.first() {
32 Some(rule) => rule.to_owned(),
33 None => stylex_panic!("{}", RULE_SET_EMPTY),
34 },
35 _ => PreRules::PreRuleSet(PreRuleSet { rules: flat_rules }),
36 }
37 }
38}
39
40impl PreRule for PreRuleSet {
41 fn equals(&self, _other: &dyn PreRule) -> bool {
42 true
43 }
44 fn compiled(&mut self, state: &mut StateManager) -> CompiledResult {
45 let style_tuple = self
46 .rules
47 .iter_mut()
48 .flat_map(|rule| {
49 let compiled_rule = match rule {
50 PreRules::PreRuleSet(rule_set) => rule_set.compiled(state),
51 PreRules::StylesPreRule(styles_pre_rule) => styles_pre_rule.compiled(state),
52 PreRules::NullPreRule(null_pre_rule) => null_pre_rule.compiled(state),
53 };
54
55 match compiled_rule {
56 CompiledResult::ComputedStyles(styles) => styles,
57 _ => vec![],
58 }
59 })
60 .collect::<Vec<ComputedStyle>>();
61
62 CompiledResult::ComputedStyles(style_tuple)
63 }
64 fn get_value(&self) -> Option<PreRuleValue> {
65 let rule = match self.rules.first() {
66 Some(r) => r,
67 None => stylex_panic!("{}", RULE_SET_EMPTY),
68 };
69
70 match &rule {
71 PreRules::PreRuleSet(rule_set) => rule_set.get_value(),
72 PreRules::StylesPreRule(styles_pre_rule) => styles_pre_rule.get_value(),
73 PreRules::NullPreRule(null_pre_rule) => null_pre_rule.get_value(),
74 }
75 }
76}