use std::time::Duration;
#[derive(Debug, thiserror::Error)]
pub enum ClientError {
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("protocol error: {0}")]
Protocol(#[from] seedlink_rs_protocol::SeedlinkError),
#[error("timeout after {0:?}")]
Timeout(Duration),
#[error("disconnected")]
Disconnected,
#[error("server error: {0}")]
ServerError(String),
#[error("invalid state: expected {expected}, actual {actual}")]
InvalidState {
expected: &'static str,
actual: &'static str,
},
#[error("negotiation failed: {0}")]
NegotiationFailed(String),
#[error("unexpected response: {0}")]
UnexpectedResponse(String),
#[error("reconnect failed after {attempts} attempts")]
ReconnectFailed {
attempts: u32,
},
}
pub type Result<T> = std::result::Result<T, ClientError>;