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}