mini_builder_rs/evaluator/
evaluator_builder_error.rs

1use crate::{
2	parser::{node::NodeContent, parser_error::ParserError},
3	tokenizer::tokenizer_error::TokenizerError,
4};
5
6/// An error that is return by [super::evaluator::EvaluatorBuilder] when an
7/// invalid input passed.
8#[derive(Debug)]
9pub enum EvaluatorBuilderError {
10	ExpectedOneOf(usize, Vec<String>),
11	TokenizerError(TokenizerError),
12	ParserError(ParserError),
13	UnexpectedNodeContent(String),
14}
15
16impl std::fmt::Display for EvaluatorBuilderError {
17	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
18		match self {
19			Self::ExpectedOneOf(location, nodes) => write!(
20				f,
21				"unexpected node at {location}, expected one of: {:?}",
22				nodes
23			),
24			Self::TokenizerError(tokenizer_error) => std::fmt::Display::fmt(&tokenizer_error, f),
25			Self::ParserError(parser_error) => std::fmt::Display::fmt(&parser_error, f),
26			Self::UnexpectedNodeContent(s) => {
27				write!(f, "unexpected node content {:?}", s)
28			}
29		}
30	}
31}
32
33impl std::error::Error for EvaluatorBuilderError {
34	fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
35		match self {
36			Self::TokenizerError(tokenizer_error) => Some(tokenizer_error),
37			Self::ParserError(parser_error) => Some(parser_error),
38			_ => None,
39		}
40	}
41}
42
43impl From<TokenizerError> for EvaluatorBuilderError {
44	fn from(tokenizer_error: TokenizerError) -> Self {
45		Self::TokenizerError(tokenizer_error)
46	}
47}
48
49impl From<ParserError> for EvaluatorBuilderError {
50	fn from(parser_error: ParserError) -> Self {
51		Self::ParserError(parser_error)
52	}
53}