use url::Url;
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error(transparent)]
Load {
#[from]
source: crate::loader::Error,
},
#[error("Error in parsing `{plugin_name}` configuration from `{url}` for `{item}`")]
Parse {
plugin_name: String,
url: Url,
item: Box<String>,
source: crate::parser::Error,
},
#[error(transparent)]
Validate {
#[from]
source: plugx_input::schema::InputSchemaError,
},
#[error(transparent)]
Other(#[from] anyhow::Error),
}
impl From<url::ParseError> for Error {
fn from(url_parser_error: url::ParseError) -> Self {
Self::Other(anyhow::anyhow!(url_parser_error))
}
}
impl From<(String, Url, String, crate::parser::Error)> for Error {
fn from(
(plugin_name, url, item, parser_error): (String, Url, String, crate::parser::Error),
) -> Self {
Self::Parse {
plugin_name,
url,
item: Box::new(item),
source: parser_error,
}
}
}