mesh_channel_core/
error.rs1use thiserror::Error;
5
6#[derive(Debug, Error)]
8#[error(transparent)]
9pub struct ChannelError(Box<ChannelErrorInner>);
10
11#[derive(Debug)]
13#[non_exhaustive]
14pub enum ChannelErrorKind {
15 NodeFailure,
17 Corruption,
19}
20
21impl ChannelError {
22 pub fn kind(&self) -> ChannelErrorKind {
24 match &*self.0 {
25 ChannelErrorInner::NodeFailure(_) => ChannelErrorKind::NodeFailure,
26 ChannelErrorInner::Corruption(_) => ChannelErrorKind::Corruption,
27 }
28 }
29}
30
31impl From<mesh_protobuf::Error> for ChannelError {
32 fn from(err: mesh_protobuf::Error) -> Self {
33 Self(Box::new(ChannelErrorInner::Corruption(err)))
34 }
35}
36
37impl From<mesh_node::local_node::NodeError> for ChannelError {
38 fn from(value: mesh_node::local_node::NodeError) -> Self {
39 Self(Box::new(ChannelErrorInner::NodeFailure(value)))
40 }
41}
42
43#[derive(Debug, Error)]
44enum ChannelErrorInner {
45 #[error("node failure")]
46 NodeFailure(#[source] mesh_node::local_node::NodeError),
47 #[error("message corruption")]
48 Corruption(#[source] mesh_protobuf::Error),
49}
50
51#[derive(Debug, Error)]
53pub enum TryRecvError {
54 #[error("channel empty")]
56 Empty,
57 #[error("channel closed")]
59 Closed,
60 #[error("channel failure")]
62 Error(#[from] ChannelError),
63}
64
65#[derive(Debug, Error)]
67pub enum RecvError {
68 #[error("channel closed")]
70 Closed,
71 #[error("channel failure")]
73 Error(#[from] ChannelError),
74}