mirror of
https://github.com/tauri-apps/plugins-workspace.git
synced 2026-04-29 12:06:01 +02:00
101 lines
3.9 KiB
Rust
101 lines
3.9 KiB
Rust
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
use http::StatusCode;
|
|
use serde::{Serialize, Serializer};
|
|
|
|
/// All errors that can occur while running the updater.
|
|
#[derive(Debug, thiserror::Error)]
|
|
#[non_exhaustive]
|
|
pub enum Error {
|
|
/// IO Errors.
|
|
#[error("`{0}`")]
|
|
Io(#[from] std::io::Error),
|
|
/// Semver Errors.
|
|
#[error("Unable to compare version: {0}")]
|
|
Semver(#[from] semver::Error),
|
|
/// JSON (Serde) Errors.
|
|
#[error("JSON error: {0}")]
|
|
SerdeJson(#[from] serde_json::Error),
|
|
/// Minisign is used for signature validation.
|
|
#[error("Verify signature error: {0}")]
|
|
Minisign(#[from] minisign_verify::Error),
|
|
/// Error with Minisign base64 decoding.
|
|
#[error("Signature decoding error: {0}")]
|
|
Base64(#[from] base64::DecodeError),
|
|
/// UTF8 Errors in signature.
|
|
#[error("The signature {0} could not be decoded, please check if it is a valid base64 string. The signature must be the contents of the `.sig` file generated by the Tauri bundler, as a string.")]
|
|
SignatureUtf8(String),
|
|
/// Tauri utils, mainly extract and file move.
|
|
#[error("Tauri API error: {0}")]
|
|
TauriApi(#[from] tauri::api::Error),
|
|
/// Network error.
|
|
#[error("Download request failed with status: {0}")]
|
|
DownloadFailed(StatusCode),
|
|
/// Network error.
|
|
#[error("Network error: {0}")]
|
|
Network(#[from] reqwest::Error),
|
|
/// Failed to serialize header value as string.
|
|
#[error(transparent)]
|
|
Utf8(#[from] std::string::FromUtf8Error),
|
|
/// Could not fetch a valid response from the server.
|
|
#[error("Could not fetch a valid release JSON from the remote")]
|
|
ReleaseNotFound,
|
|
/// Error building updater.
|
|
#[error("Unable to prepare the updater: {0}")]
|
|
Builder(String),
|
|
/// Error building updater.
|
|
#[error("Unable to extract the new version: {0}")]
|
|
Extract(String),
|
|
/// Updater cannot be executed on this Linux package. Currently the updater is enabled only on AppImages.
|
|
#[error(
|
|
"Cannot run updater on this Linux package. Currently only an AppImage can be updated."
|
|
)]
|
|
UnsupportedLinuxPackage,
|
|
/// Operating system is not supported.
|
|
#[error("unsupported OS, expected one of `linux`, `darwin` or `windows`.")]
|
|
UnsupportedOs,
|
|
/// Unsupported app architecture.
|
|
#[error(
|
|
"Unsupported application architecture, expected one of `x86`, `x86_64`, `arm` or `aarch64`."
|
|
)]
|
|
UnsupportedArch,
|
|
/// The platform was not found on the updater JSON response.
|
|
#[error("the platform `{0}` was not found on the response `platforms` object")]
|
|
TargetNotFound(String),
|
|
/// Triggered when there is NO error and the two versions are equals.
|
|
/// On client side, it's important to catch this error.
|
|
#[error("No updates available")]
|
|
UpToDate,
|
|
/// The updater responded with an invalid signature type.
|
|
#[error("the updater response field `{0}` type is invalid, expected {1} but found {2}")]
|
|
InvalidResponseType(&'static str, &'static str, serde_json::Value),
|
|
/// HTTP error.
|
|
#[error(transparent)]
|
|
Http(#[from] http::Error),
|
|
/// Temp dir is not on same mount mount. This prevents our updater to rename the AppImage to a temp file.
|
|
#[cfg(target_os = "linux")]
|
|
#[error("temp directory is not on the same mount point as the AppImage")]
|
|
TempDirNotOnSameMountPoint,
|
|
/// The path StripPrefixError error.
|
|
#[error("Path Error: {0}")]
|
|
PathPrefix(#[from] std::path::StripPrefixError),
|
|
/// Ignore error.
|
|
#[error("failed to walkdir: {0}")]
|
|
Ignore(#[from] ignore::Error),
|
|
/// Zip error.
|
|
#[cfg(windows)]
|
|
#[error(transparent)]
|
|
ZipError(#[from] zip::result::ZipError),
|
|
}
|
|
|
|
impl Serialize for Error {
|
|
fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
|
|
where
|
|
S: Serializer,
|
|
{
|
|
serializer.serialize_str(self.to_string().as_ref())
|
|
}
|
|
}
|