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