1use std::{
2 env::{ consts::{ ARCH, OS }, VarError },
3 fmt::{ Display, Formatter, Result as FmtResult }
4};
5use zip::result::ZipError;
6
7#[derive(Debug)]
9pub enum Error<'a> {
10 NotProvidedPlatform,
12 NonExistsVersion(&'a str),
14 NonExistsPlatformVersion(&'a str),
16 VersionCheck((&'a str, String)),
19 GitHubApi((u16, String)),
21 ForcePath(String),
23 VarError(VarError),
25 Io(std::io::Error),
27 Ureq(Box<ureq::Error>),
29 Zip(ZipError)
31}
32
33impl<'a> Display for Error<'a> {
34 fn fmt(&self, f: &mut Formatter) -> FmtResult {
35 match self {
36 Error::NotProvidedPlatform => {
37 write!(f, "Pre-built binaries for `{}-{}` platform don't provided", OS, ARCH)
38 },
39 Error::NonExistsVersion(version) => {
40 write!(f, "Pre-built binaries version `{}` not exists", version)
41 },
42 Error::NonExistsPlatformVersion(version) => {
43 write!(
44 f,
45 "Pre-built binaries version `{}` for `{}-{}` platform don't provided",
46 version, OS, ARCH
47 )
48 },
49 Error::VersionCheck((required, returned)) => {
50 write!(
51 f,
52 "Pre-built binaries version check error: require `{}`, returned `{}`",
53 required, returned
54 )
55 },
56 Error::GitHubApi((status, response)) => {
57 write!(f, "GitHub API response error: {} {}", status, response)
58 },
59 Error::ForcePath(message) => {
60 write!(f, "Force defined paths error: {}", message)
61 },
62 Error::VarError(err) => write!(f, "{}", err),
63 Error::Io(err) => write!(f, "{}", err),
64 Error::Ureq(err) => write!(f, "{}", err),
65 Error::Zip(err) => write!(f, "{}", err)
66 }
67 }
68}