use thiserror::Error;
#[derive(Error, Debug)]
pub enum LoadError {
#[error(transparent)]
Io(#[from] std::io::Error),
#[error(transparent)]
Deserialize(#[from] anyhow::Error),
}
#[derive(Error, Debug)]
pub enum SaveError {
#[error(transparent)]
Io(#[from] std::io::Error),
#[error(transparent)]
Serialize(#[from] anyhow::Error),
}
#[cfg(feature = "json")]
impl From<serde_json::Error> for LoadError {
fn from(value: serde_json::Error) -> Self {
Self::Deserialize(value.into())
}
}
#[cfg(feature = "json")]
impl From<serde_json::Error> for SaveError {
fn from(value: serde_json::Error) -> Self {
Self::Serialize(value.into())
}
}
#[cfg(feature = "toml")]
impl From<toml::de::Error> for LoadError {
fn from(value: toml::de::Error) -> Self {
Self::Deserialize(value.into())
}
}
#[cfg(feature = "toml")]
impl From<toml::ser::Error> for SaveError {
fn from(value: toml::ser::Error) -> Self {
Self::Serialize(value.into())
}
}
#[cfg(feature = "yaml")]
impl From<serde_saphyr::Error> for LoadError {
fn from(value: serde_saphyr::Error) -> Self {
Self::Deserialize(value.into())
}
}
#[cfg(feature = "yaml")]
impl From<serde_saphyr::ser::Error> for SaveError {
fn from(value: serde_saphyr::ser::Error) -> Self {
Self::Serialize(value.into())
}
}
#[cfg(test)]
pub mod mocks {
use super::{Error, LoadError, SaveError};
#[derive(Error, Debug)]
#[error("Mock Error Type")]
pub struct MockError;
impl From<MockError> for LoadError {
fn from(value: MockError) -> Self {
Self::Deserialize(value.into())
}
}
impl From<MockError> for SaveError {
fn from(value: MockError) -> Self {
Self::Serialize(value.into())
}
}
}