use std::collections::{BTreeMap, BTreeSet, HashMap};
use crate::abstract_value::AbstractValue;
use crate::bound_value_analysis::GetBinding;
use crate::eval_effect::SelectionReachability;
use crate::fragment_expr_eval::FragmentEvalContext;
use crate::helper_meta::HelperOutputMeta;
use crate::scalar_value::ScalarValueDispatch;
use crate::symbolic_local_state::IntCastSource;
use helm_schema_core::{Predicate, ValuesPath};
mod condition_predicate;
mod path_resolution;
pub(crate) use condition_predicate::{
guard_value_is_truthy, predicate_any, stringified_equality_preimage, value_has_key,
};
#[derive(Clone, Debug, PartialEq, Eq)]
pub(crate) struct RangeSubjectIdentity {
pub(crate) path: ValuesPath,
pub(crate) json_decoded: bool,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub(crate) struct RangeSubject {
pub(crate) influence_paths: BTreeSet<ValuesPath>,
pub(crate) value: Option<AbstractValue>,
pub(crate) truth_reachability: SelectionReachability,
pub(crate) input_identity: Option<RangeSubjectIdentity>,
pub(crate) member_identity: Option<RangeSubjectIdentity>,
pub(crate) member_value: Option<AbstractValue>,
}
pub(crate) struct ValuePathContext<'a> {
pub(crate) root_bindings: &'a HashMap<String, AbstractValue>,
pub(crate) root_truthy_predicates: &'a HashMap<String, Predicate>,
pub(crate) root_value_dispatches: &'a HashMap<String, ScalarValueDispatch>,
pub(crate) root_field_semantics_on_current_dot: bool,
pub(crate) template_bindings: HashMap<String, AbstractValue>,
pub(crate) template_scalar_dispatches: &'a HashMap<String, ScalarValueDispatch>,
pub(crate) pipeline_bound_bindings: std::collections::HashSet<String>,
pub(crate) range_domains: &'a HashMap<String, Vec<String>>,
pub(crate) get_bindings: &'a HashMap<String, GetBinding>,
pub(crate) template_default_paths: &'a HashMap<String, BTreeSet<ValuesPath>>,
pub(crate) template_output_meta: &'a HashMap<String, BTreeMap<ValuesPath, HelperOutputMeta>>,
pub(crate) template_truthy_reductions: &'a HashMap<String, Predicate>,
pub(crate) template_truthiness_abstentions: &'a BTreeSet<String>,
pub(crate) typeof_bindings: &'a HashMap<String, BTreeMap<ValuesPath, HelperOutputMeta>>,
pub(crate) int_cast_bindings: &'a HashMap<String, IntCastSource>,
pub(crate) fragment_context: FragmentEvalContext<'a>,
pub(crate) current_dot_fragment: Option<AbstractValue>,
pub(crate) current_dot_binding: Option<AbstractValue>,
}