proto_core 0.55.5

Core proto APIs.
Documentation
use crate::id::Id;
use crate::utils::archive::ProtoArchiveError;
use crate::utils::process::ProtoProcessError;
use starbase_console::ConsoleError;
use starbase_styles::{Style, Stylize};
use starbase_utils::fs::FsError;
use starbase_utils::net::NetError;
use std::path::PathBuf;
use thiserror::Error;

#[derive(Error, Debug, miette::Diagnostic)]
pub enum ProtoBuildError {
    #[diagnostic(transparent)]
    #[error(transparent)]
    Archive(#[from] Box<ProtoArchiveError>),

    #[diagnostic(transparent)]
    #[error(transparent)]
    Console(#[from] Box<ConsoleError>),

    #[diagnostic(transparent)]
    #[error(transparent)]
    Fs(#[from] Box<FsError>),

    #[diagnostic(transparent)]
    #[error(transparent)]
    Net(#[from] Box<NetError>),

    #[diagnostic(transparent)]
    #[error(transparent)]
    Process(#[from] Box<ProtoProcessError>),

    #[error(transparent)]
    System(#[from] Box<system_env::Error>),

    #[diagnostic(code(proto::install::build::parse_version_failed))]
    #[error("Failed to parse version from {}.", .value.style(Style::Symbol))]
    FailedVersionParse {
        value: String,
        #[source]
        error: Box<semver::Error>,
    },

    #[diagnostic(code(proto::install::build::missing_builder))]
    #[error("Builder {} has not been installed.", .id.as_str().to_string().style(Style::Id))]
    MissingBuilder { id: Id },

    #[diagnostic(code(proto::install::build::missing_builder_exe))]
    #[error(
        "Executable {} from builder {} does not exist.",
        .exe.style(Style::Path),
        .id.to_string().style(Style::Id),
    )]
    MissingBuilderExe { exe: PathBuf, id: Id },

    #[diagnostic(code(proto::install::build::unmet_requirements))]
    #[error(
        "Build requirements have not been met, unable to proceed.\nPlease satisfy the requirements before attempting the build again."
    )]
    RequirementsNotMet,

    #[diagnostic(code(proto::install::build::cancelled))]
    #[error("Build has been cancelled.")]
    Cancelled,
}

impl From<ProtoArchiveError> for ProtoBuildError {
    fn from(e: ProtoArchiveError) -> ProtoBuildError {
        ProtoBuildError::Archive(Box::new(e))
    }
}

impl From<ConsoleError> for ProtoBuildError {
    fn from(e: ConsoleError) -> ProtoBuildError {
        ProtoBuildError::Console(Box::new(e))
    }
}

impl From<FsError> for ProtoBuildError {
    fn from(e: FsError) -> ProtoBuildError {
        ProtoBuildError::Fs(Box::new(e))
    }
}

impl From<NetError> for ProtoBuildError {
    fn from(e: NetError) -> ProtoBuildError {
        ProtoBuildError::Net(Box::new(e))
    }
}

impl From<ProtoProcessError> for ProtoBuildError {
    fn from(e: ProtoProcessError) -> ProtoBuildError {
        ProtoBuildError::Process(Box::new(e))
    }
}

impl From<system_env::Error> for ProtoBuildError {
    fn from(e: system_env::Error) -> ProtoBuildError {
        ProtoBuildError::System(Box::new(e))
    }
}