ur20/
error.rs

1use std::{fmt, io};
2
3/// UR20 specific errors.
4#[derive(Debug, PartialEq)]
5pub enum Error {
6    UnknownModule,
7    UnknownCategory,
8    BufferLength,
9    SequenceNumber,
10    DataLength,
11    RegisterCount,
12    ChannelParameter,
13    ChannelValue,
14    ModuleOffset,
15    Address,
16    Io(String), // TODO
17}
18
19#[rustfmt::skip]
20impl fmt::Display for Error {
21    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
22        match *self {
23            Error::UnknownModule    => write!(f, "unknown module type"),
24            Error::UnknownCategory  => write!(f, "unknown module category"),
25            Error::BufferLength     => write!(f, "invalid buffer length"),
26            Error::SequenceNumber   => write!(f, "invalid sequence number"),
27            Error::DataLength       => write!(f, "invalid data length"),
28            Error::RegisterCount    => write!(f, "invalid number of registers"),
29            Error::ChannelParameter => write!(f, "invalid channel paramater(s)"),
30            Error::ChannelValue     => write!(f, "invalid channel value(s)"),
31            Error::ModuleOffset     => write!(f, "invalid module offset"),
32            Error::Address          => write!(f, "invalid module address"),
33            Error::Io(ref err)      => write!(f, "I/O error: {}", err),
34        }
35    }
36}
37
38#[rustfmt::skip]
39impl ::std::error::Error for Error {
40    fn description(&self) -> &str {
41        match *self {
42            Error::UnknownModule    => "unknown module type",
43            Error::UnknownCategory  => "unknown module category",
44            Error::BufferLength     => "invalid buffer length",
45            Error::SequenceNumber   => "invalid sequence number",
46            Error::DataLength       => "invalid data length",
47            Error::RegisterCount    => "invalid number of registers",
48            Error::ChannelParameter => "invalid channel paramater(s)",
49            Error::ChannelValue     => "invalid channel value(s)",
50            Error::ModuleOffset     => "invalid module offset",
51            Error::Address          => "invalid module address",
52            Error::Io(ref err)      => err
53        }
54    }
55}
56
57impl From<io::Error> for Error {
58    fn from(e: io::Error) -> Self {
59        Error::Io(format!("{}", e))
60    }
61}