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) struct TraverseProfile {
pub direction: TraversalDirection,
pub use_unique: bool,
pub merge_overlay: bool,
}
impl TraverseProfile {
#[must_use]
pub(super) fn resolve(
direction: TraversalDirection,
freshness: QueryFreshness,
overlay: &OverlayState,
) -> Self {
let merge_overlay =
freshness == QueryFreshness::OverlayAware && overlay.overlay_edge_count() > 0;
let use_unique = freshness == QueryFreshness::BaseOnly && !overlay.has_edge_tombstones();
Self {
direction,
use_unique,
merge_overlay,
}
}
}