stylex_transform/shared/structures/
evaluate_result.rs1use 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}