use thiserror::Error;
use wasm_bindgen::prelude::*;
#[derive(Error, Debug)]
pub enum WasmError {
#[error("Shape mismatch: expected {expected:?}, got {actual:?}")]
ShapeMismatch {
expected: Vec<usize>,
actual: Vec<usize>,
},
#[error("Invalid dimensions: {0}")]
InvalidDimensions(String),
#[error("Index out of bounds: {0}")]
IndexOutOfBounds(String),
#[error("Invalid parameter: {0}")]
InvalidParameter(String),
#[error("Computation error: {0}")]
ComputationError(String),
#[error("Serialization error: {0}")]
SerializationError(String),
#[error("Core error: {0}")]
CoreError(String),
}
impl From<WasmError> for JsValue {
fn from(err: WasmError) -> Self {
#[cfg(target_arch = "wasm32")]
{
JsValue::from_str(&err.to_string())
}
#[cfg(not(target_arch = "wasm32"))]
{
let _ = err;
JsValue::NULL
}
}
}
impl From<scirs2_core::error::CoreError> for WasmError {
fn from(err: scirs2_core::error::CoreError) -> Self {
WasmError::CoreError(err.to_string())
}
}
impl From<serde_json::Error> for WasmError {
fn from(err: serde_json::Error) -> Self {
WasmError::SerializationError(err.to_string())
}
}
impl From<serde_wasm_bindgen::Error> for WasmError {
fn from(err: serde_wasm_bindgen::Error) -> Self {
WasmError::SerializationError(err.to_string())
}
}
pub type WasmResult<T> = Result<T, WasmError>;