use crate::run::InvalidReason;
use std::io::Error as IoErr;
#[cfg(feature = "serde")]
use ron::error::{Error as RonErr, SpannedError};
#[cfg(feature = "serde")]
use roxmltree::Error as XmlError;
use thiserror::Error;
pub type HailResult<T> = Result<T, HailError>;
#[derive(Error, Debug)]
pub enum HailError {
#[cfg(feature = "serde")]
#[error("Could not serialize: {0}")]
Ser(#[from] RonErr),
#[cfg(feature = "serde")]
#[error("Could not deserialize: {0}")]
De(#[from] DeError),
#[error("I/O Error: {0}")]
Io(#[from] IoErr),
#[error("{0}")]
Str(String),
#[error("Invalid run: {0}")]
InvalidRun(#[from] InvalidReason),
}
#[cfg(feature = "serde")]
#[derive(Error, Debug)]
pub enum DeError {
#[error("{0}")]
Ron(SpannedError),
#[error("{0}")]
Xml(XmlError),
#[error("Invalid or missing version!")]
InvalidVersion,
}
impl From<String> for HailError {
fn from(s: String) -> Self {
Self::Str(s)
}
}
impl From<&str> for HailError {
fn from(s: &str) -> Self {
Self::Str(s.into())
}
}