use crate::{
ast::{node_utils::ensure_node, AstGraph, AstNode},
syntax::{
_node_builders::core::SyntaxNodeBuildError, SyntaxGraphArgs, SyntaxGraphError, SyntaxNode,
},
NodeId,
};
pub fn generic_reader(
args: &mut SyntaxGraphArgs<'_>,
n_id: NodeId,
builder: impl Fn(&AstGraph, &AstNode) -> Result<SyntaxNode, SyntaxNodeBuildError>,
) -> Result<Option<NodeId>, SyntaxGraphError> {
let build_node = ensure_node(args.ast_graph, n_id)
.map_err(SyntaxNodeBuildError::ResolutionError)
.and_then(|node| builder(args.ast_graph, node));
build_node
.map(|node| {
args.syntax_graph.add_node(n_id, node);
Some(n_id)
})
.map_err(|_| SyntaxGraphError::MissingAstNode)
}