1use thiserror::Error;
4
5pub type Result<T, E = ProtocolError> = ::std::result::Result<T, E>;
7
8#[derive(Debug, Error)]
10pub enum ProtocolError {
11 #[error("an io error occurred")]
13 Io(#[source] std::io::Error),
14
15 #[error("invalid message: {}", string)]
17 InvalidMessage {
18 string: String,
20 #[source]
22 cause: MessageParseError,
23 },
24}
25
26impl From<std::io::Error> for ProtocolError {
27 fn from(e: std::io::Error) -> ProtocolError {
28 ProtocolError::Io(e)
29 }
30}
31
32#[derive(Debug, Error)]
34pub enum MessageParseError {
35 #[error("empty message")]
37 EmptyMessage,
38
39 #[error("invalid command")]
41 InvalidCommand,
42
43 #[error("invalid mode string: {}", string)]
45 InvalidModeString {
46 string: String,
48 #[source]
50 cause: ModeParseError,
51 },
52
53 #[error("invalid {} subcommand: {}", cmd, sub)]
55 InvalidSubcommand {
56 cmd: &'static str,
58 sub: String,
60 },
61}
62
63#[derive(Debug, Error)]
65pub enum ModeParseError {
66 #[error("invalid mode modifier: {}", modifier)]
68 InvalidModeModifier {
69 modifier: char,
71 },
72
73 #[error("missing mode modifier")]
75 MissingModeModifier,
76}