xio_common 0.12.0

XIO commonly used functionality
Documentation
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,
    },
}