use crate::base::ErrorCode;
use crate::messages::{Request, Response};
use snafu::{Backtrace, Snafu};
use std::string::FromUtf8Error;
use {ommui_broadcast, serialport, std};
#[derive(Debug, Snafu)]
#[snafu(visibility(pub(crate)))]
pub enum Error {
#[snafu(display("Response timeout"))]
Timeout { backtrace: Backtrace },
#[snafu(display("channel sender disconnected"))]
ChannelSenderDisconnected { backtrace: Backtrace },
#[snafu(display("broadcast error"))]
Broadcast {
#[snafu(backtrace)]
source: ommui_broadcast::Error,
},
#[snafu(display("Couldn't create thread: {}", source))]
ThreadCreation {
source: std::io::Error,
backtrace: Backtrace,
},
#[snafu(display("serial port error"))]
SerialPort {
source: serialport::Error,
backtrace: Backtrace,
},
#[snafu(display("unexpected response type"))]
UnexpectedResponseType { backtrace: Backtrace },
#[snafu(display("programmer error"))]
ProgrammerError { backtrace: Backtrace },
#[snafu(display("xio error {:#x} ({:?})", error_code, error_code))]
Xio {
error_code: ErrorCode,
backtrace: Backtrace,
},
#[snafu(display("IO error: {}", source))]
Io {
source: std::io::Error,
backtrace: Backtrace,
},
#[snafu(display(
"Expected sequence number {}, response had sequence number {}. \
Request: {:?}, response: {:?}",
expected,
received,
request,
response
))]
XioSequenceError {
expected: u8,
received: u8,
request: Request,
response: Response,
backtrace: Backtrace,
},
#[snafu(display(
"Invalid length for {} payload. Received: {}, required: {}",
message_type,
received,
required
))]
InvalidPayloadLength {
message_type: &'static str,
received: usize,
required: usize,
backtrace: Backtrace,
},
#[snafu(display("Found unknown command id: {}", command_id))]
UnknownCommandId {
command_id: u16,
backtrace: Backtrace,
},
#[snafu(display(
"Unmatched response to request. Request: {:?}, Response: {:?}",
request,
response
))]
UnmatchedResponse {
request: Request,
response: Response,
backtrace: Backtrace,
},
#[snafu(display("Error converting to UTF-8: {}", source))]
Utf8Conversion { source: FromUtf8Error },
#[snafu(display(
"Invalid upload_job_parameters_request payload: \
Parameters {} value is not valid.",
parameter_index
))]
InvalidJobParametersPayload {
parameter_index: u16,
backtrace: Backtrace,
},
}