fluidattacks-blends-domain 0.37.0

Blends functional core: pure AST graph to syntax graph (no_std)
Documentation
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)
}