use super::types::{
AvailableAction, CandidateKind, CompletenessSummary, NodeDetail, NotEditableReason,
ProjectedNode, SlotEntry,
};
use crate::structure::NodeId;
pub trait ProjectionAPI {
#[must_use]
fn nodes(&self) -> Vec<ProjectedNode>;
#[must_use]
fn children(&self, node: NodeId) -> Vec<SlotEntry>;
#[must_use]
fn inspect(&self, node: NodeId) -> Option<NodeDetail>;
#[must_use]
fn hole_candidates(&self, hole: NodeId) -> Vec<CandidateKind>;
#[must_use]
fn available_actions(&self) -> Vec<AvailableAction>;
#[must_use]
fn why_not_editable(&self, node: NodeId) -> Option<NotEditableReason>;
#[must_use]
fn completeness(&self) -> CompletenessSummary;
}