1
use std::sync::PoisonError;
2

            
3
use finance::error::FinanceError;
4
use thiserror::Error;
5
use wasmtime::Error as WASMError;
6

            
7
use crate::runtime::EngineError;
8

            
9
#[derive(Debug, Error)]
10
pub enum HookError {
11
    #[error("WASM: {0}")]
12
    WASM(#[from] WASMError),
13
    #[error("WASM memory access error")]
14
    WASMMem,
15
    #[error("Mutex lock error")]
16
    Lock,
17
    #[error("Finance error: {0}")]
18
    Finance(#[from] FinanceError),
19
    #[error("Parse error: {0}")]
20
    Parse(String),
21
    #[error("Script error: {0}")]
22
    Script(String),
23
    #[error("Engine: {0}")]
24
    Engine(#[from] EngineError),
25
}
26

            
27
impl<T> From<PoisonError<T>> for HookError {
28
    fn from(err: PoisonError<T>) -> Self {
29
        tracing::error!("Mutex lock error: {err}");
30
        Self::Lock
31
    }
32
}