tekhsi_rs 0.1.1

High-performance client for Tektronix TekHSI enabled oscilloscopes
Documentation
use thiserror::Error;

use crate::tekscope::ConnectStatus;

/// Connection lifecycle errors returned by TekHSI connect/disconnect calls.
#[derive(Debug, Clone, Error)]
pub enum ConnectionError {
    #[error("scope timeout")]
    Timeout,
    #[error("scope busy (another client connected)")]
    ScopeBusy,
    #[error("fatal connection error: {message}")]
    Fatal { message: String },
    #[error("lost sync with scope (outside sequence)")]
    LostSync,
}

impl From<ConnectStatus> for ConnectionError {
    fn from(status: ConnectStatus) -> Self {
        match status {
            ConnectStatus::ConnectstatusTimeoutFailure => ConnectionError::Timeout,
            ConnectStatus::ConnectstatusInuseFailure => ConnectionError::ScopeBusy,
            ConnectStatus::ConnectstatusNotConnectedFailure => ConnectionError::Fatal {
                message: "not connected".to_string(),
            },
            ConnectStatus::ConnectstatusOutsideSequenceFailure => ConnectionError::LostSync,
            ConnectStatus::ConnectstatusUnknownFailure => ConnectionError::Fatal {
                message: "unknown connection failure".to_string(),
            },
            ConnectStatus::ConnectstatusUnspecified => ConnectionError::Fatal {
                message: "unspecified connection failure".to_string(),
            },
            _ => ConnectionError::Fatal {
                message: format!("unexpected connect status: {:?}", status),
            },
        }
    }
}