1use core::fmt;
2
3use umsh_core::{EncodeError as CoreEncodeError, PacketType, ParseError as CoreParseError};
4
5#[derive(Clone, Copy, Debug, PartialEq, Eq)]
7pub enum ParseError {
8 Core(CoreParseError),
10 InvalidUtf8,
12 InvalidPayloadType(u8),
14 PayloadTypeNotAllowed {
16 payload_type: u8,
17 packet_type: PacketType,
18 },
19 InvalidMessageType(u8),
21 InvalidOptionValue,
23 DuplicateOption(u16),
26}
27
28impl From<CoreParseError> for ParseError {
29 fn from(value: CoreParseError) -> Self {
30 Self::Core(value)
31 }
32}
33
34impl fmt::Display for ParseError {
35 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
36 write!(f, "{self:?}")
37 }
38}
39
40#[derive(Clone, Copy, Debug, PartialEq, Eq)]
42pub enum EncodeError {
43 Core(CoreEncodeError),
45 BufferTooSmall,
47 InvalidField,
49}
50
51impl From<CoreEncodeError> for EncodeError {
52 fn from(value: CoreEncodeError) -> Self {
53 Self::Core(value)
54 }
55}
56
57impl fmt::Display for EncodeError {
58 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
59 write!(f, "{self:?}")
60 }
61}
62
63#[derive(Clone, Debug, PartialEq, Eq)]
65pub enum TextSendError<E> {
66 Encode(EncodeError),
68 Transport(E),
70}
71
72impl<E> From<EncodeError> for TextSendError<E> {
73 fn from(value: EncodeError) -> Self {
74 Self::Encode(value)
75 }
76}
77
78impl<E> fmt::Display for TextSendError<E>
79where
80 E: fmt::Debug,
81{
82 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
83 write!(f, "{self:?}")
84 }
85}
86
87#[cfg(feature = "std")]
88impl std::error::Error for ParseError {}
89
90#[cfg(feature = "std")]
91impl std::error::Error for EncodeError {}
92
93#[cfg(feature = "std")]
94impl<E> std::error::Error for TextSendError<E> where E: fmt::Debug + fmt::Display + 'static {}