use super::CompiledNode;
use super::compile_ctx::NodeId;
#[cfg(feature = "error-handling")]
use datavalue::OwnedDataValue;
#[derive(Debug, Clone)]
pub(crate) enum PathSegment {
Field(Box<str>),
Index(usize),
FieldOrIndex(Box<str>, usize),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum ReduceHint {
None,
Current,
Accumulator,
CurrentPath,
AccumulatorPath,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum MetadataHint {
None,
Index,
Key,
}
#[derive(Debug, Clone)]
pub(crate) struct CustomOperatorData {
pub id: NodeId,
pub name: String,
pub args: Box<[CompiledNode]>,
}
#[cfg(feature = "templating")]
#[derive(Debug, Clone)]
pub(crate) struct StructuredObjectData {
pub id: NodeId,
pub fields: Box<[(String, CompiledNode)]>,
}
#[cfg(feature = "ext-control")]
#[derive(Debug, Clone)]
pub(crate) struct CompiledExistsData {
pub id: NodeId,
pub scope_level: u32,
pub segments: Box<[PathSegment]>,
}
#[derive(Debug, Clone)]
pub(crate) enum Resolved<S, D> {
Now(S),
Later(D),
}
pub(crate) type StaticMissingPath = (Box<str>, Box<[PathSegment]>);
pub(crate) type CompiledMissingArg = Resolved<StaticMissingPath, CompiledNode>;
pub(crate) type CompiledMissingMin = Resolved<usize, CompiledNode>;
pub(crate) type CompiledMissingPaths = Resolved<Box<[StaticMissingPath]>, CompiledNode>;
#[derive(Debug, Clone)]
pub(crate) struct CompiledMissingData {
pub id: NodeId,
pub args: Box<[CompiledMissingArg]>,
}
#[derive(Debug, Clone)]
pub(crate) struct CompiledMissingSomeData {
pub id: NodeId,
pub min_present: CompiledMissingMin,
pub paths: CompiledMissingPaths,
}
#[cfg(feature = "error-handling")]
#[derive(Debug, Clone)]
pub(crate) struct CompiledThrowData {
pub id: NodeId,
pub error: OwnedDataValue,
}