use crate::{config::QueryFreshness, overlay::OverlayState, traverse::TraversalDirection};
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub(crate) enum TraverseMode {
Collect,
Count,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub(super) enum TraverseProfile {
OutUnique {
overlay: bool,
},
OutParallel {
overlay: bool,
},
InUnique {
overlay: bool,
},
InParallel {
overlay: bool,
},
}
impl TraverseProfile {
#[must_use]
pub(super) fn resolve(
direction: TraversalDirection,
freshness: QueryFreshness,
overlay: &OverlayState,
) -> Self {
let overlay_active =
freshness == QueryFreshness::OverlayAware && !overlay.added_edges.is_empty();
let use_unique = freshness == QueryFreshness::BaseOnly && !overlay.has_edge_tombstones();
if use_unique {
match direction {
TraversalDirection::Out => Self::OutUnique {
overlay: overlay_active,
},
TraversalDirection::In => Self::InUnique {
overlay: overlay_active,
},
}
} else {
match direction {
TraversalDirection::Out => Self::OutParallel {
overlay: overlay_active,
},
TraversalDirection::In => Self::InParallel {
overlay: overlay_active,
},
}
}
}
}