1use crate::{event::EventError, handshake::HandshakeError, ParseError};
2use std::{fmt, io};
3
4#[derive(Debug)]
5pub enum Error {
6 UnexpectedHandshakeEvent,
7 InvalidInterfaceVersion(&'static str, u32),
8 Event(EventError),
10 Parse(ParseError),
11 Handshake(HandshakeError),
12 Io(io::Error),
13}
14
15impl fmt::Display for Error {
16 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17 match self {
18 Self::UnexpectedHandshakeEvent => write!(f, "unexpected handshake event"),
19 Self::InvalidInterfaceVersion(interface, version) => write!(
20 f,
21 "invalid version {} for interface '{}'",
22 version, interface
23 ),
24 Self::Event(err) => write!(f, "event error: {}", err),
25 Self::Io(err) => write!(f, "IO error: {}", err),
26 Self::Handshake(err) => write!(f, "handshake error: {}", err),
27 Self::Parse(err) => write!(f, "parse error: {}", err),
28 }
29 }
30}
31
32impl From<EventError> for Error {
33 fn from(err: EventError) -> Self {
34 Self::Event(err)
35 }
36}
37
38impl From<ParseError> for Error {
39 fn from(err: ParseError) -> Self {
40 Self::Parse(err)
41 }
42}
43
44impl From<HandshakeError> for Error {
45 fn from(err: HandshakeError) -> Self {
46 Self::Handshake(err)
47 }
48}
49
50impl From<io::Error> for Error {
51 fn from(err: io::Error) -> Self {
52 Self::Io(err)
53 }
54}
55
56impl std::error::Error for Error {}