Skip to main content

stylex_transform/shared/structures/
evaluate_result.rs

1use indexmap::IndexMap;
2use rustc_hash::FxHashMap;
3use swc_core::{
4  atoms::Atom,
5  ecma::ast::{Expr, KeyValueProp, Lit},
6};
7
8use crate::shared::enums::data_structures::evaluate_result_value::EvaluateResultValue;
9
10use super::{
11  functions::FunctionConfig,
12  theme_ref::ThemeRef,
13  types::{DynamicFns, EvaluationCallback, TInlineStyles},
14};
15
16#[derive(Debug, Clone, PartialEq)]
17pub struct EvaluateResult {
18  pub confident: bool,
19  pub value: Option<EvaluateResultValue>,
20  pub(crate) deopt: Option<Expr>,
21  pub reason: Option<String>,
22  pub(crate) inline_styles: Option<TInlineStyles>,
23  pub(crate) fns: Option<DynamicFns>,
24}
25
26impl EvaluateResultValue {
27  pub fn as_expr(&self) -> Option<&Expr> {
28    match self {
29      EvaluateResultValue::Expr(value) => Some(value),
30      _ => None,
31    }
32  }
33
34  pub fn as_vec(&self) -> Option<&Vec<Option<EvaluateResultValue>>> {
35    match self {
36      EvaluateResultValue::Vec(value) => Some(value),
37      _ => None,
38    }
39  }
40
41  pub fn as_map(&self) -> Option<&IndexMap<Expr, Vec<KeyValueProp>>> {
42    match self {
43      EvaluateResultValue::Map(value) => Some(value),
44      _ => None,
45    }
46  }
47
48  pub fn as_entries(&self) -> Option<&IndexMap<Lit, Box<Expr>>> {
49    match self {
50      EvaluateResultValue::Entries(value) => Some(value),
51      _ => None,
52    }
53  }
54
55  pub fn as_function(&self) -> Option<&FunctionConfig> {
56    match self {
57      EvaluateResultValue::FunctionConfig(value) => Some(value),
58      _ => None,
59    }
60  }
61
62  pub fn as_function_map(&self) -> Option<&FxHashMap<Atom, FunctionConfig>> {
63    match self {
64      EvaluateResultValue::FunctionConfigMap(value) => Some(value),
65      _ => None,
66    }
67  }
68
69  pub fn as_callback(&self) -> Option<&EvaluationCallback> {
70    match self {
71      EvaluateResultValue::Callback(value) => Some(value),
72      _ => None,
73    }
74  }
75
76  pub fn as_theme_ref(&self) -> Option<&ThemeRef> {
77    match self {
78      EvaluateResultValue::ThemeRef(value) => Some(value),
79      _ => None,
80    }
81  }
82
83  pub fn as_env_object(
84    &self,
85  ) -> Option<&indexmap::IndexMap<String, stylex_structures::stylex_env::EnvEntry>> {
86    match self {
87      EvaluateResultValue::EnvObject(value) => Some(value),
88      _ => None,
89    }
90  }
91}