fluidattacks-blends-domain 0.17.1

Blends functional core: pure AST graph to syntax graph (no_std)
Documentation
use crate::{
    syntax::{
        builders::{if_statement::build_if_node, literal::build_literal_node},
        fields::Field,
        SyntaxGraphArgs, SyntaxGraphError,
    },
    NodeId,
};

use alloc::borrow::ToOwned;
const CONDITION: Field<false> = Field::new("condition_id");
const BODY: Field<false> = Field::new("body_id");

pub fn reader(
    args: &mut SyntaxGraphArgs<'_>,
    n_id: NodeId,
) -> Result<Option<NodeId>, SyntaxGraphError> {
    let Some(condition_id) = args.optional_field_alt(n_id, CONDITION) else {
        return Ok(Some(build_literal_node(
            args,
            n_id,
            "unless".to_owned(),
            "unless".to_owned(),
        )));
    };

    let false_id = args.optional_field_alt(n_id, BODY);

    build_if_node(args, n_id, condition_id, None, false_id, None).map(Some)
}