diff options
| author | Miquel Sabaté Solà <mikisabate@gmail.com> | 2025-01-09 16:26:20 +0100 |
|---|---|---|
| committer | Miquel Sabaté Solà <mikisabate@gmail.com> | 2025-01-09 16:30:01 +0100 |
| commit | 92092ccc245269e0c3a864d06f7e382a5bb9d8b0 (patch) | |
| tree | 6670969fdb03d6288fbc500b2792c833c5345b35 /lib/xixanta/src/errors.rs | |
| parent | 0f6e6d0b2f6887e025a08a862b55288f871e62ca (diff) | |
| download | tools.nes-92092ccc245269e0c3a864d06f7e382a5bb9d8b0.tar.gz tools.nes-92092ccc245269e0c3a864d06f7e382a5bb9d8b0.zip | |
Merge all error types into a single one
They started with good intentions, but in the end they were all pretty
much alike. Hence, it makes sense to simplify everything and provide a
single struct.
Signed-off-by: Miquel Sabaté Solà <mikisabate@gmail.com>
Diffstat (limited to 'lib/xixanta/src/errors.rs')
| -rw-r--r-- | lib/xixanta/src/errors.rs | 143 |
1 files changed, 0 insertions, 143 deletions
diff --git a/lib/xixanta/src/errors.rs b/lib/xixanta/src/errors.rs deleted file mode 100644 index 544b9b4..0000000 --- a/lib/xixanta/src/errors.rs +++ /dev/null @@ -1,143 +0,0 @@ -use crate::SourceInfo; -use std::fmt; - -#[derive(Debug, Clone, PartialEq)] -pub enum Error { - Parse(ParseError), - Context(ContextError), - Eval(EvalError), -} - -impl From<ParseError> for Vec<Error> { - fn from(err: ParseError) -> Self { - vec![Error::Parse(err)] - } -} - -impl From<ParseError> for Vec<ParseError> { - fn from(err: ParseError) -> Self { - vec![err] - } -} - -impl From<ContextError> for Vec<Error> { - fn from(err: ContextError) -> Self { - vec![Error::Context(err)] - } -} - -impl From<EvalError> for Vec<Error> { - fn from(err: EvalError) -> Self { - vec![Error::Eval(err)] - } -} - -impl fmt::Display for Error { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { - Error::Parse(parse_error) => write!(f, "{}", parse_error), - Error::Context(context_error) => write!(f, "{}", context_error), - Error::Eval(eval_error) => write!(f, "{}", eval_error), - } - } -} - -#[derive(Debug, Clone, PartialEq)] -pub struct ParseError { - pub line: usize, - pub message: String, - pub source: SourceInfo, -} - -impl std::error::Error for ParseError {} - -impl fmt::Display for ParseError { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - if self.source.name.is_empty() { - write!(f, "{} (line {})", self.message, self.line + 1) - } else { - write!( - f, - "{} ({}: line {})", - self.message, - self.source.name, - self.line + 1 - ) - } - } -} - -#[derive(Debug, Clone, PartialEq)] -pub struct ContextError { - pub line: usize, - pub message: String, - pub global: bool, - pub source: SourceInfo, -} - -impl std::error::Error for ContextError {} - -impl fmt::Display for ContextError { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - if self.global { - if self.source.name.is_empty() { - write!(f, "{}", self.message) - } else { - write!(f, "{} ({})", self.message, self.source.name) - } - } else if self.source.name.is_empty() { - write!(f, "{} (line {})", self.message, self.line + 1) - } else { - write!( - f, - "{} ({}: line {})", - self.message, - self.source.name, - self.line + 1 - ) - } - } -} - -#[derive(Debug, Clone, PartialEq)] -pub struct EvalError { - pub line: usize, - pub message: String, - pub global: bool, - pub source: SourceInfo, -} - -impl std::error::Error for EvalError {} - -impl From<ContextError> for EvalError { - fn from(err: ContextError) -> Self { - EvalError { - line: err.line, - message: err.message, - global: false, - source: SourceInfo::default(), // TODO - } - } -} - -impl fmt::Display for EvalError { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - if self.global { - if self.source.name.is_empty() { - write!(f, "{}", self.message) - } else { - write!(f, "{} ({})", self.message, self.source.name) - } - } else if self.source.name.is_empty() { - write!(f, "{} (line {})", self.message, self.line + 1) - } else { - write!( - f, - "{} ({}: line {})", - self.message, - self.source.name, - self.line + 1 - ) - } - } -} |
