espup 0.3.0

Tool for installing and maintaining ESP Rust environment.
Documentation
use crate::emoji;

#[derive(Debug, miette::Diagnostic, thiserror::Error)]
pub enum Error {
    #[diagnostic(code(espup::toolchain::create_directory))]
    #[error("{} Creating directory '{0}' failed", emoji::ERROR)]
    CreateDirectory(String),

    #[diagnostic(code(espup::toolchain::rust::query_github))]
    #[error("{} Failed to query GitHub API.", emoji::ERROR)]
    GithubQuery,

    #[diagnostic(code(espup::toolchain::rust::install_riscv_target))]
    #[error(
        "{} Failed to Install RISC-V targets for '{0}' toolchain.",
        emoji::ERROR
    )]
    InstallRiscvTarget(String),

    #[diagnostic(code(espup::ivalid_destination))]
    #[error(
        "{} Invalid export file destination: '{0}'. Please, use an absolute or releative path (including the file and its extension).",
        emoji::ERROR
    )]
    InvalidDestination(String),

    #[diagnostic(code(espup::toolchain::rust::invalid_version))]
    #[error(
        "{} Invalid toolchain version '{0}'. Verify that the format is correct: '<major>.<minor>.<patch>.<subpatch>' or '<major>.<minor>.<patch>', and that the release exists in https://github.com/esp-rs/rust-build/releases",
        emoji::ERROR
    )]
    InvalidVersion(String),

    #[error(transparent)]
    IoError(#[from] std::io::Error),

    #[diagnostic(code(espup::toolchain::rust::missing_rust))]
    #[error(
        "{} Rust is not installed. Please, install Rust via rustup: https://rustup.rs/",
        emoji::ERROR
    )]
    MissingRust,

    #[diagnostic(code(espup::remove_directory))]
    #[error("{} Failed to remove '{0}' directory.", emoji::ERROR)]
    RemoveDirectory(String),

    #[error(transparent)]
    RewquestError(#[from] reqwest::Error),

    #[diagnostic(code(espup::toolchain::rust::rustup_detection_error))]
    #[error("{} Error detecting rustup: {0}", emoji::ERROR)]
    RustupDetection(String),

    #[diagnostic(code(espup::toolchain::rust::serialize_json))]
    #[error("{} Failed to serialize json from string.", emoji::ERROR)]
    SerializeJson,

    #[diagnostic(code(espup::toolchain::rust::uninstall_riscv_target))]
    #[error("{} Failed to uninstall RISC-V target.", emoji::ERROR)]
    UninstallRiscvTarget,

    #[diagnostic(code(espup::toolchain::unsupported_file_extension))]
    #[error("{} Unsuported file extension: '{0}'", emoji::ERROR)]
    UnsuportedFileExtension(String),

    #[diagnostic(code(espup::host_triple::unsupported_host_triple))]
    #[error("{} Host triple '{0}' is not supported", emoji::ERROR)]
    UnsupportedHostTriple(String),

    #[diagnostic(code(espup::targets::unsupported_target))]
    #[error("{} Target '{0}' is not supported", emoji::ERROR)]
    UnsupportedTarget(String),
}