1use 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}