use std::path::PathBuf;
use thiserror::Error;
#[derive(Debug, Error)]
pub enum PluginError {
#[error("failed to parse plugin source at {path}: {message}")]
InvalidSource { path: PathBuf, message: String },
#[error("plugin {plugin} does not expose version {version}")]
VersionNotFound { plugin: String, version: String },
#[error("plugin did not provide a result")]
NoResultProvided,
#[error("plugin backend error: {0}")]
Backend(String),
}
pub type PluginResult<T> = Result<T, PluginError>;
pub trait IntoPluginResult<T> {
fn into_plugin_result(self) -> Result<T, PluginError>;
}
impl<T, E: std::fmt::Display> IntoPluginResult<T> for Result<T, E> {
fn into_plugin_result(self) -> Result<T, PluginError> {
self.map_err(|error| PluginError::Backend(error.to_string()))
}
}