use thiserror::Error;
#[derive(Error, Debug)]
#[error(transparent)]
pub struct LivePlatformError(#[from] ErrorRepr);
impl LivePlatformError {
pub fn new<E>(msg: &str, source: E) -> Self
where
E: Into<anyhow::Error>,
{
ErrorRepr::Unexpected {
msg: msg.to_string(),
source: source.into(),
}
.into()
}
}
#[derive(Error, Debug)]
pub enum ErrorRepr {
#[error("FetchRelease error: {0}")]
FetchReleaseError(#[from] FetchReleaseError),
#[error("ListVersions error: {0}")]
ListVersionsError(#[from] ListVersionsError),
#[error("Unexpected error: {msg}")]
Unexpected {
msg: String,
#[source]
source: anyhow::Error,
},
}
#[derive(Error, Debug)]
pub enum FetchReleaseError {
#[error("Failed to fetch release: {0}")]
FetchFailed(String),
#[error("Invalid JSON response")]
JsonError(#[source] reqwest::Error),
#[error("Release not found for version: {0} platform: {1} architecture: {2} stream: {3}")]
NotFound(String, String, String, String),
#[error("Network error: {0}")]
NetworkError(#[source] reqwest::Error),
#[error("Cache error: {0}")]
CacheError(String),
#[error("IO error: {0}")]
IoError(#[from] std::io::Error),
#[error("JSON serialization error: {0}")]
JsonSerializationError(#[from] serde_json::Error),
}
impl From<String> for FetchReleaseError {
fn from(s: String) -> Self {
Self::CacheError(s)
}
}
#[cfg(feature = "cache")]
impl From<crate::api::cache::CacheError> for FetchReleaseError {
fn from(cache_error: crate::api::cache::CacheError) -> Self {
Self::CacheError(cache_error.to_string())
}
}
#[derive(Error, Debug)]
pub enum ListVersionsError {
#[error("Failed to fetch version list: {0}")]
FetchFailed(String),
#[error("Invalid JSON response")]
JsonError(#[source] reqwest::Error),
#[error("Network error: {0}")]
NetworkError(#[source] reqwest::Error),
#[error("Cache error: {0}")]
CacheError(String),
}
#[cfg(feature = "cache")]
impl From<crate::api::cache::CacheError> for ListVersionsError {
fn from(cache_error: crate::api::cache::CacheError) -> Self {
Self::CacheError(cache_error.to_string())
}
}