use thiserror::Error;
use crate::tekscope::ConnectStatus;
#[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),
},
}
}
}