use thiserror::Error;
pub type EngineResult<T> = Result<T, EngineError>;
#[derive(Debug, Error)]
pub enum EngineError {
#[error("network request failed: {0}")]
Http(#[from] reqwest::Error),
#[error("invalid server URL: {0}")]
InvalidUrl(String),
#[error("invalid server response: {0}")]
InvalidResponse(String),
#[error("no reachable speed test servers (check your connection or configured servers)")]
NoServers,
#[error("no measurement samples were collected: {reason}")]
NoSamples {
reason: String,
},
#[error("test cancelled")]
Cancelled,
#[error("worker task failed: {0}")]
Task(#[from] tokio::task::JoinError),
}
impl EngineError {
#[must_use]
pub fn is_cancelled(&self) -> bool {
matches!(self, Self::Cancelled)
}
}