use crate::network::ForgeApiKind;
use reqwest::header::InvalidHeaderValue;
use strum::{IntoEnumIterator, ParseError};
#[derive(Debug)]
pub enum Error {
BadPlatformType(strum::ParseError),
BadSecretKey(InvalidHeaderValue),
BadUrl(url::ParseError),
}
impl core::fmt::Display for Error {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::BadPlatformType(err) => {
let options: Vec<ForgeApiKind> = ForgeApiKind::iter().collect();
match err {
ParseError::VariantNotFound => {
write!(f, "Platform type must be one of {options:?}")
}
}
}
Self::BadSecretKey(err) => write!(f, "Invalid secret key was given: {err}"),
Self::BadUrl(err) => write!(f, "Invalid source URL was given: {err}"),
}
}
}
impl From<strum::ParseError> for Error {
fn from(value: strum::ParseError) -> Self {
Self::BadPlatformType(value)
}
}
impl From<InvalidHeaderValue> for Error {
fn from(value: InvalidHeaderValue) -> Self {
Self::BadSecretKey(value)
}
}
impl From<url::ParseError> for Error {
fn from(value: url::ParseError) -> Self {
Self::BadUrl(value)
}
}
impl std::error::Error for Error {}