use std::{
env::{ consts::{ ARCH, OS }, VarError },
fmt::{ Display, Formatter, Result as FmtResult }
};
use zip::result::ZipError;
#[derive(Debug)]
pub enum Error<'a> {
NotProvidedPlatform,
NonExistsVersion(&'a str),
NonExistsPlatformVersion(&'a str),
VersionCheck((&'a str, String)),
GitHubApi((u16, String)),
ForcePath(String),
VarError(VarError),
Io(std::io::Error),
Ureq(Box<ureq::Error>),
Zip(ZipError)
}
impl<'a> Display for Error<'a> {
fn fmt(&self, f: &mut Formatter) -> FmtResult {
match self {
Error::NotProvidedPlatform => {
write!(f, "Pre-built binaries for `{}-{}` platform don't provided", OS, ARCH)
},
Error::NonExistsVersion(version) => {
write!(f, "Pre-built binaries version `{}` not exists", version)
},
Error::NonExistsPlatformVersion(version) => {
write!(
f,
"Pre-built binaries version `{}` for `{}-{}` platform don't provided",
version, OS, ARCH
)
},
Error::VersionCheck((required, returned)) => {
write!(
f,
"Pre-built binaries version check error: require `{}`, returned `{}`",
required, returned
)
},
Error::GitHubApi((status, response)) => {
write!(f, "GitHub API response error: {} {}", status, response)
},
Error::ForcePath(message) => {
write!(f, "Force defined paths error: {}", message)
},
Error::VarError(err) => write!(f, "{}", err),
Error::Io(err) => write!(f, "{}", err),
Error::Ureq(err) => write!(f, "{}", err),
Error::Zip(err) => write!(f, "{}", err)
}
}
}