use crate::HostImportError;
use crate::misc::PrepareError;
use marine_it_interfaces::MITInterfacesError;
use marine_it_parser::ITParserError;
use marine_module_interface::it_interface::ITInterfaceError;
use marine_wasm_backend_traits::errors::*;
use thiserror::Error as ThisError;
#[derive(Debug, ThisError)]
pub enum MError {
#[error("{0}")]
RecordResolveError(String), #[error(transparent)]
WASIPrepareError(#[from] WasiError),
#[error(transparent)]
ModuleInterfaceError(#[from] ITInterfaceError),
#[error("Execution error: {0}")]
ITInstructionError(#[from] wasmer_it::errors::InstructionError),
#[error(transparent)]
PrepareError(#[from] PrepareError),
#[error("module with name '{0}' already loaded into Marine, please specify another name")]
NonUniqueModuleName(String),
#[error("module with name '{0}' doesn't have function with name {1}")]
NoSuchFunction(String, String),
#[error("module with name '{0}' isn't loaded into Marine")]
NoSuchModule(String),
#[error(transparent)]
HostImportError(#[from] HostImportError),
#[error(transparent)]
WITParseError(#[from] ITParserError),
#[error("{0}")]
IncorrectWIT(String), #[error("Wasm backend error: {0}")]
WasmBackendError(#[from] WasmBackendError),
}
impl From<MITInterfacesError> for MError {
fn from(err: MITInterfacesError) -> Self {
MError::IncorrectWIT(format!("{}", err))
}
}
impl From<ModuleCreationError> for MError {
fn from(value: ModuleCreationError) -> Self {
Into::<WasmBackendError>::into(value).into()
}
}
impl From<ResolveError> for MError {
fn from(value: ResolveError) -> Self {
Into::<WasmBackendError>::into(value).into()
}
}
impl From<ImportError> for MError {
fn from(value: ImportError) -> Self {
Into::<WasmBackendError>::into(value).into()
}
}
impl From<InstantiationError> for MError {
fn from(value: InstantiationError) -> Self {
Into::<WasmBackendError>::into(value).into()
}
}
impl From<RuntimeError> for MError {
fn from(value: RuntimeError) -> Self {
Into::<WasmBackendError>::into(value).into()
}
}