use super::{super::dispatch::*, initialization::*};
use {
depiction::*,
std::{io, sync::*},
thiserror::*,
wasmtime::component::*,
};
#[derive(Debug, Error)]
pub enum PluginError {
#[error("not found: {0}")]
NotFound(String),
#[error("load Wasm: {0:?}")]
LoadWasm(wasmtime::Error),
#[error("link Wasm: {0:?}")]
LinkWasm(wasmtime::Error),
#[cfg(feature = "plugins")]
#[error("instantiate Wasm: {0:?}")]
InstantiateWasm(wasmtime::Error),
#[error("call Wasm: {0:?}")]
CallWasm(wasmtime::Error),
#[error("Wasm resource: {0}")]
WasmResource(#[from] ResourceTableError),
#[error("initialization: {0}")]
Initialization(#[from] InitializationError),
#[error("dispatch: {0}")]
Dispatch(#[from] DispatchError),
#[error("concurrency: {0}")]
Concurrency(String),
}
impl Depict for PluginError {
fn depict<WriteT>(&self, writer: &mut WriteT, context: &DepictionContext) -> io::Result<()>
where
WriteT: io::Write,
{
match self {
Self::Dispatch(dispatch) => dispatch.depict(writer, context),
_ => {
context.separate(writer)?;
context.theme.write_error(writer, self)
}
}
}
}
impl<GuardT> From<PoisonError<GuardT>> for PluginError {
fn from(error: PoisonError<GuardT>) -> Self {
Self::Concurrency(error.to_string())
}
}