use crate::ast::node_utils::AstNodeAndId;
use crate::ast::AstGraph;
use crate::syntax::_node_builders::core::SyntaxNodeBuildError;
use crate::syntax::_node_builders::languages::rust::arguments::build_arguments;
use crate::syntax::_node_builders::languages::rust::array_expression::build_array_expression;
use crate::syntax::_node_builders::languages::rust::attribute_item::build_attribute_item;
use crate::syntax::_node_builders::languages::rust::boolean_literal::build_boolean_literal;
use crate::syntax::_node_builders::languages::rust::comment::{build_comment, build_multi_comment};
use crate::syntax::_node_builders::languages::rust::empty_statement::build_empty_statement;
use crate::syntax::_node_builders::languages::rust::extern_crate_declaration::build_extern_crate_declaration;
use crate::syntax::_node_builders::languages::rust::inner_attribute_item::build_inner_attribute_item;
use crate::syntax::_node_builders::languages::rust::number_literal::build_number_literal;
use crate::syntax::_node_builders::languages::rust::string_literal::build_string_literal;
use crate::syntax::core_nodes::{CoreSyntaxNode, CoreSyntaxNodeWithId};
use alloc::boxed::Box;
pub fn build_syntax_node(
graph: &AstGraph,
(node, n_id): AstNodeAndId,
) -> Result<CoreSyntaxNodeWithId, SyntaxNodeBuildError> {
let self_fn = |child: AstNodeAndId<'_>| build_syntax_node(graph, child);
let core_node = match node.kind.as_str() {
"arguments" => build_arguments(graph, node, self_fn)
.map(Box::new)
.map(CoreSyntaxNode::ArgumentList),
"array_expression" => build_array_expression(graph, node, self_fn)
.map(Box::new)
.map(CoreSyntaxNode::ArrayExpression),
"boolean_literal" => build_boolean_literal(graph, node).map(CoreSyntaxNode::BoolLiteral),
"integer_literal" | "float_literal" => {
build_number_literal(node).map(CoreSyntaxNode::NumberLiteral)
}
"string_literal" | "char_literal" | "raw_string_literal" => {
build_string_literal(graph, node).map(CoreSyntaxNode::StringLiteral)
}
"line_comment" | "doc_comment" => build_comment(graph, node).map(CoreSyntaxNode::Comment),
"block_comment" => build_multi_comment(graph, node).map(CoreSyntaxNode::Comment),
"attribute_item" => build_attribute_item(graph, node).map(CoreSyntaxNode::Comment),
"inner_attribute_item" => {
build_inner_attribute_item(graph, node).map(CoreSyntaxNode::Comment)
}
"extern_crate_declaration" => {
build_extern_crate_declaration(graph, node).map(CoreSyntaxNode::Comment)
}
"empty_statement" => build_empty_statement(graph, node).map(CoreSyntaxNode::Comment),
_ => Err(SyntaxNodeBuildError::UnsupportedNode(node.kind.clone())),
};
core_node.map(|c| (c, n_id))
}