ipmb/
errors.rs

1use crate::{platform::Remote, Version};
2use thiserror::Error;
3
4#[derive(Debug, Error)]
5pub enum Error {
6    #[error("encode error")]
7    Encode(#[from] bincode::error::EncodeError),
8    #[error("decode error")]
9    Decode(#[from] bincode::error::DecodeError),
10    #[error("type uuid not found")]
11    TypeUuidNotFound,
12    #[error("timeout")]
13    Timeout,
14    #[error("disconnected")]
15    Disconnect,
16    #[error("version mismatch: {0}")]
17    VersionMismatch(Version, Option<Remote>),
18    #[error("token mismatch")]
19    TokenMismatch,
20    #[error("identifier in use")]
21    IdentifierInUse,
22    #[error("identifier not in use")]
23    IdentifierNotInUse,
24    #[cfg(target_os = "windows")]
25    #[error("win error: {0}")]
26    WinError(#[from] windows::core::Error),
27    #[error("io error: {0}")]
28    IoError(#[from] std::io::Error),
29    #[error("memory region mapping error")]
30    MemoryRegionMapping,
31    #[error("permisson denied")]
32    PermissonDenied,
33    #[error("unknown error")]
34    Unknown,
35}
36
37#[derive(Debug, Error)]
38pub enum JoinError {
39    #[error("version mismatch: {0}")]
40    VersionMismatch(Version),
41    #[error("token mismatch")]
42    TokenMismatch,
43    #[error("timeout")]
44    Timeout,
45    #[error("permisson denied")]
46    PermissonDenied,
47}
48
49#[derive(Debug, Error)]
50pub enum SendError {
51    #[error("timeout")]
52    Timeout,
53    #[error("version mismatch: {0}")]
54    VersionMismatch(Version),
55    #[error("token mismatch")]
56    TokenMismatch,
57    #[error("permisson denied")]
58    PermissonDenied,
59}
60
61impl From<JoinError> for SendError {
62    fn from(value: JoinError) -> Self {
63        match value {
64            JoinError::VersionMismatch(v) => Self::VersionMismatch(v),
65            JoinError::TokenMismatch => Self::TokenMismatch,
66            JoinError::Timeout => Self::Timeout,
67            JoinError::PermissonDenied => Self::PermissonDenied,
68        }
69    }
70}
71
72#[derive(Debug, Error)]
73pub enum RecvError {
74    #[error("decode error")]
75    Decode(#[from] bincode::error::DecodeError),
76    #[error("timeout")]
77    Timeout,
78    #[error("version mismatch: {0}")]
79    VersionMismatch(Version),
80    #[error("token mismatch")]
81    TokenMismatch,
82    #[error("permisson denied")]
83    PermissonDenied,
84}
85
86impl From<JoinError> for RecvError {
87    fn from(value: JoinError) -> Self {
88        match value {
89            JoinError::VersionMismatch(v) => Self::VersionMismatch(v),
90            JoinError::TokenMismatch => Self::TokenMismatch,
91            JoinError::Timeout => Self::Timeout,
92            JoinError::PermissonDenied => Self::PermissonDenied,
93        }
94    }
95}