Skip to main content

json_eval_rs/jsoneval/
mod.rs

1use std::collections::HashMap;
2use std::sync::{Arc, Mutex};
3
4use crate::jsoneval::eval_data::EvalData;
5
6use crate::jsoneval::table_metadata::TableMetadata;
7
8use crate::jsoneval::types::DependentItem;
9use crate::rlogic::{LogicId, RLogic};
10
11use indexmap::{IndexMap, IndexSet};
12
13use serde_json::Value;
14
15pub mod cancellation;
16pub mod core;
17pub mod dependents;
18pub mod eval_cache;
19pub mod eval_data;
20pub mod evaluate;
21pub mod getters;
22pub mod json_parser;
23pub mod layout;
24pub mod logic;
25pub mod parsed_schema;
26pub mod parsed_schema_cache;
27pub mod path_utils;
28pub mod static_arrays;
29pub mod subform_methods;
30pub mod table_evaluate;
31pub mod table_metadata;
32pub mod types;
33pub mod validation;
34
35pub struct JSONEval {
36    pub schema: Arc<Value>,
37    pub engine: Arc<RLogic>,
38    pub evaluations: Arc<IndexMap<String, LogicId>>,
39    pub tables: Arc<IndexMap<String, Value>>,
40    pub table_metadata: Arc<IndexMap<String, TableMetadata>>,
41    pub dependencies: Arc<IndexMap<String, IndexSet<String>>>,
42    pub sorted_evaluations: Arc<Vec<Vec<String>>>,
43    pub dependents_evaluations: Arc<IndexMap<String, Vec<DependentItem>>>,
44    pub rules_evaluations: Arc<Vec<String>>,
45    pub fields_with_rules: Arc<Vec<String>>,
46    pub others_evaluations: Arc<Vec<String>>,
47    pub value_evaluations: Arc<Vec<String>>,
48    pub layout_paths: Arc<Vec<String>>,
49    pub options_templates: Arc<Vec<(String, String, String)>>,
50    pub subforms: IndexMap<String, Box<JSONEval>>,
51
52    pub reffed_by: Arc<IndexMap<String, Vec<String>>>,
53
54    /// Reverse map: data path → list of source field schema paths whose dependent
55    /// value/clear formulas reference that path (excluding $value/$refValue context vars).
56    /// When field X changes, source fields in dep_formula_triggers[X] are re-queued so
57    /// their downstream dependents are re-evaluated with the new context.
58    pub dep_formula_triggers: Arc<IndexMap<String, Vec<String>>>,
59
60    pub conditional_hidden_fields: Arc<Vec<String>>,
61    pub conditional_readonly_fields: Arc<Vec<String>>,
62    pub static_arrays: Arc<IndexMap<String, Arc<Value>>>,
63
64    pub context: Value,
65    pub data: Value,
66    pub evaluated_schema: Value,
67    pub eval_data: EvalData,
68    pub eval_cache: eval_cache::EvalCache,
69    pub(crate) eval_lock: Mutex<()>,
70    pub(crate) cached_msgpack_schema: Option<Vec<u8>>,
71    pub(crate) regex_cache: std::sync::RwLock<HashMap<String, regex::Regex>>,
72}