use crate::ast::node_utils::NodeResolutionError;
use crate::{ast::AstNode, syntax::SyntaxNode};
use alloc::boxed::Box;
use alloc::string::String;
#[derive(Clone, PartialEq, Eq, Debug)]
pub enum SyntaxNodeBuildError {
Error(String),
ResolutionError(NodeResolutionError),
UnsupportedNode(String),
#[allow(dead_code, reason = "for handling other error in the future")]
ChainedError {
msg: String,
parent: Box<Self>,
},
}
impl core::fmt::Display for SyntaxNodeBuildError {
fn fmt(&self, formatter: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
Self::Error(msg) => formatter.write_str(msg),
Self::ResolutionError(err) => err.fmt(formatter),
Self::UnsupportedNode(kind) => write!(formatter, "Unsupported node kind `{kind}`"),
Self::ChainedError { msg, parent } => write!(formatter, "{msg}: {parent}"),
}
}
}
#[allow(dead_code, reason = "will be used later on the dispatchers")]
pub type NodeBuilder = fn(args: &AstNode) -> Result<SyntaxNode, SyntaxNodeBuildError>;