use std::{io, str::Utf8Error};
use thiserror::Error;
use tycho_common::simulation::errors::SimulationError;
#[derive(Error, Debug, PartialEq)]
pub enum EncodingError {
#[error("Invalid input: {0}")]
InvalidInput(String),
#[error("Fatal error: {0}")]
FatalError(String),
#[error("Recoverable error: {0}")]
RecoverableError(String),
#[error("Not implemented: {0}")]
NotImplementedError(String),
}
impl From<io::Error> for EncodingError {
fn from(err: io::Error) -> Self {
EncodingError::FatalError(err.to_string())
}
}
impl From<serde_json::Error> for EncodingError {
fn from(err: serde_json::Error) -> Self {
EncodingError::FatalError(err.to_string())
}
}
impl From<Utf8Error> for EncodingError {
fn from(err: Utf8Error) -> Self {
EncodingError::FatalError(err.to_string())
}
}
impl From<SimulationError> for EncodingError {
fn from(err: SimulationError) -> Self {
match err {
SimulationError::FatalError(err_msg) => EncodingError::FatalError(err_msg),
SimulationError::InvalidInput(err_msg, ..) => EncodingError::InvalidInput(err_msg),
SimulationError::RecoverableError(error_msg) => {
EncodingError::RecoverableError(error_msg)
}
}
}
}