use thiserror::Error;
#[derive(Debug, Error)]
pub enum ComposeError {
#[error("parse error in module '{module}': {message}")]
ParseError { module: String, message: String },
#[error("module not found: {0}")]
ModuleNotFound(String),
#[error("function '{function}' not found in module '{module}'")]
FunctionNotFound { module: String, function: String },
#[error("unresolved import in '{consumer}': {import_module}::{import_fn}")]
UnresolvedImport {
consumer: String,
import_module: String,
import_fn: String,
},
#[error("type mismatch wiring {consumer}::{import_fn} to {provider}::{export_fn}: {message}")]
TypeMismatch {
consumer: String,
import_fn: String,
provider: String,
export_fn: String,
message: String,
},
#[error("duplicate internal function '{function}' in modules: {modules:?}")]
DuplicateInternal {
function: String,
modules: Vec<String>,
},
#[error("circular dependency detected: {cycle:?}")]
CircularDependency { cycle: Vec<String> },
#[error("encoding error: {0}")]
EncodingError(String),
#[error("memory error: {0}")]
MemoryError(String),
#[error("no modules added")]
NoModules,
#[error("invalid WASM module '{module}': {message}")]
InvalidModule { module: String, message: String },
}