proto_core 0.55.5

Core proto APIs.
Documentation
use crate::config::PROTO_CONFIG_NAME;
use crate::config_error::ProtoConfigError;
use crate::flow::resolve::ProtoResolveError;
use crate::id::Id;
use crate::tool_error::ProtoToolError;
use starbase_styles::{Style, Stylize};
use starbase_utils::json::JsonError;
use starbase_utils::toml::TomlError;
use starbase_utils::yaml::YamlError;
use thiserror::Error;
use warpgate::{WarpgateLoaderError, WarpgatePluginError};

#[derive(Error, Debug, miette::Diagnostic)]
pub enum ProtoLoaderError {
    #[diagnostic(transparent)]
    #[error(transparent)]
    Config(#[from] Box<ProtoConfigError>),

    #[diagnostic(transparent)]
    #[error(transparent)]
    Json(#[from] Box<JsonError>),

    #[diagnostic(transparent)]
    #[error(transparent)]
    Loader(#[from] Box<WarpgateLoaderError>),

    #[diagnostic(transparent)]
    #[error(transparent)]
    Plugin(#[from] Box<WarpgatePluginError>),

    #[diagnostic(transparent)]
    #[error(transparent)]
    Resolve(#[from] Box<ProtoResolveError>),

    #[diagnostic(transparent)]
    #[error(transparent)]
    Toml(#[from] Box<TomlError>),

    #[diagnostic(transparent)]
    #[error(transparent)]
    Tool(#[from] Box<ProtoToolError>),

    #[diagnostic(transparent)]
    #[error(transparent)]
    Yaml(#[from] Box<YamlError>),

    #[diagnostic(code(proto::tool::unknown_id))]
    #[error(
        "Unable to proceed, {} is not a built-in plugin and has not been configured with {} in a {} file.\n\nLearn more about plugins: {}\nSearch community plugins: {}",
        .id.to_string().style(Style::Id),
        "[plugins]".style(Style::Property),
        PROTO_CONFIG_NAME.style(Style::File),
        "https://moonrepo.dev/docs/proto/plugins".style(Style::Url),
        format!("proto plugin search {}", .id).style(Style::Shell),
    )]
    UnknownTool { id: Id },
}

impl From<ProtoConfigError> for ProtoLoaderError {
    fn from(e: ProtoConfigError) -> ProtoLoaderError {
        ProtoLoaderError::Config(Box::new(e))
    }
}

impl From<JsonError> for ProtoLoaderError {
    fn from(e: JsonError) -> ProtoLoaderError {
        ProtoLoaderError::Json(Box::new(e))
    }
}

impl From<WarpgateLoaderError> for ProtoLoaderError {
    fn from(e: WarpgateLoaderError) -> ProtoLoaderError {
        ProtoLoaderError::Loader(Box::new(e))
    }
}

impl From<WarpgatePluginError> for ProtoLoaderError {
    fn from(e: WarpgatePluginError) -> ProtoLoaderError {
        ProtoLoaderError::Plugin(Box::new(e))
    }
}

impl From<ProtoResolveError> for ProtoLoaderError {
    fn from(e: ProtoResolveError) -> ProtoLoaderError {
        ProtoLoaderError::Resolve(Box::new(e))
    }
}

impl From<TomlError> for ProtoLoaderError {
    fn from(e: TomlError) -> ProtoLoaderError {
        ProtoLoaderError::Toml(Box::new(e))
    }
}

impl From<ProtoToolError> for ProtoLoaderError {
    fn from(e: ProtoToolError) -> ProtoLoaderError {
        ProtoLoaderError::Tool(Box::new(e))
    }
}

impl From<YamlError> for ProtoLoaderError {
    fn from(e: YamlError) -> ProtoLoaderError {
        ProtoLoaderError::Yaml(Box::new(e))
    }
}