protoc_prebuilt/
error.rs

1use std::{
2  env::{ consts::{ ARCH, OS }, VarError },
3  fmt::{ Display, Formatter, Result as FmtResult }
4};
5use zip::result::ZipError;
6
7/// Error returned if installation or initialization fail
8#[derive(Debug)]
9pub enum Error<'a> {
10  /// Pre-built binary not provided for current platform
11  NotProvidedPlatform,
12  /// Passed version not exists
13  NonExistsVersion(&'a str),
14  /// Pre-built binary not provided for current platform and passed version
15  NonExistsPlatformVersion(&'a str),
16  /// Pre-built binary version check fail, contain tuple with required version
17  /// and version returned by binary calling with "--version" argument
18  VersionCheck((&'a str, String)),
19  /// GitHub API response error
20  GitHubApi((u16, String)),
21  // Force defined paths error
22  ForcePath(String),
23  /// Read environment variable fail
24  VarError(VarError),
25  /// I/O operation error
26  Io(std::io::Error),
27  /// Ureq crate error
28  Ureq(Box<ureq::Error>),
29  /// Zip crate error
30  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}