nw_sys/
error.rs

1//!
2//! Errors produced by the [`nw_sys`](super) crate.
3//!
4
5use std::sync::PoisonError;
6use thiserror::Error;
7use wasm_bindgen::JsValue;
8
9#[derive(Debug, Error)]
10pub enum Error {
11    #[error("Error: {0}")]
12    String(String),
13
14    #[error("Error: {0}")]
15    JsValue(String),
16
17    #[error("Poison Error: {0}")]
18    PoisonError(String),
19}
20
21impl From<String> for Error {
22    fn from(v: String) -> Self {
23        Self::String(v)
24    }
25}
26impl From<&str> for Error {
27    fn from(v: &str) -> Self {
28        Self::String(v.to_string())
29    }
30}
31
32impl From<JsValue> for Error {
33    fn from(v: JsValue) -> Self {
34        Self::JsValue(format!("{:?}", v))
35    }
36}
37
38impl<T> From<PoisonError<T>> for Error
39where
40    T: std::fmt::Debug,
41{
42    fn from(err: PoisonError<T>) -> Error {
43        Error::PoisonError(format!("{:?}", err))
44    }
45}
46
47impl From<Error> for String {
48    fn from(err: Error) -> String {
49        match err {
50            Error::String(s) | Error::PoisonError(s) | Error::JsValue(s) => s,
51        }
52    }
53}
54
55impl From<Error> for JsValue {
56    fn from(err: Error) -> JsValue {
57        let s: String = err.into();
58        JsValue::from_str(&s)
59    }
60}