1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
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"))]
    #[snafu(backtrace(delegate))]
    Broadcast { 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,
    },
}